Podman/Podman Desktopで複数のコンテナを「Pod」としてまとめて管理する方法次世代コンテナエンジン「Podman」「Podman Desktop」入門(4)

次世代コンテナエンジンの一つ「Podman」と、そのデスクトップツールである「Podman Desktop」でコンテナを管理する方法を解説する本連載。今回は、PodmanやPodman Desktopで起動する複数のコンテナを「Pod」として管理する方法を解説します。

» 2025年07月15日 05時00分 公開
[鎌田啓佑サイオステクノロジー]

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

 次世代コンテナエンジンの一つ「Podman」と、そのデスクトップツールである「Podman Desktop」でコンテナを管理する方法を解説する本連載第3回は、Podman Desktopでコンテナイメージを取得し、コンテナを起動したり、停止したりする方法を解説しました。今回は、Podman/Podman Desktopで複数のコンテナを「Pod」としてまとめて管理する方法を解説します。

Podとは

 Podを簡単に説明すると、コンテナをグループ化したものです。Kubernetesを少しでも知っているならPodという名前に聞き覚えがあるでしょう。また、Dockerに慣れ親しんでいる人にとっても、Docker Composeと同じようなもの、と考えれば分かりやすいでしょう。Podは、コンテナを一つ一つ扱う場合と異なり、以下のような特徴を持っています。

  • ネットワーク名前空間を共有するため、ローカルホストとしてコンテナ間で通信できます
  • IPC(Inter-Process Communication)名前空間を共有するため、コンテナ同士でプロセス間通信が可能です
  • コンテナをグループ化するため、一括でコンテナの起動や停止ができます

Podの基本的な操作

 では早速、Podを作成してみましょう。複数のコンテナを連携させる代表例として、WordPressの環境を作成します。WordPressはコンテンツの保存先としてMySQLまたはMariaDBを利用します。そこで今回はWordPressとMariaDBの2つのコンテナを1つのPodとして構築します。

Podを作成する

 まず、複数のコンテナをまとめるための「入れもの」となるPodを用意するために、次のコマンドを実行します。

$ podman pod create -p 9000:80 wordpress-pod

 「wordpress-pod」はPodの名前となります。-pオプションで、コンテナのときと同様に公開するポートを指定しています。今回は、WordPressコンテナが80番ポートでリクエストを受け付けるため、Pod側の80番ポートをホスト側の9000番ポートとして公開しています。

 次に、WordPressのコンテンツ保存先データベースとしてMariaDBのコンテナを、先ほど「wordpress-pod」という名前で作ったPodの中に作成します。

$ podman run -dt --pod wordpress-pod -e MARIADB_DATABASE=wordpress -e MARIADB_USER=wordpress -e MARIADB_PASSWORD=wordpress -e MARIADB_RANDOM_ROOT_PASSWORD=1 docker.io/library/mariadb

 --podというオプションは、どのPodで作るのかを指定するパラメーターです。なお、-eオプションには、データベース接続のユーザー名やパスワードなど、後でWordPressがデータベース接続に必要な情報を設定しています。

 続いて、WordPressのコンテナを、先ほどと同様にPodである「wordpress-pod」内に作成します。

$ podman run -dt --pod wordpress-pod -e WORDPRESS_DB_NAME=wordpress -e WORDPRESS_DB_USER=wordpress -e WORDPRESS_DB_PASSWORD=wordpress -e WORDPRESS_DB_HOST=127.0.0.1 docker.io/library/wordpress

 -eオプションで、データベースの接続先ホストを示す変数であるWORDPRESS_DB_HOSTに、ローカルホストを示す「127.0.0.1」を設定しています。つまり、先ほどのMariaDBコンテナと、このWordPressコンテナは、同じネットワーク名前空間上で動作していることが分かります。

 WordPressコンテナの起動まで完了したら、ブラウザで「http://127.0.0.1:9000」に接続してみましょう。下のように、WordPressの初期インストール画面が表示されるはずです。

WordPressの初期インストール画面 WordPressの初期インストール画面

Podの停止と起動

 WordPressが動作するPodを作成できたら、今度はPodを停止させ、再度、起動させたりしてみましょう。Podを停止させるには、次のコマンドを実行します。

$ podman pod stop wordpress-pod

 このコマンドを実行することで、「wordpress-pod」内にあった2つのコンテナが停止します。同様に、Podを起動させるには、次のコマンドを実行します。

$ podman pod start wordpress-pod

 関連性のある複数のコンテナをPodという単位でまとめることで、起動や停止などの操作を効率的に実行できます。

Podman Desktopを使ったPodの操作

 それでは、先ほどコマンドで実施したWordPressのPod作成を、Podman Desktopで実施してみましょう。

コンテナイメージの取得

 前回記事を参考に、以下のコンテナイメージを取得しましょう。

  • docker.io/library/mariadb
  • docker.io/library/wordpress

 すると、次のような画面になります。

