Help us understand the problem. What is going on with this article?

ansible-bender でコンテナイメージを作成する

概要

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 を用意する。

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 とほぼ同じ形式で用意する。

sample.yml
- 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 形式に変換する

buildah と docker の両方がインストールされていれば、以下のコマンドで podman のコンテナイメージを、同一ホストの docker に転送することができる。

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

その上で、以下のように docker save と docker load を組み合わせれば、他ホストに docker コンテナイメージを転送できる。

$ sudo docker save debian-python3:buster | ssh docker.example.net sudo docker load

作成したコンテナイメージを singularity 形式に変換する

singularity は oci-archive 形式をサポートしているので、以下の手順で変換することが可能である。

$ sudo podman save --format oci-archive --output debian-python3.tar localhost/debian-python3:buster
$ singularity build debian-python3.sif oci-archive://debian-python3.tar
tsuchm
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした