LoginSignup
3
2

More than 1 year has passed since last update.

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

Last updated at Posted at 2020-07-03

概要

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

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
3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2