イメージ取得後の画面 イメージ取得後の画面

コンテナの実行

 次に、MariaDBとWordPressのコンテナを実行します。コマンドで実行する方法では、先にPodを作成していましたが、Podman Desktopでは空のPodを作成する方法はなく、既に存在するコンテナをコピーした上でまとめてPod化します。

 まずは、MariaDBコンテナを起動します。コンテナ名は「mariadb」とし、起動画面の下部にある環境変数を設定する項目で、以下のような設定を実施して起動してください。

変数名 設定値
MARIADB_DATABASE wordpress
MARIADB_USER wordpress
MARIADB_PASSWORD wordpress
MARIADB_RANDOM_ROOT_PASSWORD 1
MariaDBコンテナの設定画面 MariaDBコンテナの設定画面

 次に、WordPressコンテナを起動します。こちらも、先ほどのMariaDBのコンテナと同様に、コンテナ名を「wordpress」とし、環境変数を設定して起動してください。

変数名 設定値
WORDPRESS_DB_NAME wordpress
WORDPRESS_DB_USER wordpress
WORDPRESS_DB_PASSWORD wordpress
WORDPRESS_DB_HOST 127.0.0.1
WordPressコンテナの設定画面 WordPressコンテナの設定画面

 コンテナの起動作業が完了したら、次は2つのコンテナをグループ化してPodにまとめる作業を実施します。コンテナ一覧の画面からPod化する2つのコンテナの左にあるチェックボックスを選択してチェックマークを付け、上の「Create Pod」ボタンを選択します。

コンテナ一覧画面 コンテナ一覧画面

 Podの作成画面が表示されるので、Pod名として「wordpress-pod」と入力し、公開するポートとして9000番を選択してから、「Create Pod」ボタンを選択します。

Pod作成画面 Pod作成画面

 すると、Pod一覧画面が表示され、先ほど作成したPodが起動していることが確認できます。なお、Podの起動や停止はコンテナ画面のときと同様、該当するPodの列の右側に、起動ボタンや停止ボタンが表示されるので、そちらを選択します。

Pod一覧画面 Pod一覧画面

YAMLファイルからPodを作成する

 最後に、簡単にではありますが、YAMLファイルを使ったPodの作成方法を紹介します。Docker/Docker Desktopに慣れている人にとっては、docker-compose.ymlのようなものと考えていただくと、分かりやすいでしょう。

 早速、WordPress環境を構築するYAMLファイルを用意します。以下の内容をwordpress.ymlというファイル名で作成します。

apiVersion: v1
kind: Pod
metadata:
  name: wordpress-pod
spec:
  containers:
    - name: mariadb
      image: docker.io/library/mariadb:latest
      tty: true
      env:
        - name: MARIADB_USER
          value: wordpress
        - name: MARIADB_PASSWORD
          value: wordpress
        - name: MARIADB_RANDOM_ROOT_PASSWORD
          value: "1"
        - name: TERM
          value: xterm
        - name: MARIADB_DATABASE
          value: wordpress
    - name: wordpress
      image: docker.io/library/wordpress:latest
      tty: true
      ports:
        - containerPort: 80
          hostPort: 9000
      env:
        - name: WORDPRESS_DB_HOST
          value: 127.0.0.1
        - name: WORDPRESS_DB_NAME
          value: wordpress
        - name: TERM
          value: xterm
        - name: WORDPRESS_DB_PASSWORD
          value: wordpress
        - name: WORDPRESS_DB_USER
          value: wordpress

 次に、以下のコマンドを実行してYAMLファイルからPodを作成します。

$ podman kube play wordpress.yml

 すると、以下のようにきちんとPodがきちんと作成され、動作していることが分かります。

$ podman pod ps
POD ID        NAME           STATUS      CREATED        INFRA ID      # OF CONTAINERS
413a28908367  wordpress-pod  Running     4 minutes ago  941dd11e1407  3

 さて、Kubernetesを少しでも触ったことがある人なら、このYAMLファイルの内容に見覚えがあるでしょう。このYAMLファイルは、KubernetesにPodをデプロイする内容と同じものになっています。

 つまり、Podman/Podman DesktopでPodを扱うことは、Kubernetes環境でPodを扱う際の参考にもなるということです。Podを使えば、関連性が強い複数のコンテナ同士をまとめて取り扱えるため、コンテナの管理がとても簡単になります。

 次回は、Podman上で動かすコンテナをsystemdの管理下に置く方法を紹介します。

筆者紹介

鎌田啓佑

サイオステクノロジー所属。OSS よろず相談室でサポート対応をしているテクニカルサポートエンジニア。Ansibleに出会ってから自動化に取り憑かれ、自身の業務やプライベートであらゆるものの自動化に取り組む。プライベートではJavaでちょっとしたツールの開発を趣味にしている。

サイオス OSS よろず相談室

サイオステクノロジーエンジニアブログ

サイオステクノロジーエンジニア YouTube チャンネル


Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。