機械翻訳について

10 Podmanサービス・ラッパー

Podmanは、systemdサービスと統合して、ポッドおよびコンテナをシステム・サービスとして管理できます。 Podmanサービス・ラッパーを使用すると、システム・ブート時にコンテナまたはポッドが開始されるように構成できるようになり、ホスト・システムで実行できるその他のサービスと同様に管理できるようになります。

注意:

この項でsystemdユニット・ファイルを生成する方法は、Podman 4.6では非推奨になりました。 かわりに、Quadletsを使用してsystemdサービスを作成します。 詳細は、Podman Quadletsを参照してください。

Podmanには、systemdを使用してコンテナ・インフラストラクチャを管理できるように、システム上の任意のコンテナまたはポッドに対してsystemdサービス・ラッパー構成ファイルを自動的に生成するツールが用意されています。 podman generate systemdコマンドを使用して、systemdユニット・ファイルを自動的に生成できます。

コンテナを標準ユーザーとして実行している場合はsystemdユーザー・サービスを使用でき、コンテナをrootユーザーとして実行している場合はシステム・レベル・サービスを構成できます。

Podmanサービス・ラッパーの生成

podman generate systemdコマンドを使用して、Podmanコンテナおよびポッドのsystemdユニット・ファイルを自動的に生成します。

systemdサービス・ラッパーを最初から記述するかわりに、podman generate systemdコマンドを使用してサービス構成ファイルを自動的に生成できます。

rootユーザー・システム・サービスとしてコンテナを実行する場合は、コンテナ・サービス・ラッパー構成ファイルを/etc/systemd/system/に格納する必要があります。 標準ユーザーとしてコンテナを実行する場合は、コンテナ・サービス・ラッパー構成ファイルを$HOME/.config/systemd/user/に保存します。

例10-1コンテナのsystemdサービス・ラッパーの生成

個々のコンテナのsystemdサービス・ラッパーを生成し、それを$HOME/.config/systemd/userディレクトリに格納するには:

podman generate systemd --name containername > $HOME/.config/systemd/user/container-containername.service

例10-2ポッドのsystemdサービス・ラッパーの生成

特定のポッドの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サービス・ラッパーの外部で実行されている場合、サービス・ラッパーはコンテナまたはポッドを開始できません。 その場合は、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サービスの停止

コンテナまたはポッドを停止するには、systemctl stopコマンドを使用できます。 次のコマンドは、標準ユーザーとしてポッドを停止します。

systemctl --user stop pod-podname.service

ポッドを開始または再開すると、ポッドに含まれているすべてのコンテナが同様に開始または再開されます。

Podmanサービスのステータスの確認

コンテナまたはポッドに作成したサービス・ラッパーの現在のステータスを確認するには、systemctl statusコマンドを使用できます。次に例を示します:

systemctl --user status container-containername.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

ヒント:

systemdサービスの使用を試すには、Oracle LinuxでのSystemdの使用チュートリアルを参照してください。

Podmanサービス・ラッパー構成の変更

Podmanによって生成されるsystemdサービス・ラッパー構成ファイルは、標準のsystemd構成形式および仕様に準拠しています。 生成されたサービス・ラッパー構成ファイルを変更する場合は、そのファイルをテキスト・エディタで手動で編集します。

Oracle Linuxsystemdサービス・ラッパーの動作を変更するには、次のマニュアルの手順に従います。

podman generate systemdコマンドで生成したサービス・ラッパーを変更する方法の詳細は、アップストリームPodmanのドキュメントを参照してください。

サービス・ラッパーのSELinux権限の設定

システムでSELinuxをenforcingモードに設定した場合は、systemdを使用してコンテナを起動、停止および監視できるように、container_manage_cgroup権限を有効にする必要があります。

sudo setsebool -P container_manage_cgroup on