blog

コンテナとクラウド|Podman Composeでコンテナを管理する

Dockerの欠点の1つは、rootユーザーとして実行される中央デーモンがあることで、これはセキュリティに影響します。しかしそこでPodmanの出番です。...

Nov 1, 2025 · 6 min. read
シェア

コンテナは、アプリケーションとその依存関係をパッケージ化し、どこでも実行できる素晴らしいものです。2013年のDockerに始まり、コンテナはソフトウェア開発者の生活を容易にしました。

Dockerの欠点の1つは、rootユーザーとして実行される中央デーモンがあることで、これはセキュリティに影響します。Podmanは、Linuxシステム上でOCIコンテナをrootまたはrootレスで開発、管理、実行するための です。

ポッドマンの詳細については、以下の記事をご参照ください:

Dockerを使ったことがある人なら、Docker Composeについても知っていることでしょう。Docker Composeの詳細については、ドキュメントを参照してください。

Podman Composeとは?

Podman Compose プロジェクトは、docker-compose.yamlファイルを変更することなく、Docker Composeを置き換えることを目指しています。Podman Composeはworkを使うので、"pod "の最新の定義を見ておくと良いでしょう。

は、共有のストレージ/ネットワークリソースと、コンテナの実行方法を指定した1つまたは複数のPodman Composeグループです。

Pods - Kubernetesドキュメント

Podman Composeの基本的な考え方は、docker-compose.yamlファイルで定義されたサービスを選択し、各サービス用のコンテナを作成するというものです。Docker ComposeとPodman Composeの主な違いは、Podman Composeがプロジェクト全体のコンテナを単一のPodに追加し、すべてのコンテナが同じネットワークを共有することです。例を見てわかるように、コンテナを作成するときに--add-hostフラグが使用され、Docker Composeと同じようにコンテナの名前も付けられます。

インストール

Podman Composeの完全なインストール手順はPods - Kubernetesページにあります。最新の開発版をインストールするには、以下のコマンドを使ってください:

  1. pip3 install https://.//-//..gz

プロジェクトページ必要なので、インストールされていることを確認してください。Fedora では、以下のコマンドを使って Podman をインストールします:

  1. sudo dnf install podman

例:Podman Composeを使ったWordPressウェブサイトの立ち上げ

  1. version: "3.8"
  2. services:
  3. image: wordpress
  4. restart: always
  5. volumes:
  6. - wordpress:/var/www/html
  7. ports:
  8. environment:
  9. WORDPRESS_DB_HOST: db
  10. WORDPRESS_DB_USER: magazine
  11. WORDPRESS_DB_NAME: magazine
  12. WORDPRESS_DB_PASSWORD: 1maGazine!
  13. WORDPRESS_TABLE_PREFIX: cz
  14. WORDPRESS_DEBUG: 0
  15. depends_on:
  16. networks:
  17. - wpnet
  18. image: mariadb:10.5
  19. restart: always
  20. ports:
  21. volumes:
  22. - wpdbvol:/var/lib/mysql
  23. environment:
  24. MYSQL_DATABASE: magazine
  25. MYSQL_USER: magazine
  26. MYSQL_PASSWORD: 1maGazine!
  27. MYSQL_ROOT_PASSWORD: 1maGazine!
  28. networks:
  29. - wpnet
  30. volumes:
  31. wordpress: {}
  32. wpdbvol: {}
  33. networks:
  34. wpnet: {}

Docker Composeはwpsite_web_1とwpsite_db_1という2つのコンテナを作成し、wpsite_wpnetというネットワークに接続します。

では、プロジェクトディレクトリでpodman-composeを実行するとどうなるか見てみましょう。まず、コマンドが実行されたディレクトリの名前がついたポッドが作成されます。次に、YAMLファイルで定義された名前のボリュームを探し、存在しなければ作成します。次に、YAML ファイルの services セクションにリストされているサービスごとにコンテナが作成され、ポッドに追加されます。

コンテナの名前は Docker Compose と同様です。例えば、wpsite_web_1というWebサービス用のコンテナを作成します。 Podman Composeはまた、名前を付けた各コンテナにlocalhostエイリアスを追加します。その後、Docker のようなブリッジネットワーク上ではなくても、コンテナ同士で名前解決ができるようになります。これを行うには、オプション -add-host を-add-host web:localhostします。

docker-compose.yaml には、ホストポート 8080 からコンテナポート 80 へのウェブサービスのポート転送が含まれていることに注意してください。これでブラウザから http://:80 で新しい WordPress インスタンスにアクセスできるようになります。

ポッドとコンテナの管理

実行中のコンテナを確認するには、podman psを使用します。podman psには、ポッド内のインフラストラクチャ・コンテナだけでなく、Webコンテナやデータベース・コンテナも表示されます。

  1. CONTAINER ID  IMAGE                               COMMAND               CREATED      STATUS          PORTS                                         NAMES
  2. acec7  docker.io/library/wordpress:latest  apache2-foregroun...  2 hours ago  Up 2 hours ago  0.0.0.0:8080->80/tcp, 0.0.0.0:6603->3306/tcp  wpsite_web_1
  3. caa104  docker.io/library/mariadb:10.5      mysqld                2 hours ago  Up 2 hours ago  0.0.0.0:8080->80/tcp, 0.0.0.0:6603->3306/tcp  wpsite_db_1
  4. 18e3e  k8s.gcr.io/pause:3.2

Podmanが、コマンドを実行したフォルダにちなんで、このプロジェクト用のPodを作成したことも確認できます。

  1. POD ID        NAME             STATUS    CREATED      INFRA ID      # OF CONTAINERS
  2. 8a73e  wpsite           Degraded  2 hours ago  18e3e  3

コンテナを停止するには、別のコマンド・ウィンドウで以下のコマンドを入力します:

  1. podman-compose down

これは、ポッドを停止して削除することによっても実行できます。これは基本的に、すべてのコンテナを停止して削除し、含まれているポッドを削除します。つまり、これらのコマンドでも同じことができます:

  1. podman pod stop podname
  2. podman pod rm podname

docker-compose.yaml 定義したボリュームは削除されないことに注意してください。つまり、WordPressサイトの状態は保存され、このコマンドを実行することで復元することができます。

  1. podman-compose up

要するに、PodmanファンでPodmanを使ってコンテナを使っている人なら、Podman Composeを使って開発や本番でコンテナを管理できます。

Read next