第12章 Podman を使用した systemd へのコンテナーの移植
Podman (Pod Manager) は、シンプルなデーモンレスツールである、フル機能のコンテナーエンジンです。Podman は、他のコンテナーエンジンからの移行を容易にし、Pod、コンテナー、およびイメージの管理を可能にする Docker-CLI と同等のコマンドラインを備えています。
もともと、Podman は、Linux システム全体を提供したり、起動順序、依存関係のチェック、失敗したサービスの回復などのサービスを管理したりするように設計されたものではありませんでした。完全なシステム初期化は、systemd が担当していました。Red Hat はコンテナーを systemd と統合しているため、Linux システムで他のサービスや機能が管理するのと同じ方法で、Podman によってビルドされた OCI および Docker 形式のコンテナーを管理できます。systemd 初期化サービスを使用して、Pod とコンテナーを操作できます。
systemd ユニットファイルを使用すると、次のことが可能になります。
-
systemdサービスとして開始するようにコンテナーまたは Pod をセットアップします。 - コンテナー化されたサービスを実行して依存関係を確認する順序を定義します (たとえば、別のサービスが実行されていること、ファイルが利用可能であること、またはリソースがマウントされていることなど)。
-
systemctlコマンドを使用して、systemdシステムの状態を制御します。
systemd ユニットファイルを使用して、コンテナーと Pod の移植可能な説明を生成できます。
12.1. Quadlets を使用した systemd ユニットファイルの自動生成 リンクのコピーリンクがクリップボードにコピーされました!
Quadlet を使用する場合、通常の systemd ユニットファイルによく似た形式でコンテナーを実行する方法を記述します。コンテナーの記述は、関連するコンテナーの詳細を中心に行うため、systemd でのコンテナー実行に関する技術的詳細を意識せずに済みます。次のいずれかのディレクトリーに <CTRNAME>.container ユニットファイルを作成します。
-
root ユーザーの場合:
/usr/share/containers/systemd/または/etc/containers/systemd/ -
ルートレスユーザーの場合:
$HOME/.config/containers/systemd/、$XDG_CONFIG_HOME/containers/systemd/、/etc/containers/systemd/users/$(UID)、または/etc/containers/systemd/users/
Quadlet は、Podman v4.6 以降で利用可能です。
前提条件
-
container-toolsメタパッケージがインストールされている。
手順
mysleep.containerユニットファイルを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow [Container]セクションでは、以下を指定する必要があります。-
Image- 実行するコンテナーイメージ Exec- コンテナー内で実行するコマンドこれにより、
systemdユニットファイルで指定する他のすべてのフィールドを使用できるようになります。
-
mysleep.containerファイルに基づいてmysleep.serviceを作成します。systemctl --user daemon-reload
$ systemctl --user daemon-reloadCopy to Clipboard Copied! Toggle word wrap Toggle overflow オプション:
mysleep.serviceのステータスを確認します。systemctl --user status mysleep.service ○ mysleep.service - The sleep container Loaded: loaded (/home/username/.config/containers/systemd/mysleep.container; generated) Active: inactive (dead)
$ systemctl --user status mysleep.service ○ mysleep.service - The sleep container Loaded: loaded (/home/username/.config/containers/systemd/mysleep.container; generated) Active: inactive (dead)Copy to Clipboard Copied! Toggle word wrap Toggle overflow mysleep.serviceを起動します。systemctl --user start mysleep.service
$ systemctl --user start mysleep.serviceCopy to Clipboard Copied! Toggle word wrap Toggle overflow
検証
mysleep.serviceのステータスを確認します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow すべてのコンテナーをリスト表示します。
podman ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 421c8293fc1b registry.access.redhat.com/ubi10-minimal:latest sleep 1000 30 seconds ago Up 10 seconds ago systemd-mysleep
$ podman ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 421c8293fc1b registry.access.redhat.com/ubi10-minimal:latest sleep 1000 30 seconds ago Up 10 seconds ago systemd-mysleepCopy to Clipboard Copied! Toggle word wrap Toggle overflow 作成されたコンテナーの名前は次の要素で構成されています。
-
systemd-接頭辞 systemdユニットの名前、つまりsystemd-mysleepこの名前は、一般的なコンテナーと
systemdユニットで実行されているコンテナーを区別するのに役立ちます。また、コンテナーがどのユニットで実行されるかを判断するのにも役立ちます。コンテナーの名前を変更する場合は、[Container]セクションのContainerNameフィールドを使用します。詳細は、システム上の
podman-systemd.unit(5)man ページを参照してください。
-