Red Hat Training
A Red Hat training course is available for RHEL 8
第7章 UBI コンテナーへのソフトウェアの追加
UBI (Red Hat Universal Base Images) は、RHEL コンテンツのサブセットから構築されます。UBI は、UBI でインストールするために自由に利用可能な RHEL パッケージのサブセットも提供します。実行中のコンテナーにソフトウェアを追加または更新するには、RPM パッケージおよび更新を含む yum リポジトリーを使用します。UBI は、Python、Perl、Node.js、Ruby などの事前にビルドされた言語ランタイムコンテナーイメージを提供します。
UBI コンテナーを実行するパッケージを UBI リポジトリーから追加するには、以下を行います。
-
UBI init および UBI 標準イメージでは、
yum
コマンドを使用します。 -
UBI の最小イメージでは、
microdnf
コマンドを使用します。
実行中のコンテナーでソフトウェアパッケージを直接インストールして作業すると、パッケージを一時的に追加します。この変更はコンテナーイメージに保存されません。パッケージの変更を永続化するには、Buildah を使用した Containerfile からのイメージのビルド セクションを参照してください。
UBI コンテナーにソフトウェアを追加する場合は、サブスクライブしている RHEL ホスト、またはサブスクライブしていない (または非 RHEL) システムで UBI を更新する手順が異なります。
7.1. UBI init イメージの使用
この手順では、コンテナーがホストシステム上で実行されるときに systemd
サービス (/sbin/init
) によって自動的に起動するように Web サーバー (httpd
) をインストールおよび設定する Containerfile
を使用してコンテナーを構築する方法を示します。podman build
コマンドは、1 つ以上の Containerfiles
および指定されたビルドコンテキストディレクトリー内の命令を使用してイメージをビルドします。コンテキストディレクトリーは、アーカイブ、Git リポジトリー、または Containerfile
の URL として指定できます。コンテキストディレクトリーが指定されていない場合、現在の作業ディレクトリーはビルドコンテキストと見なされ、Containerfile
が含まれている必要があります。--file
オプションで Containerfile
を指定することもできます。
前提条件
-
container-tools
モジュールがインストールされている。
手順
新しいディレクトリーに以下の内容を含む
Containerfile
を作成します。FROM registry.access.redhat.com/ubi8/ubi-init RUN yum -y install httpd; yum clean all; systemctl enable httpd; RUN echo "Successful Web Server Test" > /var/www/html/index.html RUN mkdir /etc/systemd/system/httpd.service.d/; echo -e '[Service]\nRestart=always' > /etc/systemd/system/httpd.service.d/httpd.conf EXPOSE 80 CMD [ "/sbin/init" ]
Containerfile
は、httpd
パッケージをインストールし、ブート時にhttpd
サービスが開始できるようにし、テストファイル (index.html
) を作成し、Web サーバーをホスト (ポート 80) に公開し、コンテナーの起動時、systemd
init サービス (/sbin/init
) を開始します。コンテナーをビルドします。
# podman build --format=docker -t mysysd .
オプション: お使いのシステムで
systemd
を使用してコンテナーを実行し、SELinux を有効にする場合は、container_manage_cgroup
ブール値変数を設定する必要があります。# setsebool -P container_manage_cgroup 1
mysysd_run
という名前のコンテナーを実行します。# podman run -d --name=mysysd_run -p 80:80 mysysd
mysysd
イメージがmysysd_run
コンテナーをデーモンプロセスとして実行し、コンテナーのポート 80 がホストシステムのポート 80 に公開されます。注記ルートレスモードでは、1024 以上のホストのポート番号を選択する必要があります。以下に例を示します。
$ podman run -d --name=mysysd -p 8081:80 mysysd
1024 未満のポート番号を使用するには、
net.ipv4.ip_unprivileged_port_start
変数を変更する必要があります。# sysctl net.ipv4.ip_unprivileged_port_start=80
コンテナーが実行されていることを確認します。
# podman ps a282b0c2ad3d localhost/mysysd:latest /sbin/init 15 seconds ago Up 14 seconds ago 0.0.0.0:80->80/tcp mysysd_run
Web サーバーをテストします。
# curl localhost/index.html Successful Web Server Test
関連情報