5.4. コンテナーのビルド
Buildah は、Red Hat Enterprise Linux でコンテナーをビルドするための主要なツールです。これを Podman と併用することで、ビルドしたコンテナーを管理および実行できます。
前提条件
-
container-toolsメタパッケージがインストールされている。
手順
コンテナーツールのインストール: ご使用の RHEL システムに必要なコンテナーツールがインストールされていることを確認します。container-tools モジュールは、Buildah、Podman、Skopeo を提供します。
$ sudo dnf install container-toolsContainerfile の作成: Containerfile は、コンテナーイメージをビルドするための手順を定義したものです。このファイルでは、ベースイメージ、インストールするソフトウェア、適用する設定、実行するアプリケーションを指定します。以下に例を示します。
FROM registry.redhat.io/ubi8/ubi-minimal RUN microdnf -y update && microdnf -y install COPY index.html /var/www/html/ EXPOSE 80 CMD ["httpd", "-DFOREGROUND"]Buildah を使用してコンテナーイメージをビルドします。コンテナーファイルを含むディレクトリーに移動した後、
buildah bud(またはpodman build) を使用してイメージをビルドします。$ cd /<path_to_container_file> $ buildah bud -t <your_image_name>:_<tag>_-
your_image_name: イメージの名前。 -
tag: イメージのタグ (例: latest、1.0)。 -
.: Containerfile がカレントディレクトリーにあることを示します。
-
コンテナーの実行: イメージをビルドした後、
podman runコマンドを使用して、そのイメージからコンテナーを実行できます。$ podman run -d -p 8080:80 my-web-app-
-d: コンテナーをデタッチモード (バックグラウンド) で実行します。 -
-p 8080:80: ホスト上のポート 8080 をコンテナー内のポート 80 にマッピングします。 -
my-web-app: 実行するイメージの名前。
-
コンテナービルドにおける heredocs 構文
BuildKit を有効にしておけば、Red Hat Enterprise Linux ベースイメージを使用した Containerfile 内で heredoc 構文を使用できます。コマンドに heredoc 構文が含まれている場合、Containerfile は、heredoc の区切り文字のみを含む行が現れるまでの後続の行を、同じコマンドの一部とみなします。heredocs を使用すると、Containerfile 内の RUN や COPY などの命令内に、複数行の文字列を直接埋め込むことができます。これは RHEL ベースのイメージで特に役立ちます。単純なタスク用に個別のスクリプトファイルを作成する必要がなくなり、可読性と保守性が向上するためです。
たとえば、一般的な使用例として、単一の RUN 命令内で複数のシェルコマンドを実行して単一のイメージレイヤーを作成し、&& \ 構文の使用を回避する例が挙げられます。
# syntax=container/containerfile:1.4
FROM registry.redhat.io/ubi9/ubi-minimal
# Use a heredoc to perform a multi-line RUN command:
RUN <<EOF
microdnf -y update
microdnf -y install nginx
microdnf clean all
echo "Nginx installed and packages updated"
EOF
-
RUN <<EOF:<<は heredocs の開始点を示すものです。EOFはユーザー定義の区切り文字です。 -
<<EOFから最後のEOFまでの行は、シェルによって実行される単一のスクリプトとして扱われます。 -
ブロック全体が単一の
RUN命令であるため、より効率的で読みやすくなります。