6.4. Buildah で新規イメージを作成するコンテナーの変更

buildah コマンドを使用して、既存のコンテナーを変更し、この変更を新しいコンテナーイメージに適用する方法はいくつかあります。

  • コンテナーをマウントして、そのコンテナーにファイルをコピーします。
  • buildah copy および buildah config を使用して、コンテナーを変更します。

コンテナーを修正したら、buildah commit を使用して、新しいイメージに変更を適用します。

6.4.1. buildah mount でコンテナーの変更

buildah from でイメージを取得したあと、そのイメージを新しいイメージの基盤として使用できます。以下のテキストは、作業コンテナーをマウントし、そのコンテナーにファイルを追加して、新しいイメージへの変更をコミットすることで、新しいイメージを作成する方法を示しています。

以前使用した作業コンテナーを表示するには、以下を入力します。

# buildah containers
CONTAINER ID BUILDER IMAGE ID     IMAGE NAME  CONTAINER NAME

dc8f21af4a47   *     1456eedf8101 registry.redhat.io/ubi8/ubi:latest
               ubi-working-container
6d1ffccb557d   *     ab230ac5aba3 docker.io/library/myecho:latest
               myecho-working-container

コンテナーイメージをマウントし、マウントポイントを変数 ($mymount) に設定すると、処理が容易になります。

# mymount=$(buildah mount myecho-working-container)
# echo $mymount
/var/lib/containers/storage/devicemapper/mnt/176c273fe28c23e5319805a2c48559305a57a706cc7ae7bec7da4cd79edd3c02/rootfs

マウントしたコンテナーで、以前作成したスクリプトに内容を追加します。

# echo 'echo "We even modified it."' >> $mymount/usr/local/bin/myecho

(myecho という名前の) 新しいイメージを作成するために追加した内容をコミットするには、以下を入力します。

# buildah commit myecho-working-container containers-storage:myecho2

新しいイメージに変更が含まれることを確認するには、作業コンテナーを作成して実行します。

# buildah images
IMAGE ID     IMAGE NAME     CREATED AT          SIZE
a7e06d3cd0e2 docker.io/library/myecho2:latest
                            Oct 12, 2017 15:15  3.144 KB
# buildah from docker.io/library/myecho2:latest
myecho2-working-container
# buildah run myecho2-working-container
This container works!
We even modified it.

そのスクリプトに追加された新しい echo コマンドが、追加のテキストを表示するのを確認できます。

終了すると、コンテナーをアンマウントできます。

# buildah umount myecho-working-container

6.4.2. buildah copy および buildah config でコンテナーの変更

buildah copy を使用して、最初にマウントしなくても、ファイルをコンテナにコピーできます。以下は、前のセクションで作成 (およびマウントを解除) した myecho-working-containerを使用して、新しいスクリプトをコンテナーにコピーし、コンテナーの設定を変更して、デフォルトでそのスクリプトを実行します。

newecho という名前のスクリプトを作成し、実行可能にします。

# cat newecho
echo "I changed this container"
# chmod 755 newecho

新しい作業コンテナーを作成します。

# buildah from myecho:latest
myecho-working-container-2

newecho を、コンテナーの /usr/local/bin にコピーします。

# buildah copy myecho-working-container-2 newecho /usr/local/bin

newecho スクリプトを、新しいエントリーポイントとして使用するように設定を変更します。

# buildah config --entrypoint "/bin/sh -c /usr/local/bin/newecho "myecho-working-container-2

新しいコンテナーを実行すると、newecho コマンドが実行します。

# buildah run myecho-working-container-2
I changed this container

期待したようにコンテナーが動作すれば、新しいイメージ (mynewecho) にコミットできます。

# buildah commit myecho-working-container-2 containers-storage:mynewecho