第14章 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 の移植可能な説明を生成できます。
14.1. Quadlet を使用した 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
ユニットファイルを作成します。$ cat $HOME/.config/containers/systemd/mysleep.container [Unit] Description=The sleep container After=local-fs.target [Container] Image=registry.access.redhat.com/ubi9-minimal:latest Exec=sleep 1000 [Install] # Start by default on boot WantedBy=multi-user.target default.target
[Container]
セクションでは、以下を指定する必要があります。-
Image
- 実行するコンテナーイメージ Exec
- コンテナー内で実行するコマンドこれにより、
systemd
ユニットファイルで指定する他のすべてのフィールドを使用できるようになります。
-
mysleep.container
ファイルに基づいてmysleep.service
を作成します。$ systemctl --user daemon-reload
オプション:
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)
mysleep.service
を起動します。$ systemctl --user start mysleep.service
検証
mysleep.service
のステータスを確認します。$ systemctl --user status mysleep.service ● mysleep.service - The sleep container Loaded: loaded (/home/username/.config/containers/systemd/mysleep.container; generated) Active: active (running) since Thu 2023-02-09 18:07:23 EST; 2s ago Main PID: 265651 (conmon) Tasks: 3 (limit: 76815) Memory: 1.6M CPU: 94ms CGroup: ...
すべてのコンテナーをリスト表示します。
$ podman ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 421c8293fc1b registry.access.redhat.com/ubi9-minimal:latest sleep 1000 30 seconds ago Up 10 seconds ago systemd-mysleep
作成されたコンテナーの名前は次の要素で構成されています。
-
systemd-
接頭辞 systemd
ユニットの名前、つまりsystemd-mysleep
この名前は、一般的なコンテナーと
systemd
ユニットで実行されているコンテナーを区別するのに役立ちます。また、コンテナーがどのユニットで実行されるかを判断するのにも役立ちます。コンテナーの名前を変更する場合は、[Container]
セクションのContainerName
フィールドを使用します。
-