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-24
Copy 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 MB
Copy 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 cdb9f981cf143021b1679599d860026b13a77187f75e46cc0eac85293710a4b1
Copy 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 httpd
Copy 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.service
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 生成された
container-httpd.service
systemd
ユニットファイルの内容を表示します。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/system
Copy 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