5.4. コンテナーのビルド
Buildah は、Red Hat Enterprise Linux でコンテナーをビルドするための主要なツールです。これを Podman と併用することで、ビルドしたコンテナーを管理および実行できます。
前提条件
-
container-toolsメタパッケージがインストールされている。
手順
コンテナーツールのインストール: ご使用の RHEL システムに必要なコンテナーツールがインストールされていることを確認します。container-tools モジュールは、Buildah、Podman、Skopeo を提供します。
sudo dnf install container-tools
$ sudo dnf install container-toolsCopy to Clipboard Copied! Toggle word wrap Toggle overflow Containerfile の作成: 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"]
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"]Copy to Clipboard Copied! Toggle word wrap Toggle overflow Buildah を使用してコンテナーイメージをビルドします。コンテナーファイルを含むディレクトリーに移動した後、
buildah bud(またはpodman build) を使用してイメージをビルドします。cd /<path_to_container_file> buildah bud -t your_image_name:tag .
$ cd /<path_to_container_file> $ buildah bud -t your_image_name:tag .Copy to Clipboard Copied! Toggle word wrap Toggle overflow -
your_image_name: イメージの名前。 -
tag: イメージのタグ (例: latest、1.0)。 -
.: Containerfile がカレントディレクトリーにあることを示します。
-
コンテナーの実行: イメージをビルドした後、
podman runコマンドを使用して、そのイメージからコンテナーを実行できます。podman run -d -p 8080:80 my-web-app
$ podman run -d -p 8080:80 my-web-appCopy to Clipboard Copied! Toggle word wrap Toggle overflow -
-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命令内で複数のシェルコマンドを実行して単一のイメージレイヤーを作成し、&& \構文の使用を回避する例が挙げられます。
-
-
RUN <<EOF:<<は heredocs の開始点を示すものです。EOFはユーザー定義の区切り文字です。 -
<<EOFから最後のEOFまでの行は、シェルによって実行される単一のスクリプトとして扱われます。 -
ブロック全体が単一の
RUN命令であるため、より効率的で読みやすくなります。