次世代コンテナエンジンの一つ「Podman」と、そのデスクトップツールである「Podman Desktop」でコンテナを管理する方法を解説する本連載。今回は、PodmanやPodman Desktopで起動する複数のコンテナを「Pod」として管理する方法を解説します。
この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。
次世代コンテナエンジンの一つ「Podman」と、そのデスクトップツールである「Podman Desktop」でコンテナを管理する方法を解説する本連載。第3回は、Podman Desktopでコンテナイメージを取得し、コンテナを起動したり、停止したりする方法を解説しました。今回は、Podman/Podman Desktopで複数のコンテナを「Pod」としてまとめて管理する方法を解説します。
Podを簡単に説明すると、コンテナをグループ化したものです。Kubernetesを少しでも知っているならPodという名前に聞き覚えがあるでしょう。また、Dockerに慣れ親しんでいる人にとっても、Docker Composeと同じようなもの、と考えれば分かりやすいでしょう。Podは、コンテナを一つ一つ扱う場合と異なり、以下のような特徴を持っています。
では早速、Podを作成してみましょう。複数のコンテナを連携させる代表例として、WordPressの環境を作成します。WordPressはコンテンツの保存先としてMySQLまたはMariaDBを利用します。そこで今回はWordPressとMariaDBの2つのコンテナを1つの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が動作するPodを作成できたら、今度はPodを停止させ、再度、起動させたりしてみましょう。Podを停止させるには、次のコマンドを実行します。
$ podman pod stop wordpress-pod
このコマンドを実行することで、「wordpress-pod」内にあった2つのコンテナが停止します。同様に、Podを起動させるには、次のコマンドを実行します。
$ podman pod start wordpress-pod
関連性のある複数のコンテナをPodという単位でまとめることで、起動や停止などの操作を効率的に実行できます。
それでは、先ほどコマンドで実施したWordPressのPod作成を、Podman Desktopで実施してみましょう。
前回記事を参考に、以下のコンテナイメージを取得しましょう。
すると、次のような画面になります。
次に、MariaDBとWordPressのコンテナを実行します。コマンドで実行する方法では、先にPodを作成していましたが、Podman Desktopでは空のPodを作成する方法はなく、既に存在するコンテナをコピーした上でまとめてPod化します。
まずは、MariaDBコンテナを起動します。コンテナ名は「mariadb」とし、起動画面の下部にある環境変数を設定する項目で、以下のような設定を実施して起動してください。
変数名 | 設定値 |
---|---|
MARIADB_DATABASE | wordpress |
MARIADB_USER | wordpress |
MARIADB_PASSWORD | wordpress |
MARIADB_RANDOM_ROOT_PASSWORD | 1 |
次に、WordPressコンテナを起動します。こちらも、先ほどのMariaDBのコンテナと同様に、コンテナ名を「wordpress」とし、環境変数を設定して起動してください。
変数名 | 設定値 |
---|---|
WORDPRESS_DB_NAME | wordpress |
WORDPRESS_DB_USER | wordpress |
WORDPRESS_DB_PASSWORD | wordpress |
WORDPRESS_DB_HOST | 127.0.0.1 |
コンテナの起動作業が完了したら、次は2つのコンテナをグループ化してPodにまとめる作業を実施します。コンテナ一覧の画面からPod化する2つのコンテナの左にあるチェックボックスを選択してチェックマークを付け、上の「Create Pod」ボタンを選択します。
Podの作成画面が表示されるので、Pod名として「wordpress-pod」と入力し、公開するポートとして9000番を選択してから、「Create Pod」ボタンを選択します。
すると、Pod一覧画面が表示され、先ほど作成したPodが起動していることが確認できます。なお、Podの起動や停止はコンテナ画面のときと同様、該当する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でちょっとしたツールの開発を趣味にしている。
Copyright © ITmedia, Inc. All Rights Reserved.