使用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