Skip to content

Chapter 4 Pod

  • レベル:初級
  • 見込み時間:15分
  • コンテンツ

事前作業

一般ユーザー(ユーザー名 rhel)にスイッチする
# su - rhel

(コピペ用)

su - rhel

出力結果
# su - rhel
$

4.2 Podの作成

(このコンテンツは本書 4.2に該当します)

事前作業(Chapter 4開始時点の状況に合わせて、下記パターン1 or 2のどちらかの作業を実行してください)

パターン1

Chapter 3の3.1.2でhtmlディレクトリの所有権を変更している場合はhtmlディレクトリとindex.htmlを再作成してください。

(コピペ用)

podman unshare rm -rf html
mkdir html
cat > html/index.html << _EOF
<html>
 <head>
 </head>
 <body>
  <h1>Goodbye World</h1>
 </body>
</html>
_EOF

パターン2

htmlディレクトリが無い場合は新規でhtmlディレクトリとindex.htmlを作成してください

(コピペ用)

mkdir html
cat > html/index.html << _EOF
<html>
 <head>
 </head>
 <body>
  <h1>Goodbye World</h1>
 </body>
</html>
_EOF

PodmanではPodという機能で複数のコンテナを1つのグループとして実行できます。podman pod createコマンドを使用してPodを作成できます。

--name mypodオプションを使用してmypodという名前のPodを作成します。

--volumeオプションは-vでも同様です。Chapter 3を参照ください。

$ podman pod create -p 8080:8080 --name mypod --volume ./html:/var/www/html:z

(コピペ用)

podman pod create -p 8080:8080 --name mypod --volume ./html:/var/www/html:z

出力結果
$ podman pod create -p 8080:8080 --name mypod --volume ./html:/var/www/html:z
b0d68450b3b7ae2d70d8a19de47142af40d0dbd94fecff97b7a1fc3996bbf07e

(オプション問題)

Podをリスト表示する

podman pod psコマンドを使用してPodをリスト表示します

$ podman pod ps

(コピペ用)

podman pod ps

出力結果
$ podman pod ps
POD ID        NAME        STATUS      CREATED         INFRA ID      # OF CONTAINERS
82c5059cc238  mypod       Created     44 seconds ago  7e5b68038395  1

podman pod psのエイリアス

podman pod psの代わりにpodman pod lspodman pod list使用できます

4.3 Podへのコンテナ追加

(このコンテンツは本書 4.3に該当します)

podman createコマンドを使用して、先ほど作成したPod内にコンテナを作成します。

--pod mypodオプションでmypodPod内にコンテナを作成します

$ podman create --pod mypod --name myapp quay.io/rhatdan/myimage

(コピペ用)

podman create --pod mypod --name myapp quay.io/rhatdan/myimage

出力結果
$ podman create --pod mypod --name myapp quay.io/rhatdan/myimage
Trying to pull quay.io/rhatdan/myimage:latest...
Getting image source signatures
Copying blob e3460238f8a1 done  
Copying blob c7765172d3ce done  
Copying blob dfd8c625d022 done  
Copying blob 2b782a9ad894 done  
Copying blob a1eadb69adf1 done  
Copying config 2c7e43d880 done  
Writing manifest to image destination
Storing signatures
a0e413d3270111dedca7bdffacc00da362cb01c2ce3d7052efd28356f29a1b2d

作成したPodにコンテナを追加することができます。まず、シェルスクリプトを実行するサイドカーコンテナの用意をします。

time.shという名前のシェルスクリプトを作成します

$ cat > html/time.sh << _EOL
#!/bin/sh
data() {
    echo "<html><head></head><body><h1>"; date;echo "Hello World</h1></body></html>"
    sleep 1
}
while true; do
    data > index.html
done
_EOL

(コピペ用)

cat > html/time.sh << _EOL
#!/bin/sh
data() {
    echo "<html><head></head><body><h1>"; date;echo "Hello World</h1></body></html>"
    sleep 1
}
while true; do
    data > index.html
done
_EOL

出力結果はありません

作成したtime.shスクリプトに実行権限を付与します

$ chmod +x html/time.sh

(コピペ用)

chmod +x html/time.sh

出力結果はありません

time.shを実行するサイドカーコンテナをmypodに追加します

$ podman create --pod mypod --name time --workdir /var/www/html ubi8 ./time.sh

(コピペ用)

podman create --pod mypod --name time --workdir /var/www/html ubi8 ./time.sh

出力結果
$ podman create --pod mypod --name time --workdir /var/www/html ubi8 ./time.sh
Resolved "ubi8" as an alias (/etc/containers/registries.conf.d/001-rhel-shortnames.conf)
Trying to pull registry.access.redhat.com/ubi8:latest...
Getting image source signatures
Checking if image destination supports signatures
Copying blob 70de3d8fc2c6 done  
Copying config 62ac1f7ef5 done  
Writing manifest to image destination
Storing signatures
85e0053dd73cde15758fd1bbe6abe59cd1f8e9ebce318459039d8921db7b2ab5

