概要
Ansible と同じ書式で、コンテナイメージの作成手順を指定することができる ansible-bender を試してみた。
環境構築
手順書にしたがって、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