19.5. Buildah でゼロからイメージを新規作成

ベースイメージから開始する代わりに、最低限のコンテナーメタデータのみを保持する新しいコンテナーを作成できます。

スクラッチコンテナーからイメージを作成するときは、次のことを考慮してください。

  • scratch イメージに依存関係のない実行ファイルをコピーして、minimal コンテナーを機能させるため、いくつかの設定を行うことができます。
  • RPM データベースを初期化し、dnfrpm などのツールを使用するために、コンテナーにリリースパッケージを追加する必要があります。
  • パッケージを多数追加する場合は、scratch イメージではなく、標準の UBI イメージまたは UBI minimal イメージの使用を検討してください。

前提条件

  • container-tools メタパッケージがインストールされている。

手順

Web サービス httpd をコンテナーに追加し、実行するように設定できます。

  1. 空のコンテナーを作成します。

    # buildah from scratch
    working-container
  2. working-container コンテナーをマウントし、マウントポイントパスを scratchmnt 変数に保存します。

    # scratchmnt=$(buildah mount working-container)
    
    
    # echo $scratchmnt
    /var/lib/containers/storage/overlay/be2eaecf9f74b6acfe4d0017dd5534fde06b2fa8de9ed875691f6ccc791c1836/merged
  3. scratch イメージで RPM データベースを初期化し、redhat-release パッケージを追加します。

    # dnf install -y --releasever=8 --installroot=$scratchmnt redhat-release
  4. httphttpd サービスを scratch ディレクトリーにインストールします。

    # dnf install -y --setopt=reposdir=/etc/yum.repos.d \
          --installroot=$scratchmnt \
          --setopt=cachedir=/var/cache/dnf httpd
  5. $scratchmnt/var/www/html/index.html ファイルを作成します。

    # mkdir -p $scratchmnt/var/www/html
    # echo "Your httpd container from scratch works!" > $scratchmnt/var/www/html/index.html
  6. コンテナーから直接 httpd デーモンを実行するように working-container を設定します。

    # buildah config --cmd "/usr/sbin/httpd -DFOREGROUND" working-container
    # buildah config --port 80/tcp working-container
    # buildah commit working-container localhost/myhttpd:latest

検証

  1. ローカルストレージ内のイメージをリスト表示します。

    # podman images
    REPOSITORY                                 TAG     IMAGE ID      CREATED         SIZE
    localhost/myhttpd                          latest  08da72792f60  2 minutes ago   121 MB
  2. localhost/myhttpd イメージを実行し、コンテナーとホストシステム間のポートマッピングを設定します。

    # podman run -p 8080:80 -d --name myhttpd 08da72792f60
  3. Web サーバーをテストします。

    # curl localhost:8080
    Your httpd container from scratch works!

関連情報

  • buildah-config の man ページ
  • buildah-commit の man ページ