11.6. Podman を使用した systemd ユニットファイルの自動生成
デフォルトで、Podman は既存のコンテナーまたは Pod のユニットファイルを生成します。podman generate systemd --new を使用すると、より移植性の高い systemd ユニットファイルを生成できます。--new フラグでは、コンテナーの作成、起動、削除を行うユニットファイルを生成するように Podman に指示します。
podman v4.6 以降では、Quadlets を使用できるようになりました。Quadlets を使用すると、通常の systemd ユニットファイルと同様の形式でコンテナーを実行する方法を記述でき、systemd でコンテナーを実行する際の複雑さを意識せずに済みます。
前提条件
-
container-toolsメタパッケージがインストールされている。
手順
システムで使用するイメージをプルします。たとえば、
httpd-24イメージをプルするには、以下を実行します。podman pull registry.access.redhat.com/ubi10/httpd-24
# podman pull registry.access.redhat.com/ubi10/httpd-24Copy to Clipboard Copied! Toggle word wrap Toggle overflow オプション: システムで使用可能なすべてのイメージをリストします。
podman images
# podman images REPOSITORY TAG IMAGE ID CREATED SIZE registry.access.redhat.com/ubi10/httpd-24 latest 8594be0a0b57 2 weeks ago 462 MBCopy to Clipboard Copied! Toggle word wrap Toggle overflow httpdコンテナーを作成します。podman create --name httpd -p 8080:8080 registry.access.redhat.com/ubi10/httpd-24
# podman create --name httpd -p 8080:8080 registry.access.redhat.com/ubi10/httpd-24 cdb9f981cf143021b1679599d860026b13a77187f75e46cc0eac85293710a4b1Copy to Clipboard Copied! Toggle word wrap Toggle overflow オプション: コンテナーが作成されたことを確認します。
podman ps -a
# podman ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES cdb9f981cf14 registry.access.redhat.com/ubi10/httpd-24:latest /usr/bin/run-http... 5 minutes ago Created 0.0.0.0:8080->8080/tcp httpdCopy to Clipboard Copied! Toggle word wrap Toggle overflow httpdコンテナーのsystemdユニットファイルを生成します。podman generate systemd --new --files --name httpd
# podman generate systemd --new --files --name httpd /root/container-httpd.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow 生成された
container-httpd.servicesystemdユニットファイルの内容を表示します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
--new オプションを使用して生成されたユニットファイルでは、コンテナーと Pod が存在することを想定していません。したがって、サービスの起動時に (ExecStart の行を参照)、podman start コマンドではなく、podman run コマンドを実行します。たとえば、Generating a systemd unit file using Podman のセクションを参照してください。
podman runコマンドは、以下のコマンドラインオプションを使用します。-
--conmon-pidfileオプションは、ホストで実行しているconmonプロセスのプロセス ID を格納するパスを指します。conmonプロセスはコンテナーと同じ終了ステータスで終了します。これにより、systemdは正しいサービスステータスを報告し、必要に応じてコンテナーを再起動できます。 -
--cidfileオプションは、コンテナー ID を格納するパスを指します。 -
%tは、ランタイムディレクトリーのルートへのパスです (例:/run/user/$UserID)。 %nは、サービスの完全な名前です。/etc/systemd/systemにユニットファイルをコピーして root ユーザーとしてインストールします。cp -Z container-httpd.service /etc/systemd/system
# cp -Z container-httpd.service /etc/systemd/systemCopy to Clipboard Copied! Toggle word wrap Toggle overflow container-httpd.serviceを有効にして起動します。systemctl daemon-reload systemctl enable --now container-httpd.service
# systemctl daemon-reload # systemctl enable --now container-httpd.service Created symlink /etc/systemd/system/multi-user.target.wants/container-httpd.service/etc/systemd/system/container-httpd.service. Created symlink /etc/systemd/system/default.target.wants/container-httpd.service /etc/systemd/system/container-httpd.service. Copy to Clipboard Copied! Toggle word wrap Toggle overflow
-
検証
container-httpd.serviceのステータスを確認します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow