6 Podmanサービスの操作
Podmanは、Systemdサービスと統合して、ポッドやコンテナをシステム・サービスとして管理できます。Podmanサービス・ラッパーを使用すると、システム・ブート時にコンテナまたはポッドが開始されるように構成できるようになり、ホスト・システムで実行できるその他のサービスと同様に管理できるようになります。
Podmanには、コンテナまたはポッドにSystemdサービス・ラッパー構成ファイルを自動的に生成するツールが用意されているため、コンテナ・インフラストラクチャの管理にSystemdを使用できます。
標準ユーザーとしてコンテナを実行している場合は、Systemdユーザー・サービスを使用できます。また、rootユーザーとしてコンテナを実行している場合は、システム・レベルのサービスを構成できます。
コンテナとポッドのサービス・ラッパーに対するSELinux権限の設定
システムでSELinuxをenforcing
モードに設定している場合は、コンテナの開始、停止および監視にSystemdを使用できるように、container_manage_cgroup
権限を有効にする必要があります。
sudo setsebool -P container_manage_cgroup on
Quadletについて
podman generate systemdコマンドを使用してPodmanサービス・ラッパーを生成し、すべてのSystemdユニット・ファイルを個別に管理するかわりに、単一のQuadletを管理し、podman-systemd
デーモンを使用して、必要なときにいつでもそれらのSystemdユニット・ファイルを再生成できます。
Quadletを使用するもう1つの実用的な利点は、新しいバージョンのPodmanがリリースされるたびに、影響を受けるサービスを再初期化することで、任意のテンプレート化Systemdユニット・ファイルに対する修正および拡張をロールアウトできることです。
ノート:
Oracle Linux 8ホストでは、Quadletはroot権限でのみ実行できます。詳細は、「非特権ユーザーに対してQuadletがOracle Linux 8で失敗する」を参照してください。
Quadletコンテナの作成
Quadletコンテナは、.container
ファイル拡張子を持つユニット・ファイルを使用して管理されます。また、[Container]
セクションも含める必要があります。次に例を示します:
[Unit]
Description=your-description
After=local-fs.target
[Container]
Image=container-registry.oracle.com/os/oraclelinux:8-slim
Exec=your-command-here
[Install]
# Start by default on boot
WantedBy=multi-user.target default.target
root権限で実行されるQuadletコンテナを作成するには、その.container
ファイルを/usr/share/containers/systemd/
ディレクトリまたは/etc/containers/systemd/
ディレクトリに格納してから、Systemdサービスをリロードします:
sudo systemctl daemon-reload
標準のユーザー権限で実行されるQuadletコンテナを作成するには、管理者が個々のユーザーごとに/etc/containers/systemd/users/${USER_ID}
ディレクトリにquadletファイルを作成するか、個々のユーザーが.container
ファイルを自分の~/.config/containers/systemd/
ディレクトリに格納してから、Systemdサービスを再ロードします:
systemctl --user daemon-reload
作成されたユニット・ファイルを調べるには、quadlet
コマンドで-dryrun
オプションを使用できます:
/usr/libexec/podman/quadlet -dryrun
root権限なしで実行されるQuadletコンテナの-user
オプションを追加します。
systemctl
コマンドを使用して、他のSystemdサービスと同じ方法でQuadletを管理できるようになりました。たとえば、テスト実行中に確認されたmyoracle
というquadletコンテナを開始するには、次のコマンドを実行します:
sudo systemctl start myoracle
詳細は、podman-systemd.unit(5)
マニュアル・ページを参照してください。
Podmanログイン・シェルの使用
Oracle Linux 9では、Podmanログイン・シェルを使用して、コンテナでシェル・コマンドを実行できます。この機能により、コンテナ内での作業時に、確立された境界内にユーザーが保持されるようにする利点が得られます。ユーザーは、/bin/bash
などの通常のシェルのかわりに、/usr/bin/podmansh
シェル・コマンドを使用するように構成されます。このコマンドは、podmansh
というルートレス・コンテナでユーザーのセッションを開始します。このコンテナは、ユーザーがセッションを終了するまで実行が続行され、その時点でコンテナは削除されます。
管理者は、Quadletファイルでこの機能を使用するユーザーを構成します。これらのファイルは、ユーザーがコンテナ内にいるときのホスト・システムの可視性、アクセス制限、セキュリティ権限、リソース使用率など、ユーザーがコンテナ内で作業するときのパラメータを定義します。詳細は、「Quadletについて」を参照してください。
次に、コンテナでの作業時にPodmanログイン・シェルおよびその他の設定パラメータを使用するようにユーザーを構成する方法の例を示します。quadletが特定の${USER_ID}
に適用され、quadletがpodmansh.container
であるとします。
[Unit]
Description=The Podmansh container
After=local-fs.target
[Container]
Image=container-registry.oracle.com/os/oraclelinux:8-slim
ContainerName=podmansh
RemapUsers=keep-id
RunInit=yes
Exec=sleep infinity
[Install]
RequiredBy=default.target
[Container
]セクションでさらにパラメータを定義して、コンテナ内でユーザーが実行できる操作をさらに指定できます。詳細は、podman-systemd.unit(5)
マニュアル・ページを参照してください。
コンテナの名前(ContainerName
)はpodman
である必要があることに注意してください。このように、/usr/bin/podmansh
シェル・コマンドは、podmansh
コンテナでpodman exec
を実行します。
quadletの${USER_ID}
に一致するIDを持つユーザーは、次のようにログインします:
ssh user@systemname
quadletファイル内でユーザーに定義されたすべての設定は、ユーザーや管理者の介入を必要とせずに透過的に実行されます。
Podmanログイン・シェルとその他の定義済パラメータを組み合せてユーザーを分離することで、コンテナのセキュリティを確保します。コンテナはセッションの最後に削除され、再度ログインすると、ユーザーに対して同じ制限された環境が再作成されます。そのため、コンテナの操作はより簡単になります。
Podmanサービス・ラッパーの生成
ゼロからSystemdサービス・ラッパーを記述するかわりに、podman generate systemd
コマンドを使用して、自動的にサービス構成ファイルを生成します。
rootユーザー・システム・サービスとしてコンテナを実行する場合は、コンテナ・サービス・ラッパー構成ファイルを/etc/systemd/system/
に格納します。標準ユーザーとしてコンテナを実行する場合は、コンテナ・サービス・ラッパー構成ファイルを$HOME/.config/systemd/user/
に保存します。
コンテナ用Podmanサービス・ラッパーの生成
個別のコンテナ用のSystemdサービス・ラッパーを生成して、$HOME/.config/systemd/user
ディレクトリに格納するには:
podman generate systemd --name containername > $HOME/.config/systemd/user/container-containername.service
ポッド用Podmanサービス・ラッパーの生成
特定のポッドのPodmanサービス・ラッパーを生成するには、次のコマンドを使用します。
podman generate systemd --name podname
ただし、ポッド自体内のすべてのコンテナに対するサービス・ラッパー構成ファイルの生成を含めるには、コマンドで--file
オプションを使用します。この場合、ファイルを生成するディレクトリでコマンドを実行する必要があります。
$HOME/.config/systemd/user
で、mypod
とそのコンテナの両方に対してPodmanサービス・ラッパーを生成するとします。次のコマンドを実行します。
cd $HOME/.config/systemd/user/
podman generate systemd --files --name mypod
このコマンドでは、mypod
を対象とするサービス・ラッパーには、ポッドが正常に実行するために必要な各コンテナ・ラッパーへの依存関係が含まれています。
Systemdサービス・ラッパーを使用してポッドを開始または停止すると、コンテナ・サービスは同じアクションを自動的にトリガーします。
Podmanサービスの管理
すべてのSystemdサービスは、systemctlコマンドを使用して管理します。
コンテナまたはポッドにSystemdサービス・ラッパーを構成した後、そのコンテナまたはポッドはsystemctlコマンドを使用してサービスとして管理できます。
標準ユーザーとしてコンテナを実行している場合は、すべてのsystemctlコマンドに--user
オプションを使用する必要があります。
Podmanサービスの開始と再開
注意:
すでにSystemdサービス・ラッパーの外部でコンテナまたはポッドが実行されている場合、そのコンテナまたはポッドはサービス・ラッパーでは開始できません。その場合は、podman stopまたはpodman pod stopコマンドを使用して、最初にコンテナまたはポッドを停止します。
rootユーザーは、サービス構成が/etc/systemd/system/
に格納されている場合にコンテナを開始できます。次に例を示します:
sudo systemctl start container-containername.service
標準ユーザーは、サービス構成が$HOME/.config/systemd/user
に格納されている場合に、同じ方法でコンテナを開始できますが、--user
オプションを使用する必要があります。
systemctl --user start container-containername.service
ポッドのサービス・ラッパーを開始するには、次のようにパラレル・コマンド構文を使用します。
sudo systemctl start pod-podname.service
コンテナまたはポッドのサービス・ラッパーを再開するには、systemctl restart
コマンドを使用できます。次のコマンドは、標準ユーザーとしてポッドを再開します。
systemctl --user restart pod-podname.service
ポッドを開始または再開すると、ポッドに含まれているすべてのコンテナが同様に開始または再開されます。
Podmanサービスの自動リストアの有効化
Podmanコンテナのサービス・ラッパーを生成するときには、カスタムの構成ステップを追加できます。
たとえば、1秒のタイムアウト後に常に再開するサービス・ラッパーを作成するには、次のように--restart-policy
フラグにパラメータ値を設定します。
sudo systemctl generate systemd --restart-policy=always -t 1 containername > /etc/systemd/user/container-containername.service
システムの起動時にサービス・ラッパーが自動的に実行されるように設定するには、次のように入力します。
sudo systemctl enable container-containername.service
同じコマンドをポッドのサービス・ラッパーにも使用できます。
sudo systemctl enable pod-podname.service
サービスが標準ユーザーとして実行されている場合は、ログインしていないときにプロセスを実行する権限をユーザーに付与する必要があります。それ以外の場合、ユーザーはサービスを有効にできません。次のコマンドをrootユーザーとして入力します。
sudo loginctl enable-linger user
詳細は、https://docs.oracle.com/en/learn/use_systemd/index.htmlを参照してください。
Podmanサービス・ラッパー構成の変更
Podmanで生成したSystemdサービス・ラッパー構成ファイルは、標準のSystemd構成の形式と仕様に従います。生成されたサービス・ラッパー構成ファイルを変更する場合は、そのファイルをテキスト・エディタで手動で編集します。
『Oracle Linux 8: コア・システム構成の管理』の手順に従って、Oracle Linux 8でSystemdサービス・ラッパーの動作を変更します。Oracle Linux 9の場合、詳細は、『Oracle Linux 9: コア・システム構成の管理』を参照してください。
podman generate systemd
コマンドで生成したサービス・ラッパーの変更方法の詳細は、https://docs.podman.io/en/latest/markdown/podman-generate-systemd.1.htmlを参照してください。