4.4 Podの起動

(このコンテンツは本書 4.4に該当します)

ここまでに、Podの作成、実行の中心となるプライマリコンテナの追加、サイドカーコンテナの追加を行いました。この時点ではPodに追加したコンテナは停止しています。podman pod startコマンドを使ってPodを起動します。

mypodPodを起動します

$ podman pod start mypod

(コピペ用)

podman pod start mypod

出力結果
$ podman pod start mypod
b0d68450b3b7ae2d70d8a19de47142af40d0dbd94fecff97b7a1fc3996bbf07e

コンテナプロセスを一覧表示します

$ podman ps

(コピペ用)

podman ps

出力結果
$ podman ps
CONTAINER ID  IMAGE                                    COMMAND               CREATED             STATUS         PORTS                   NAMES
b0daeb8cf4ae  localhost/podman-pause:4.4.1-1682527828                        About a minute ago  Up 23 seconds  0.0.0.0:8080->8080/tcp  b0d68450b3b7-infra
a0e413d32701  quay.io/rhatdan/myimage:latest           /usr/bin/run-http...  About a minute ago  Up 23 seconds  0.0.0.0:8080->8080/tcp  myapp
85e0053dd73c  registry.access.redhat.com/ubi8:latest   ./time.sh             35 seconds ago      Up 23 seconds  0.0.0.0:8080->8080/tcp  time

infraコンテナについて

podman psの出力にlocalhost/podman-pauseコンテナがあります。これはinfraコンテナと呼ばれ、Podの作成時にPodmanがローカルで自動で作成し実行したものです。ローカルでコンテナを作成する処理が組み込まれているためコンテナイメージをpullする必要はありません。

(オプション問題)

podman pod psコマンドでPodをリスト表示し、ステータスを確認します。

$ podman pod ps
POD ID        NAME        STATUS      CREATED         INFRA ID      # OF CONTAINERS
82c5059cc238  mypod       Running     19 minutes ago  7e5b68038395  3

4.5 Podの停止

(このコンテンツは本書 4.5に該当します)

podman pod stopコマンドを使用してPodを停止します。

mypodPodを停止します

$ podman pod stop mypod

(コピペ用)

podman pod stop mypod

出力結果
$ podman pod stop mypod
WARN[0010] StopSignal SIGTERM failed to stop container time in 10 seconds, resorting to SIGKILL 
b0d68450b3b7ae2d70d8a19de47142af40d0dbd94fecff97b7a1fc3996bbf07e

-tオプションでタイムアウト値を指定しなかったため、デフォルトの10秒の待機後に実行中のコンテナプロセスが停止します

コンテナプロセスを表示します

$ podman ps

(コピペ用)

podman ps

出力結果
$ podman ps
CONTAINER ID  IMAGE       COMMAND     CREATED     STATUS      PORTS       NAMES

4.6 Podの表示

(このコンテンツは本書 4.6に該当します)

Podを一覧表示します

$ podman pod list

(コピペ用)

podman pod list

出力結果
$ podman pod list
POD ID        NAME        STATUS      CREATED        INFRA ID      # OF CONTAINERS
b0d68450b3b7  mypod       Exited      4 minutes ago  b0daeb8cf4ae  3

4.7 Podの削除

(このコンテンツは本書 4.7に該当します)

podman ps --allコマンドに--formatオプションを付けて表示をフィルタリングします。ここではIDImagePodの3つの要素でフィルタします。

$ podman ps --all --format "{{.ID}} {{.Image}} {{.Pod}}"

(コピペ用)

podman ps --all --format "{{.ID}} {{.Image}} {{.Pod}}"

出力結果
$ podman ps --all --format "{{.ID}} {{.Image}} {{.Pod}}"
0be17615d860 localhost/podman-pause:4.4.1-1682527828 77b6932c9c44
38e5aa95c038 quay.io/rhatdan/myimage:latest 77b6932c9c44
e2e5f14febab registry.access.redhat.com/ubi8:latest 77b6932c9c44

mypodPodを削除します。

$ podman pod rm mypod

(コピペ用)

podman pod rm mypod

出力結果
$ podman pod rm mypod
77b6932c9c44581ecd58130cb6a82bc112fee66eac0e01ece5f2908409f02d2a

Podを一覧表示します

$ podman pod ls

(コピペ用)

podman pod ls

出力結果
$ podman pod ls
POD ID      NAME        STATUS      CREATED     INFRA ID    # OF CONTAINERS

podman ps -aコマンドに--formatオプションを付けて表示をフィルタリングします。ここではIDImageの2つの要素でフィルタします。

$ podman ps -a --format "{{.ID}} {{.Image}}"

(コピペ用)

podman ps -a --format "{{.ID}} {{.Image}}"

出力結果
$ podman ps -a --format "{{.ID}} {{.Image}}"
$