7
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

はじめに

この記事はDocker経験者がPodmanを使ってみる記事です。主な内容としては実践したときのメモを中心に書きます。(忘れやすいことなど)誤りなどがあれば書き直していく予定です。

なお、Podmanの始め方については以下の記事を参考にしてください。

Podmanを始めたい

Podってなんですか?

Podとは簡単に説明するとコンテナのグループです。コンテナが集まっている単位とも言えるでしょう。Kubernetesを使ったことがある人であれば、Kubernetes Podを思い浮かべていただけたらとピンとくるかと思います。Red Hat公式では以下のように説明されています。

Pod はそれぞれ、1 つのインフラコンテナと任意の数の通常のコンテナで構成されます。インフラコンテナは、Pod の実行を継続し、コンテナをホストから分離するユーザー名前空間を維持します。他のコンテナにはそれぞれ、プロセスを追跡し、停止したコンテナ (一部のリソースがまだ使用中であるために環境から取り除くことができない、機能していないコンテナ) を監視するためのモニターがあります。

引用元:what is podman

とはいえ、Docker経験者だとPodを扱ったことがないのでピンとこないですよね?ということで実際に触ってみましょう。

セットアップ

まずはVMを作成します。(通信回線によっては時間がかかるのでしばらく待ちましょう。)

podman machine init

VMが作成できましたら起動します。以下のコマンドを実行します。

podman machine start

これで準備完了です。

空のPodを作成する

今回はRed Hatさんのサイトを参考にPodmanでPodを作成してみます。

参考:第10章 Pod の使用

Podという単位でコンテナを管理したいのでPodを作成します。

podman pod create --name mypod

実行結果

c6fe279bb8a44ad608f3ae19a4739e3ea0403d6df5528859ad79b5d64f20551c

podman psのときと同じようにPodにもステータスを確認するコマンドがあります。以下のコマンドを実行します。

podman pod ps

実行結果

POD ID        NAME        STATUS      CREATED         INFRA ID      # OF CONTAINERS
c6fe279bb8a4  mypod       Created     31 seconds ago  09ea3039b4b6  1

podman pod createを実行したときのハッシュ値とPOD IDが部分的に一致しているのがわかります。正常にCreateできています。

INFRA ID# OFなど見慣れないものがありますが、ここではいったんそういうものだと理解して次にいきましょう。

なお、この段階でPodの中にはすでにコンテナがひとつ起動しています。

Pod内でコンテナを起動する

公式サイトの手順通り、myubiというコンテナをPod内で実行します。

podman run -dt --name myubi --pod mypod registry.access.redhat.com/ubi9/ubi /bin/bash

Podの中身を確認します。

podman ps -a --pod

実行結果

CONTAINER ID  IMAGE                                       COMMAND     CREATED         STATUS        PORTS       NAMES               POD ID        PODNAME
2a005f3e784a  localhost/podman-pause:5.1.1-1717459200                 24 seconds ago  Up 3 seconds              c78744cc6190-infra  c78744cc6190  mypod
2c1884686564  registry.access.redhat.com/ubi9/ubi:latest  /bin/bash   2 seconds ago   Up 3 seconds              myubi               c78744cc6190  mypod

POD IDとなっているc78744cc6190を見ると2つのコンテナが同じPodに所属していることがわかります。

Podの状態を確認する

コンテナを複数起動したら、コンテナの状態を知りたくなりますよね?
ということでCPUの状態などを調査できるコマンドを実行します。

podman pod top mypod

もしくは以下のコマンドで確認できます。

podman pod stats -a --no-stream

Podの情報を表示する

Dockerを使ったことがある人ならDockerのコンテナの詳細情報を取得したことがあると思います。
Podにも詳細情報を取得するコマンドがあります。以下のコマンドを実行します。

podman pod inspect mypod

実行結果

[
     {
          "Id": "c78744cc619057076aade40948908ffe112a2585fc026b951951707a4ea25121",
          "Name": "mypod",
          "Created": "2024-06-17T20:10:37.330296261+09:00",
          "CreateCommand": [
               "podman",
               "pod",
               "create",
               "--name",
               "mypod"
          ],
          "ExitPolicy": "continue",
          "State": "Running",
          "Hostname": "",
          "CreateCgroup": true,
          "CgroupParent": "user.slice",
          "CgroupPath": "user.slice/user-480217440.slice/user@480217440.service/user.slice/user-libpod_pod_c78744cc619057076aade40948908ffe112a2585fc026b951951707a4ea25121.slice",
          "CreateInfra": true,
          "InfraContainerID": "2a005f3e784abf2cb711439fb2f920869d8b10dbe688ebc75c684362d466b276",
          "InfraConfig": {
               "PortBindings": {},
               "HostNetwork": false,
               "StaticIP": "",
               "StaticMAC": "",
               "NoManageResolvConf": false,
               "DNSServer": null,
               "DNSSearch": null,
               "DNSOption": null,
               "NoManageHosts": false,
               "HostAdd": null,
               "Networks": [
                    "podman"
               ],
               "NetworkOptions": null,
               "pid_ns": "private",
               "userns": "host",
               "uts_ns": "private"
          },
          "SharedNamespaces": [
               "ipc",
               "net",
               "uts"
          ],
          "NumContainers": 2,
          "Containers": [
               {
                    "Id": "2a005f3e784abf2cb711439fb2f920869d8b10dbe688ebc75c684362d466b276",
                    "Name": "c78744cc6190-infra",
                    "State": "running"
               },
               {
                    "Id": "2c188468656437ed302fe8bb8b0ac16efcfd248a02cab9aeb3a1d770a4142e43",
                    "Name": "myubi",
                    "State": "running"
               }
          ],
          "LockNumber": 0
     }
]

CreateCommandという項目を見ると起動時のコマンドが閲覧できます。また、Stateを参照するとRunningとなっているため、Podが実行されているとわかります。

片付け

おわりにPodを停止して削除します。まずはPodを停止するために以下のコマンドを実行します。

podman pod stop mypod

実行結果

c78744cc619057076aade40948908ffe112a2585fc026b951951707a4ea25121

上記の値はpodman pod inspect mypodIdと一致します。

[
    {
       "Id":"c78744cc619057076aade40948908ffe112a2585fc026b951951707a4ea25121"
    }
]

次にPodを削除します。

podman pod rm mypod

実行結果

c78744cc619057076aade40948908ffe112a2585fc026b951951707a4ea25121

rmした際にもstopと同じ時の値が表示されます。

最後にPOD IDCONTAINER IDを確認しておわります。

POD IDを確認します。

podman pod ps

CONTAINER IDを確認します。

podman ps -a --pod

まとめ

Podmanを使うことでPodを管理できました。まだ慣れていないところもあるため、今回は公式とほぼ同じ手順で実行しました。うまく使いこなせるようになるとKubernetes、とくにPodの使い方を学習できるのでKubernetesをやるまえの準備になると個人的には思いました。

公式チュートリアルの第11章にはコンテナ間通信についても書いてあってとても勉強になります。

またの機会に取り組みたいです。

おわり

7
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?