9 Podmanのクワッドレット
Podman Quadletsを作成して、コンテナ、ポッドおよびその他のPodmanオブジェクトのsystemdサービスを簡単に生成および管理します。
podman generate systemdコマンドを使用してPodmanサービス・ラッパーを生成し、すべてのsystemdユニット・ファイルを個別に保持するかわりに、単一のPodman Quadletを維持し、podman-systemdデーモンを使用して、必要なときにいつでもそれらのsystemdユニット・ファイルを再生成できます。
Quadletを使用するもう1つの実用的な利点は、新しいバージョンのPodmanがリリースされたときに、影響を受けるサービスを再初期化することで、テンプレート化されたsystemdユニット・ファイルに対する修正および拡張をロールアウトできることです。
クワッドレットは、適切なファイル拡張子(.container、.volume、.network、.build、.podまたは.kube)を持つユニット・ファイルを使用して管理されます。 また、Podmanセクション([Container]など)も含める必要があります。 たとえば、コンテナのQuadletには次のものがあります。
[Unit]
Description=your-description
After=local-fs.target
[Container]
Image=container_image
Exec=your-command-here
[Install]
# Start by default on boot
WantedBy=multi-user.target default.target四角形の作成
systemdユニット・ファイル(rootユーザー用または標準権限を持つユーザー用)を使用して、コンテナ、ポッド、ボリュームおよびその他のPodmanオブジェクトを実行するPodman Quadletsを作成します。
システム管理者は、root権限で実行されるQuadletsを作成できます。 Quadletファイルは、ファイル拡張子.container、.volume、.network、.build、.podおよび.kubeを使用します。 Quadletファイルを/usr/share/containers/systemd/または/etc/containers/systemd/に保存します。
ノート:
Oracle Linux 8ホストでは、Quadletsはroot権限でのみ実行できます。 詳細は、「権限のないユーザーに対してクワッドレットが失敗する」を参照してください。
Quadletファイル(.container、.volume、.network、.build、.podおよび.kubeのファイル拡張子を持つ)は、Quadletの権限レベルに応じて次の場所に作成できます。
-
システム管理者は、次の場所でroot権限で実行されるQuadletを作成できます。
/run/containers/systemd/(テストに使用される一時クアドレットの場所)/etc/containers/systemd/(システム管理者定義のクワッドレット)/usr/share/containers/systemd/(配分定義クワッドレット) -
システム管理者は、次の場所でシステムに接続したときに実行されるルートレス・クワッドレットを作成できます。
/etc/containers/systemd/users/ -
システム管理者は、特定のユーザーIDを持つユーザーが次の場所にあるシステムに接続したときに実行されるルートレス・クワッドレットを作成できます。
/etc/containers/systemd/users/$USERID -
ユーザーは、次の場所でクワッドレットを作成できます。
$HOME/.config/containers/systemd/
Quadletファイルに含めることができるすべてのオプションのリストは、アップストリームPodmanのドキュメントまたはpodman-systemd.unit(5)マニュアル・ページにあります。
Quadletファイルは、systemdユニット・ファイルを生成するために使用されます(拡張子は.service)。 Podmanは、Quadletファイルごとに単位ファイルを生成します。 ユニット・ファイルは、systemctlコマンドを使用して、他のsystemdサービスと同様に管理できます。 各Quadletファイルには、Podmanによって処理されるPodmanオブジェクト([Container]など)用のカスタム・セクションがあり、他のすべてのセクションは標準のsystemdオプションであり、変更せずに渡されます。 これは、ファイルへの削除を含め、Quadletファイルで標準のsystemd構成を使用できることを意味します。
ヒント:
Quadletがsystemdサービスを開始すると、含まれるコンテナがすべて起動されます。 コンテナが最初に起動されると、Podmanによってコンテナ・イメージがプルされます。 タイムアウトを回避するために、Quadletによって作成されたsystemdサービスを開始する前に、コンテナ・イメージをプルすると役立つ場合があります。 または、Quadletファイルの[Service]セクションのTimeoutStartSecオプションを使用して、サービス起動タイムアウトを増やすことができます。
クワッドレットにはcgroup v2が必要です。 システムでこれが提供されているかどうかを確認するには、次を使用します。
podman info --format {{.Host.CgroupsVersion}}
ノート:
Oracle Linux 8ホストでcgroups v2を有効にする方法を学習するには、Oracle LinuxでのRun Control Group Version 2を参照してください。
例9-1コンテナのクワッドレットの作成
-
.containerファイル拡張子を持つユニット・ファイルを作成します。 必要なユーザー・アクセス・レベルの適切な場所に保存します。 たとえば:[Unit] Description=My First Quadlet [Container] Image=container-registry.oracle.com/os/oraclelinux:9-slim AutoUpdate=registry Exec=sleep 60 [Service] Restart=always TimeoutStartSec=900 [Install] WantedBy=multi-user.target default.target -
systemdサービスをリロードします。 すべてのsystemdサービスをリロードするには、次を使用します。sudo systemctl daemon-reloadOracle Linux 9またはOracle Linux 10ホストで標準ユーザーの
systemdサービスをリロードするには、次を使用します:systemctl --user daemon-reload -
ユニット・ファイルが作成されていることを確認します。 作成されたユニット・ファイルを調べるには、
quadletコマンドで-dryrunオプションを使用できます:/usr/libexec/podman/quadlet -dryrunroot権限なしで実行されるQuadletコンテナの
-userオプションを追加します。 たとえば:/usr/libexec/podman/quadlet -dryrun -user -
systemdサービスを起動します。systemctlコマンドを使用して、他のsystemdサービスと同じ方法でQuadletを管理します。 たとえば、myquadletというQuadletコンテナを起動するには、次を使用します。sudo systemctl start myquadlet.serviceroot権限のないサービスには、
--userオプションを含めます。 たとえば:systemctl --user start myquadlet.service -
systemdサービスが実行されていることを確認します。 サービスが実行中であることを確認するには、systemctl statusコマンドを使用します。 たとえば:sudo systemctl status myquadlet.serviceroot権限のないサービスには、
--userオプションを含めます。 たとえば:systemctl --user status myquadlet.service -
コンテナが実行されていることを確認します。
コンテナが実行されていることを確認するには、
podman psコマンドを使用します。 たとえば、root権限を持つサービスで実行されているコンテナの場合は、次を使用します。sudo podman psまたは、標準ユーザーとして実行されているコンテナの場合:
podman ps -
(オプション)ログアウト後にサービスを実行したままにします。
標準ユーザーがログアウトしたときに
systemdサービスを引き続き実行する場合は、Lingeringを有効にします。 たとえば:sudo loginctl enable-linger username -
(オプション)サービスを削除します。
この例を試行した後にクリーン・アップするには、次を使用してサービスおよびコンテナを削除します。
systemctl stop myquadlet.serviceまたは、標準ユーザーの場合:
systemctl --user stop myquadlet.servicesystemdサービスは停止され、コンテナも停止します。
Podmanシェルを使用したクアドレットの作成
Oracle Linux 9およびOracle Linux 10ホストでは、Podmanログイン・シェルを使用して、コンテナ内のシェル・コマンドを実行できます。 この機能により、コンテナ内での作業時に、確立された境界内にユーザーが保持されるようにする利点が得られます。 ユーザーは、/bin/bashなどの通常のシェルのかわりに/usr/bin/podmanshシェルを使用するように構成されます。 このコマンドは、podmanshというルートレス・コンテナでユーザーのセッションを開始します。 このコンテナは、ユーザーがセッションを終了するまで実行が続行され、その時点でコンテナは削除されます。
管理者は、Quadletファイルでこの機能を使用するユーザーを構成します。 これらのファイルは、ユーザーがコンテナ内にいるときのホスト・システムの可視性、アクセス制限、セキュリティ権限、リソース使用率など、ユーザーがコンテナ内で作業するときのパラメータを定義します。 詳細は、Podman Quadletsを参照してください。
Quadletファイルでユーザーに定義されたすべての設定は、ユーザーや管理者の介入を必要とせずに透過的に実行されます。
Podmanログイン・シェルとその他の定義済パラメータを組み合せてユーザーを分離することで、コンテナのセキュリティを確保します。 コンテナはセッションの最後に削除され、再度ログインすると、ユーザーに対して同じ制限された環境が再作成されます。 そのため、コンテナの操作はより簡単になります。
次に、コンテナでの作業時にPodmanログイン・シェルおよびその他の設定パラメータを使用するようにユーザーを構成する方法の例を示します。 Quadletが特定の$USERIDに適用され、Quadletファイルの名前がpodmansh.containerであるとします。
[Unit]
Description=The Podmansh container
After=local-fs.target
[Container]
Image=container-registry.oracle.com/os/oraclelinux:9-slim
ContainerName=podmansh
RemapUsers=keep-id
RunInit=yes
Exec=sleep infinity
[Install]
RequiredBy=default.target
このファイルに含めることができるすべてのオプションのリストは、アップストリームPodmanのドキュメントまたはpodman-systemd.unit(5)マニュアル・ページにあります。
ノート:
コンテナの名前(ContainerName)はpodmanshである必要があります。 これにより、/usr/bin/podmanshシェルがコンテナでpodman execを実行するように設定されます。
Quadletの$USERIDと一致するIDを持つユーザーは、次のようにログインします。
ssh user@systemname
podmanshシェルの使用の詳細は、アップストリームPodmanのドキュメントまたはpodmansh(1)マニュアル・ページを参照してください。
Quadletサービス
Quadletsによって作成されたすべてのsystemdサービスは、systemctlコマンドを使用して管理されます。
コンテナ、ポッドまたはその他のPodmanオブジェクトに対してsystemdサービスを作成した後、systemctlコマンドを使用してそれらのサービスを管理できます。したがって、サービス内のすべてのPodmanオブジェクトを管理できます。 通常のsystemdサービスの管理と同様に、systemctlを使用してサービス・ステータスを開始、再起動、停止およびチェックできます。 Quadletsを使用して作成されたサービスは一時的なサービスであるため、サービスの自動起動は少し異なります。 Oracle Linux 9またはOracle Linux 10ホストでコンテナを標準ユーザーとして実行している場合、すべてのsystemctlコマンドに--userオプションが含まれている必要があります。
ヒント:
systemdサービスの使用を試すには、Oracle LinuxでのSystemdの使用チュートリアルを参照してください。
サービスの開始
Quadletによって作成されたsystemdサービスを起動するには、systemctl startコマンドを使用します。
例9-2 Quadletサービスの起動
sudo systemctl start myquadlet.service
標準ユーザーとして、--userオプションを含めます。 たとえば:
systemctl --user start myquadlet.service
サービスの再起動
systemctl restartコマンドを使用してサービスを再起動します。 サービスの再起動は停止し、サービス内のすべてのオブジェクト(コンテナ、ポッドなど)を再作成します。
例9-3 Quadletサービスの再起動
sudo systemctl restart myquadlet.service
標準ユーザーの場合は、--userオプションを含めます。 たとえば
systemctl --user restart myquadlet.service
サービスの停止
systemctl stopコマンドを使用して、systemdサービスを停止します。 Quadletによって作成されたサービスを停止すると、サービス内のすべてのオブジェクト(コンテナ、ポッドなど)が停止します。
例9-4 Quadletサービスの停止
sudo systemctl stop myquadlet.service
サービスを標準ユーザーとして停止するには、--userオプションを含めます。 たとえば:
systemctl --user stop myquadlet.service
サービス・ステータスの確認
systemctl statusコマンドを使用して、systemdサービスの現在のステータスを確認します。
例9-5 Quadletサービスのステータスの確認
sudo systemctl status myquadlet.service
標準ユーザーとしてサービス・ステータスを表示するには、--userオプションを含めます。 たとえば:
systemctl --user status myquadlet.service
サービスの有効化
Quadletsによって作成されたサービスは一時サービスとみなされ、通常のsystemdサービスと同じ永続性を持ちません。 このため、systemctl enableコマンドを使用して、ホストOSの起動時に起動するように設定することはできません。 かわりに、Podmanジェネレータは、サービス・ユニット・ファイルの生成時にQuadletファイルの[Install]セクションにある情報を使用します。 たとえば、次を含めることで、OSの起動時にサービスを開始するように設定できます。
[Install]
WantedBy=default.target
サービスが標準ユーザーとして実行されている場合は、ユーザーがOSにサインインしたときにサービスが自動的に開始されるように、Lingeringを有効にできます。 たとえば:
sudo loginctl enable-linger user