機械翻訳について

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コンテナの作成とポッドへのアタッチ

  1. mypodという名前のポッドを作成します:

    podman pod create --name mypod
  2. nginxイメージを使用してコンテナを作成し、それをmypodという名前のポッドに接続します:

    podman run --pod mypod --detach quay.io/libpod/alpine_nginx:latest
  3. oraclelinuxイメージを使用して2番目のコンテナを作成し、それをmypodという名前のポッドに接続します:

    podman run --pod mypod -it --rm oraclelinux:9-slim curl http://localhost:80

    curlコマンドは、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