5 Podmanポッド
Podmanは、コンテナ・ランタイムのコンテキスト内で「ポッド」の概念を導入しています。 この概念はKubernetesから借用されており、Dockerでは使用できません。
ポッドは、ローカル・ネットワーキングなどのリソースを共有して相互に通信し、対話できるように、単一のネームスペースにグループ化されるコンテナの集合です。 ポッドを使用すると、完全なアプリケーションをデプロイするために必要な一連のサービスをグループ化できます。
ポッドは、多くの点で、各コンテナ内のサービスが実行される仮想ホストと同様の方法で動作します。 そのため、各コンテナは同じホストで実行されているかのように、それぞれのコンテナのサービスに相互にアクセスできます。 この方法でコンテナを実行すると、ネットワークに関連する複雑さが大幅に解消され、アプリケーション自体のサービスのみが使用するためのポートの外部公開を簡単に制限できるようになります。
Podmanポッドは、Kubernetes環境で作成およびデプロイできる最小のコンピュート・ユニットです。 これらのポッドには、Podmanがポッド内のすべてのコンテナに接続できるように、infraコンテナが含まれています。 Podmanは、ポッド自体の操作に干渉することなく、コンテナの停止など、ポッド内のコンテナを管理できます。
ポッド内でコンテナを実行することで、アトミック操作を使用してアプリケーション環境全体を設定および破棄する方が簡単です。 ポッドを使用することで、サービス・ラッパーを作成して、起動時にアプリケーションのコンテナのセットを自動的に開始できます。 詳細は、Podmanサービス・ラッパーを参照してください。
ポッドの作成
Podmanポッドを作成するには、podman pod createコマンドまたはpodman runコマンドを--podフラグとともに使用します。
podman pod createコマンドを使用してポッドを作成します。 --nameフラグを含めて、ポッドに判読可能な識別子を指定します。 ポッド内のサービスが相互に接続する際に特定のホスト名を使用する必要がある場合は、--hostnameオプションを設定することもできます。
ポッドは、コンテナが初めて実行されたときに自動的に作成できます。 これを行うには、podman runコマンドを--podオプションとともに使用し、ポッドの名前の前にnew:オプションを追加します。
--podフラグを指定してpodman runコマンドを使用して、コンテナをポッドに接続します。
podman pod createコマンドの詳細は、podman-pod-create(1)マニュアル・ページを参照してください。
例5-1名前を使用したポッドの作成
mypodという名前のポッドを作成します:
podman pod create --name mypod
例5-2コンテナおよび関連するポッドの自動作成
NGINX Webサーバーを実行するコンテナを含むmypodという名前のポッドを作成します:
podman run --pod new:mypod --detach quay.io/libpod/alpine_nginx:latest
例5-3コンテナの作成とポッドへのアタッチ
-
mypodという名前のポッドを作成します:podman pod create --name mypod -
nginxイメージを使用してコンテナを作成し、それをmypodという名前のポッドに接続します:podman run --pod mypod --detach quay.io/libpod/alpine_nginx:latest -
oraclelinuxイメージを使用して2番目のコンテナを作成し、それをmypodという名前のポッドに接続します:podman run --pod mypod -it --rm oraclelinux:9-slim curl http://localhost:80curlコマンドは、2番目のコンテナで実行され、ポート80のlocalhostで実行されている(最初のコンテナで実行されている)NGINX Webサービスにアクセスします。curlコマンドの出力には、NGINXサーバーのHTML出力が表示され、次のようになります。podman rulezコンテナはどちらも(rootではなく)標準ユーザーとして実行されていますが、ポート・マッピングを必要とせずにポッド内の予約済ポートを使用できます。 さらに、どちらのコンテナも
localhostネットワーク・ネームスペースを使用でき、同じホストで実行されているかのように相互にアクセスできます。 この例では、ポッドを使用することで、異なるコンテナ内で実行中のサービスが複雑なネットワークを必要とせずに相互にアクセスし連携することが容易になる方法を示しています。
ポッドのリストとモニタリング
Podmanには、ポッドをリストおよびモニターするための様々なコマンドが含まれています。 この例では、いくつかのオプションを示します。
例5-4ポッドのリスト
podman pod psまたはpodman pod listコマンドを使用して、使用可能なすべてのポッドおよび実行中のポッドをリストします。 たとえば:
podman pod ps
または
podman pod list
どちらのコマンドも、次のような出力が表示されます。
POD ID NAME STATUS CREATED INFRA ID # OF CONTAINERS
d2789902abe4 oraclepod Created 9 seconds ago 4e203a8a2f6d 1
d8e8626a058c mypod Running 21 seconds ago c31228fb0310 2
例5-5ポッド内のコンテナのリスト
podman psコマンドを使用して、システム上のすべてのコンテナを確認します。 --allフラグを使用してコンテナを表示し、--podフラグを使用してそれらが関連付けられているポッドを表示します。
podman ps --all --pod
これらのフラグは、次を使用して結合することもできます。
podman ps -ap
出力は次のようになります。
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES POD ID PODNAME
7fefb402a3b8 localhost/podman-pause:5.4.0-1750143108 45 seconds ago Up 33 seconds 9e746bbc3f6b-infra 9e746bbc3f6b mypod
22061372871d container-registry.oracle.com/olcne/nginx:1.20.1 nginx -g daemon o... 32 seconds ago Up 33 seconds 80/tcp, 443/tcp awesome_driscoll 9e746bbc3f6b mypod
この例では、2つのコンテナのそれぞれについてmypodポッドがPODNAMEの下にリストされるため、これらの2つのコンテナは同じポッドで実行されています。
例5-6名前付きポッド内のコンテナのリスト
mypodという名前のポッドにコンテナを表示します:
podman pod ps --ctr-names --filter name=mypod
出力には、ポッド内のコンテナがリストされ、次のように表示されます。
POD ID NAME STATUS CREATED INFRA ID NAMES
8f7088f859da mypod Running 13 minutes ago d2bb22029ec9 8f7088f859da-infra,nginxcontainer
例5-7ポッドの検査
ポッドに関する構成情報を表示するには、podman pod inspectコマンドを使用します。 たとえば:
podman pod inspect mypod
JSON出力は次のようになります。
[
{
"Id": "d8e8626a058c4bc538f95542728e6bdc8c44fb34b960ad9b81b06e4a804c4f3e",
"Name": "mypod",
"Created": "2025-07-11T03:26:07.8625531Z",
"CreateCommand": [
"podman",
"run",
"-d",
"--pod",
"new:mypod",
"container-registry.oracle.com/olcne/nginx:1.20.1"
],
"ExitPolicy": "continue",
"State": "Running",
"Hostname": "",
"CreateCgroup": true,
"CgroupParent": "user.slice",
"CgroupPath": "user.slice/user-1000.slice/user@1000.service/user.slice/user-libpod_pod_d8e8626a058c4bc538f95542728e6bdc8c44fb34b960ad9b81b06e4a804c4f3e.slice",
"CreateInfra": true,
"InfraContainerID": "c31228fb03102c049f195f07da6415eee14267b55135ce480ef5a8f4d6660bbb",
"InfraConfig": {
"PortBindings": {},
"HostNetwork": false,
"StaticIP": "",
"StaticMAC": "",
"NoManageResolvConf": false,
"DNSServer": null,
"DNSSearch": null,
"DNSOption": null,
"NoManageHostname": false,
"NoManageHosts": false,
"HostAdd": null,
"HostsFile": "",
"Networks": null,
"NetworkOptions": null,
"pid_ns": "private",
"userns": "host",
"uts_ns": "private"
},
"SharedNamespaces": [
"ipc",
"net",
"uts"
],
"NumContainers": 2,
"Containers": [
{
"Id": "c31228fb03102c049f195f07da6415eee14267b55135ce480ef5a8f4d6660bbb",
"Name": "d8e8626a058c-infra",
"State": "running"
},
{
"Id": "971bc0b8146584f65f0cb71d93eade808540d9a956d2a2d6c6445d33adf0abea",
"Name": "eager_pascal",
"State": "running"
}
],
"LockNumber": 0
}
]
例5-8ポッドで実行されているプロセスのリスト
ポッドで実行されているプロセスをリストするには、podman pod topコマンドを使用します。 たとえば:
podman pod top mypod
出力は次のようになります。
USER PID PPID %CPU ELAPSED TTY TIME COMMAND
0 1 0 0.000 15m43.454064014s ? 0s /catatonit -P
root 1 0 0.000 15m42.454997215s ? 0s nginx: master process nginx -g daemon off;
nginx 2 1 0.000 15m42.455054885s ? 0s nginx: worker process
nginx 3 1 0.000 15m42.455123415s ? 0s nginx: worker process
例5-9ポッドのハードウェア・リソース使用率の表示
ポッド内のコンテナのリソース使用率を表示するには、podman pod statsコマンドを使用します。
podman pod stats -a --no-stream
出力は次のようになります。
POD CID NAME CPU % MEM USAGE/ LIMIT MEM % NET IO BLOCK IO PIDS
d8e8626a058c c31228fb0310 d8e8626a058c-infra 0.00% 53.25kB / 16.29GB 0.00% 0B / 1.076kB -- / -- 1
d8e8626a058c 971bc0b81465 eager_pascal 0.00% 2.642MB / 16.29GB 0.02% 0B / 1.076kB -- / -- 3
d2789902abe4 4e203a8a2f6d d2789902abe4-infra 0.00% -- / -- 0.00% -- / -- -- / -- --
リアルタイムのリソース使用状況を表示するには、--no-streamフラグを含めないでください。
podman pod stats -a
リアルタイム・リソース・レポートを終了するには、Ctrl+Cを使用します。
ポッドの一時停止と再開
podman pod pauseおよびpodman pod unpauseコマンドを使用して、Podmanポッドを一時停止および再開します。
ワークロードを破棄せずにポッドの操作を一時的に停止するには、podman pod pauseコマンドを使用して、ポッド名またはIDを指定します。
前のコマンドを実行すると、ポッド内の実行中のすべてのプロセスが現在の状態で凍結されます。 ポッドが停止された場所を再開する準備ができたら、podman pod unpauseコマンドにポッド名またはIDを指定して、その時点から前の操作を続行するようにポッドに指示できます。
podman pod pauseコマンドの詳細は、podman-pod-pause(1)マニュアル・ページを参照してください。 podman pod unpauseコマンドの詳細は、podman-pod-unpause(1)マニュアル・ページを参照してください。
例5-10ポッドの一時停止
podman pod pause mypod
例5-11ポッドの一時停止解除
podman pod unpause mypod
ポッドの停止と起動
podman pod stopおよびpodman pod startコマンドを使用して、Podmanポッドを停止および起動します。
ポッド内のコンテナの起動および停止は、ポッド全体に影響する可能性があります。 ただし、podman pod startおよびpodman pod stopコマンドを使用して、ポッド内のすべてのコンテナを同時に起動および停止できます。
ポッドを停止するには、podman pod stopコマンドを名前またはポッドIDとともに使用します。 メンテナンスのためにサーバーを一時的に停止する必要がある場合は、--allフラグをpodman pod stopコマンドに追加することで、実行中のすべてのポッドを停止できます。
ポッドを開始するには、podman pod startコマンドを名前またはポッドIDとともに使用します。
podman pod stopコマンドの詳細は、podman-pod-stop(1)マニュアル・ページを参照してください。 podman pod startコマンドの詳細は、podman-pod-start(1)マニュアル・ページを参照してください。
例5-12ポッドの停止
podman pod stop mypod
例5-13実行中のすべてのポッドの停止
podman pod stop --all
例5-14ポッドの開始
podman pod start mypod
ポッドの削除
podman pod rmコマンドを使用して、Podmanポッドを削除します。
ポッドを削除するには、ポッド名またはIDを指定してpodman pod rmコマンドを使用します。 --allフラグをpodman pod rmコマンドに追加することで、実行中のすべてのポッドを削除できます。
ポッドを削除する前に、停止する必要があります。 podman pod stopコマンドを使用して、ポッドを停止します。
ポッドは、infraコンテナを除いて、ポッド内のすべてのコンテナが削除された場合にのみ削除できます。 デフォルトでは、各ポッドにインフラ・コンテナが作成されるため、ポッドには通常、ポッド自体を削除することによってのみ削除できるコンテナが少なくとも1つ含まれます。
例5-15ポッドの削除
podman pod rm mypod
例5-16実行中のすべてのポッドの削除
podman pod rm --all