第6章 UBI コンテナーへのソフトウェアの追加
UBI (Red Hat Universal Base Images) は、RHEL コンテンツのサブセットから構築されます。UBI は、UBI でインストールするために自由に利用可能な RHEL パッケージのサブセットも提供します。実行中のコンテナーにソフトウェアを追加または更新するには、RPM パッケージと更新を含む DNF リポジトリーを使用できます。UBI は、Python、Perl、Node.js、Ruby などの事前にビルドされた言語ランタイムコンテナーイメージを提供します。
UBI コンテナーを実行するパッケージを UBI リポジトリーから追加するには、以下を行います。
-
UBI init および UBI 標準イメージでは、
dnfコマンドを使用します。 -
UBI minimal イメージでは、
microdnfコマンドを使用します。
実行中のコンテナーでソフトウェアパッケージを直接インストールして作業すると、パッケージを一時的に追加します。この変更はコンテナーイメージに保存されません。パッケージの変更を永続化するには、Buildah を使用した Containerfile からのイメージのビルド セクションを参照してください。
6.1. UBI init イメージの使用 リンクのコピーリンクがクリップボードにコピーされました!
コンテナーがホストシステム上で実行されるときに、systemd サービス (/sbin/init) によって自動的に起動するように Web サーバー (httpd) をインストールおよび設定する Containerfile を使用してコンテナーを構築できます。podman build コマンドは、1 つ以上の Containerfiles と指定されたビルドコンテキストディレクトリー内の指示を使用してイメージをビルドします。コンテキストディレクトリーは、アーカイブ、Git リポジトリー、または Containerfile の URL として指定できます。コンテキストディレクトリーが指定されていない場合、現在の作業ディレクトリーはビルドコンテキストと見なされ、Containerfile が含まれている必要があります。--file オプションで Containerfile を指定することもできます。
前提条件
-
container-toolsメタパッケージがインストールされている。
手順
新しいディレクトリーに以下の内容を含む
Containerfileを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow Containerfileは、httpdパッケージをインストールし、ブート時にhttpdサービスが開始できるようにし、テストファイル (index.html) を作成し、Web サーバーをホスト (ポート 80) に公開し、コンテナーの起動時、systemdinit サービス (/sbin/init) を開始します。コンテナーをビルドします。
podman build --format=docker -t mysysd .
# podman build --format=docker -t mysysd .Copy to Clipboard Copied! Toggle word wrap Toggle overflow オプション: お使いのシステムで
systemdを使用してコンテナーを実行し、SELinux を有効にする場合は、container_manage_cgroupブール値変数を設定する必要があります。setsebool -P container_manage_cgroup 1
# setsebool -P container_manage_cgroup 1Copy to Clipboard Copied! Toggle word wrap Toggle overflow mysysd_runという名前のコンテナーを実行します。podman run -d --name=mysysd_run -p 80:80 mysysd
# podman run -d --name=mysysd_run -p 80:80 mysysdCopy to Clipboard Copied! Toggle word wrap Toggle overflow mysysdイメージがmysysd_runコンテナーをデーモンプロセスとして実行し、コンテナーのポート 80 がホストシステムのポート 80 に公開されます。注記ルートレスモードでは、1024 以上のホストのポート番号を選択する必要があります。以下に例を示します。
podman run -d --name=mysysd -p 8081:80 mysysd
$ podman run -d --name=mysysd -p 8081:80 mysysdCopy to Clipboard Copied! Toggle word wrap Toggle overflow 1024 未満のポート番号を使用するには、
net.ipv4.ip_unprivileged_port_start変数を変更する必要があります。sysctl net.ipv4.ip_unprivileged_port_start=80
# sysctl net.ipv4.ip_unprivileged_port_start=80Copy to Clipboard Copied! Toggle word wrap Toggle overflow コンテナーが実行されていることを確認します。
podman ps
# podman ps a282b0c2ad3d localhost/mysysd:latest /sbin/init 15 seconds ago Up 14 seconds ago 0.0.0.0:80->80/tcp mysysd_runCopy to Clipboard Copied! Toggle word wrap Toggle overflow Web サーバーをテストします。
curl localhost/index.html
# curl localhost/index.html Successful Web Server TestCopy to Clipboard Copied! Toggle word wrap Toggle overflow