5.4. コンテナーのビルド
Buildah または podman build を使用して、新しいコンテナーイメージを作成します。Containerfile 内でイメージに関する指示を定義することで、ソフトウェアのインストールと設定を自動化できます。
前提条件
-
container-toolsメタパッケージがインストールされている。
手順
コンテナーツールのインストール: ご使用の RHEL システムに必要なコンテナーツールがインストールされていることを確認します。container-tools モジュールは、Buildah、Podman、Skopeo を提供します。
$ sudo dnf install container-toolsContainerfile の作成: Containerfile は、コンテナーイメージをビルドするための手順を定義したものです。このファイルでは、ベースイメージ、インストールするソフトウェア、適用する設定、実行するアプリケーションを指定します。以下に例を示します。
FROM registry.redhat.io/ubi10/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: イメージの名前。 -
タグ: イメージに付けるタグ (例: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 の区切り文字のみを含む行が現れるまでの後続の行を、同じコマンドの一部とみなします。Containerfile では、heredocを使用して、RUNやCOPYなどの命令内に複数行の文字列を直接埋め込むことができます。これは RHEL ベースのイメージで特に役立ちます。単純なタスク用に個別のスクリプトファイルを作成する必要がなくなり、可読性と保守性が向上するためです。たとえば、一般的な使用例として、単一の
RUN命令内で複数のシェルコマンドを実行して単一のイメージレイヤーを作成し、&& \構文の使用を回避する例が挙げられます。
-
# syntax=container/containerfile:1.4
FROM registry.redhat.io/ubi10/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命令であるため、より効率的で読みやすくなります。