使用ansible-bender构建容器镜像

总结

我尝试使用ansible-bender来指定创建容器映像的步骤,它具有与Ansible相同的格式。

环境建设

按照操作手册的要求,安装ansible-bender。

$ sudo pip3 install ansible-bender

ansible-bender 内部调用了 buildah 和 podman,因此根据指南安装 buildah 和 podman。供参考,我使用的 ansible playbook 如下所示。

准备最小的容器映像

ansible-bender需要一个已安装Python的容器映像。然而,在DockerHub上分发的Debian映像中还不包含Python,因此ansible-bender无法应用于该映像。

因此,准备一个包含Python的最小化容器映像很方便。首先,准备以下类型的Dockerfile。

FROM debian:buster
MAINTAINER Anatano Namae <namae@example.jp>
RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y python3 && apt-get clean

然后,执行以下命令创建一个名为debian-python3的容器镜像。

$ sudo podman build -t debian-python3:buster -f Dockerfile

一旦创建完成,应该会在图像列表中显示如下。

$ sudo podman images
REPOSITORY                 TAG      IMAGE ID       CREATED          SIZE
localhost/debian-python3   buster   7b80a3ed5790   42 seconds ago   199 MB

使用ansible-bender创建容器镜像。

使用几乎相同的格式,为创建容器镜像编写Ansible的步骤文件。

- name: ntpd container
  hosts: all
  vars:
    ansible_bender:
      base_image: debian-python3:buster
      target_image:
        name: debian-ntpd:buster
  tasks:
   - name: install ntpd
     apt:
       name: ntpd
       state: latest

关于编写操作手册的详细步骤,请参考ansible-bender的文档。

在之后,你只需要执行以下命令即可。

$ sudo ansible-bender build sample.yml

当容器镜像的创建成功后,可以通过以下命令确认镜像已经生成。

$ sudo podman images
REPOSITORY              TAG      IMAGE ID       CREATED          SIZE
localhost/debian-ntpd   buster   ab26e1f28761   13 minutes ago   223 MB

顺便提一下,最新的 ansible-bender 只支持 buildah 作为后端,不再支持 docker。因此,无法直接创建 Docker 格式的容器镜像。

如果安装的软件包较多,则需要进行诸如指定HTTP_PROXY等细致的调整以缩短构建时间,但是我们还未完成配置方法的调查。

执行创建的容器镜像。

可以使用以下命令来执行 podman 容器镜像。

$ sudo podman run -ti localhost/debian-python3:buster /bin/bash

请注意,即使/bin/bash执行结束,容器环境仍保持存在,请小心。要销毁所有正在运行的容器环境,请执行以下命令。

$ sudo podman rm -f `sudo podman ps -aq`

将已创建的容器镜像转换为docker格式

如果不指定格式在podman中进行导出,则会以docker-archive的格式保存。

$ sudo podman save --output debian-python3.tar localhost/debian-python3:buster

如果安装了buildah和docker两者,那么可以使用以下命令将Podman的容器镜像传输到同一主机的docker中。

$ sudo buildah push debian-python3:buster docker-daemon:debian-python3:buster

将创建的容器映像转换为 Singularity 格式。

由于 singularity 支持 docker-archive 格式,所以可以使用以下命令进行转换。

$ singularity build debian-python3.sif docker-archive://debian-python3.tar