Skip to content

Chapter 2 コマンドライン

  • レベル:初級
  • 見込み時間:40分
  • コンテンツ概要
    • コンテナの操作
    • コンテナイメージの操作
    • イメージの構築

事前作業

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

(コピペ用)

su - rhel

出力結果
# su - rhel
$

2.1 コンテナの操作

コンテナの探索

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

podman runコマンドを実行し、ubi8/httpd-24 イメージをプルして実行します

$ podman run -ti --rm registry.access.redhat.com/ubi8/httpd-24 bash

(コピペ用)

podman run -ti --rm registry.access.redhat.com/ubi8/httpd-24 bash

出力結果
$ podman run -ti --rm registry.access.redhat.com/ubi8/httpd-24 bash
Trying to pull registry.access.redhat.com/ubi8/httpd-24:latest...
Getting image source signatures
Checking if image destination supports signatures
Copying blob 9ece777c9660 done  
Copying blob 70de3d8fc2c6 done  
Copying blob b653248f5bcb done  
Copying config c4127096ce done  
Writing manifest to image destination
Storing signatures
bash-4.4$ 

コンテナ内でOSの情報を参照します

bash-4.4$ grep PRETTY_NAME /etc/os-release

(コピペ用)

grep PRETTY_NAME /etc/os-release

出力結果
bash-4.4$ grep PRETTY_NAME /etc/os-release
PRETTY_NAME="Red Hat Enterprise Linux 8.8 (Ootpa)"

コンテナ内の/usr/bin のカウントを行います

bash-4.4$ ls /usr/bin/ | wc -l

(コピペ用)

ls /usr/bin/ | wc -l

出力結果
bash-4.4$ ls /usr/bin/ | wc -l
526

ホストOS上で同じように実行してみます。exitでコンテナからホストOSに戻り、コマンドを実行します。

bash-4.4$ exit
$ grep PRETTY_NAME /etc/os-release
$ ls /usr/bin/ | wc -l

(コピペ用)

exit

grep PRETTY_NAME /etc/os-release
ls /usr/bin/ | wc -l
出力結果

Info

ラボ環境以外ではホストOSの状態により出力される数字は異なります

bash-4.4$ exit
exit
$ grep PRETTY_NAME /etc/os-release
PRETTY_NAME="Red Hat Enterprise Linux 9.2 (Plow)"
$ ls /usr/bin/ | wc -l
1022

コンテナ化したアプリケーションの実行

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

デタッチモード、ポート 8080、名前 myappでコンテナを起動

$ podman run -d -p 8080:8080 --name myapp registry.access.redhat.com/ubi8/httpd-24

(コピペ用)

podman run -d -p 8080:8080 --name myapp registry.access.redhat.com/ubi8/httpd-24

出力結果

Info

出力される英数字はコンテナIDで、コンテナ毎に一意のものが出力されます

$ podman run -d -p 8080:8080 --name myapp registry.access.redhat.com/ubi8/httpd-24
e5558cfdda7d1c2c49c4d5ae59bbfcece64cb219b848ba78ae6cbba787ee8d07

myappコンテナのポートの使用状況を確認します

$ podman port myapp

(コピペ用)

podman port myapp

出力結果
$ podman port myapp
8080/tcp -> 0.0.0.0:8080

デタッチモード、ポート 8081、名前 myapp1でコンテナを起動

$ podman run -d -p 8081:8080 --name myapp1 registry.access.redhat.com/ubi8/httpd-24

(コピペ用)

podman run -d -p 8081:8080 --name myapp1 registry.access.redhat.com/ubi8/httpd-24

出力結果
$ podman run -d -p 8081:8080 --name myapp1 registry.access.redhat.com/ubi8/httpd-24
f6218c8fd423b6ed913fee1d8d612972e3fc4d0cf737a44e058f0fff0f68aeeb

(オプション問題)

コンテナのポートの使用状況を確認する

起動中の全てのコンテナのポートの使用状況を確認してみましょう

$ podman port --all 

(コピペ用)

podman port --all 

出力結果
$ podman port --all 
e5558cfdda7d    8080/tcp -> 0.0.0.0:8080
f6218c8fd423    8080/tcp -> 0.0.0.0:8081

podman portの出力内容は、コンテナIDコンテナ自身のポート番号/プロトコルホストのIPアドレス:ホスト上のポート番号、の順に表示されます。

コンテナの停止

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

myappコンテナを停止します

$ podman stop myapp

(コピペ用)

podman stop myapp

出力結果
$ podman stop myapp
myapp

myapp1コンテナを停止します

$ podman stop -t 0 myapp1

(コピペ用)

podman stop -t 0 myapp1

出力結果
$ podman stop -t 0 myapp1
myapp1

コンテナの起動

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

停止したコンテナを再度起動します。myappコンテナを起動します。

$ podman start myapp

(コピペ用)

podman start myapp

出力結果
$ podman start myapp
myapp

コンテナのリスト表示

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

起動中のコンテナを確認します

$ podman ps

(コピペ用)

podman ps

出力結果
$ podman ps
CONTAINER ID  IMAGE                                            COMMAND               CREATED        STATUS         PORTS                   NAMES
e5558cfdda7d  registry.access.redhat.com/ubi8/httpd-24:latest  /usr/bin/run-http...  9 minutes ago  Up 23 seconds  0.0.0.0:8080->8080/tcp  myapp

停止しているコンテナを含め、すべてのコンテナを表示します

$ podman ps --all

(コピペ用)

podman ps --all

出力結果
$ podman ps --all
CONTAINER ID  IMAGE                                            COMMAND               CREATED         STATUS                      PORTS                   NAMES
e5558cfdda7d  registry.access.redhat.com/ubi8/httpd-24:latest  /usr/bin/run-http...  10 minutes ago  Up About a minute           0.0.0.0:8080->8080/tcp  myapp
f6218c8fd423  registry.access.redhat.com/ubi8/httpd-24:latest  /usr/bin/run-http...  5 minutes ago   Exited (137) 2 minutes ago  0.0.0.0:8081->8080/tcp  myapp1

コンテナの調査

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

podman inspectコマンドを使い、コンテナを調査します。 myappコンテナについて調べてみます。

$ podman inspect myapp

(コピペ用)

podman inspect myapp

出力結果
$ podman inspect myapp
[
     {
          "Id": "e5558cfdda7d1c2c49c4d5ae59bbfcece64cb219b848ba78ae6cbba787ee8d07",
          "Created": "2023-09-03T19:58:13.302930658Z",
          "Path": "container-entrypoint",
          "Args": [
               "/usr/bin/run-httpd"
          ],
...
]

コンテナの削除

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

podman rmコマンドを使用し、コンテナを削除します。 myapp1コンテナを削除します。

$ podman rm myapp1

(コピペ用)

podman rm myapp1

出力結果
$ podman rm myapp1
myapp1

コンテナへの実行

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

podman execコマンドを使用して、起動中のコンテナに新たにプロセスを実行できます。また、--interactive (-i)オプションを使用してコンテナ内でコマンドを実行できます。 myappコンテナ内にhtmlファイルを作成します

$ podman exec -i myapp bash -c 'cat > /var/www/html/index.html' << _EOF
<html>
    <head>
    </head>
        <body>
            <h1>Hello World</h1>
        </body>
</html>
_EOF

(コピペ用)

podman exec -i myapp bash -c 'cat > /var/www/html/index.html' << _EOF
<html>
    <head>
    </head>
        <body>
            <h1>Hello World</h1>
        </body>
</html>
_EOF

出力結果はありません

コンテナ内のファイルを確認

$ podman exec myapp cat /var/www/html/index.html

(コピペ用)

podman exec myapp cat /var/www/html/index.html

出力結果
$ podman exec myapp cat /var/www/html/index.html
<html>
    <head>
    </head>
        <body>
            <h1>Hello World</h1>
        </body>
</html>

コンテナからイメージを作成

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

コンテナを停止します

$ podman stop myapp

(コピペ用)

podman stop myapp

出力結果
$ podman stop myapp
myapp

コンテナをコミットします。これにより、起動中のmyappコンテナからmyimageコンテナイメージが作成されます。

$ podman commit myapp myimage

(コピペ用)

podman commit myapp myimage

出力結果
$ podman commit myapp myimage
Getting image source signatures
Copying blob 48bbc3bb7b39 skipped: already exists  
Copying blob ca07266b6575 skipped: already exists  
Copying blob 2860cc774137 skipped: already exists  
Copying blob 195affa04e51 done  
Copying config 7af708ab2c done  
Writing manifest to image destination
Storing signatures
7af708ab2cb1b896b2e6a946588a8607b1d02e1c4e7a0ac317fe6f205901e3c8

myimageコンテナイメージからmyapp1コンテナを起動します

$ podman run -d --name myapp1 -p 8080:8080 myimage

(コピペ用)

podman run -d --name myapp1 -p 8080:8080 myimage

出力結果
podman run -d --name myapp1 -p 8080:8080 myimage
41862b662bdeb01bd6c2a2dac2e8b1d337a275d28fce720ad4a738650ee3112f

2.2 コンテナイメージの操作

コンテナとイメージの違い

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

podman image treeコマンドを実行します

$ podman image tree myimage

(コピペ用)

podman image tree myimage

出力結果
podman image tree myimage
Image ID: 7af708ab2cb1
Tags:     [localhost/myimage:latest]
Size:     453.8MB
Image Layers
├── ID: 48bbc3bb7b39 Size: 214.8MB
├── ID: c85189e46544 Size: 59.34MB
├── ID: 129ebf0074a0 Size: 179.5MB Top Layer of: [registry.access.redhat.com/ubi8/httpd-24:latest]
└── ID: eb3ca38cae75 Size:  51.2kB Top Layer of: [localhost/myimage:latest]

2つのコンテナイメージを比較します。 myimageコンテナイメージと元のコンテナイメージ(ubi8/httpd-24)との差分を表示します

$ podman image diff myimage ubi8/httpd-24

(コピペ用)

podman image diff myimage ubi8/httpd-24

出力結果

実際にはコマンドの実行ごとに出力順が変化します

$ podman image diff myimage ubi8/httpd-24
C /opt
C /opt/app-root
C /opt/app-root/etc
A /opt/app-root/etc/passwd
C /etc
C /etc/httpd
C /etc/httpd/conf.d
C /etc/httpd/conf.d/ssl.conf
C /etc/httpd/conf
C /etc/httpd/conf/httpd.conf
C /etc/httpd/tls
A /etc/httpd/tls/dhparams.pem
A /etc/httpd/tls/localhost.crt
A /etc/httpd/tls/localhost.key
C /etc/group
C /var
C /var/www
C /var/www/html
A /var/www/html/index.html
C /var/log
C /var/log/httpd
A /var/log/httpd/modsec_audit.log
A /var/log/httpd/modsec_debug.log

イメージのリスト表示

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

イメージをリスト表示

$ podman images

(コピペ用)

podman images

出力結果
# podman images
REPOSITORY                                TAG         IMAGE ID      CREATED        SIZE
localhost/myimage                         latest      7af708ab2cb1  6 minutes ago  454 MB
registry.access.redhat.com/ubi8/httpd-24  latest      c4127096ce64  2 weeks ago    454 MB

イメージの調査

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

podman image inspectコマンドを使いコンテナイメージを詳細に調べることができます。 myimageの調査を行います。

$ podman image inspect myimage

(コピペ用)

podman image inspect myimage

出力結果
$ podman image inspect myimage
[
     {
          "Id": "7af708ab2cb1b896b2e6a946588a8607b1d02e1c4e7a0ac317fe6f205901e3c8",
          "Digest": "sha256:2366a37f18bd462b09826a897f78fd3a523b57ba8d4330956dd0f2b0b7befe9a",
          "RepoTags": [
               "localhost/myimage:latest"
          ],
          "RepoDigests": [
               "localhost/myimage@sha256:2366a37f18bd462b09826a897f78fd3a523b57ba8d4330956dd0f2b0b7befe9a"
          ],
...
]

出力をフィルタリングし、特定の情報だけを出力できます。 CMDを出力します。

$ podman image inspect --format '{{ .Config.Cmd }}' myimage

(コピペ用)

podman image inspect --format '{{ .Config.Cmd }}' myimage

出力結果
$ podman image inspect --format '{{ .Config.Cmd }}' myimage
[/usr/bin/run-httpd]

StopSignalを出力します

$ podman image inspect --format '{{ .Config.StopSignal }}' myimage

(コピペ用)

podman image inspect --format '{{ .Config.StopSignal }}' myimage

出力結果
$ podman image inspect --format '{{ .Config.StopSignal }}' myimage

イメージのプッシュ

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

コンテナトランスポート(単にトランスポートとも呼ぶ) podman runコマンドを実行時、トランスポートを指定してコンテナを実行します。

$ podman run docker://registry.access.redhat.com/ubi8/httpd-24:latest echo hello

(コピペ用)

podman run docker://registry.access.redhat.com/ubi8/httpd-24:latest echo hello

出力結果
$ podman run docker://registry.access.redhat.com/ubi8/httpd-24:latest echo hello
hello

トランスポートを省略してコマンドを実行します。デフォルトはdocker://

$ podman run registry.access.redhat.com/ubi8/httpd-24:latest echo hello

(コピペ用)

podman run registry.access.redhat.com/ubi8/httpd-24:latest echo hello

出力結果
$ podman run registry.access.redhat.com/ubi8/httpd-24:latest echo hello
hello

コンテナイメージのリストを出力します

$ podman images

(コピペ用)

podman images

出力結果*
$ podman images
REPOSITORY                                TAG         IMAGE ID      CREATED      SIZE
registry.access.redhat.com/ubi8/httpd-24  latest      c4127096ce64  2 weeks ago  454 MB

myimageコンテナイメージをコンテナレジストリにプッシュします

$ podman push myimage quay.io/rhatdan/myimage

podman login:コンテナレジストリへのログイン

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

quay.ioとは

quay.ioは、 以降のquay.ioへのログインやコンテナイメージのpushを行うためにはご自身のアカウントの作成が必要です。 Red Hatアカウントをお持ちの場合はそれを利用できます。

quay.ioにログインします

$ podman login quay.io

(コピペ用)

podman login quay.io

出力結果*
$ podman login quay.io
Username: tnk4on
Password: 
Login Succeeded!

ローカルにキャッシュされた認証情報の確認します。

注記

キャッシュされた情報は暗号化されていないのでファイルの取り扱いには注意しましょう。

$ cat /run/user/$UID/containers/auth.json

(コピペ用)

cat /run/user/$UID/containers/auth.json

出力結果*
$ cat /run/user/$UID/containers/auth.json
{
        "auths": {
                "quay.io": {
                        "auth": "xxxxxxxxxxxxxxxx"
                }
        }
}

quay.ioからログアウトします

$ podman logout quay.io

(コピペ用)

$ podman logout quay.io

出力結果*
$ podman logout quay.io
Removed login credentials for quay.io

イメージのタグ付け

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

コンテナイメージのリストを表示します

$ podman images

(コピペ用)

podman images

出力結果
$ podman images
REPOSITORY                                TAG         IMAGE ID      CREATED      SIZE
registry.access.redhat.com/ubi8/httpd-24  latest      c4127096ce64  2 weeks ago  454 MB

podman tagコマンドを使用してコンテナイメージに新しい名前(タグ)を追加できます。 レジストリ(quay.io)、ユーザー名(rhatdan)を付加した新しいタグを作成します。

$ podman tag myimage quay.io/rhatdan/myimage
$ podman images

(コピペ用)

podman tag myimage quay.io/rhatdan/myimage
podman images

出力結果
$ podman tag myimage quay.io/rhatdan/myimage
$ podman images
REPOSITORY                                TAG         IMAGE ID      CREATED         SIZE
localhost/myimage                         latest      c3c487bbbf7b  37 seconds ago  454 MB
quay.io/rhatdan/myimage                   latest      c3c487bbbf7b  37 seconds ago  454 MB
registry.access.redhat.com/ubi8/httpd-24  latest      c4127096ce64  2 weeks ago     454 MB

quay.ioにユーザー名を指定してログインします*

$ podman login --username rhatdan quay.io

quay.ioにイメージをプッシュします

$ podman push quay.io/rhatdan/myimage

podman tagでバージョンを指定したタグを作成します

$ podman tag quay.io/rhatdan/myimage quay.io/rhatdan/myimage:1.0
$ podman images

(コピペ用)

$ podman tag quay.io/rhatdan/myimage quay.io/rhatdan/myimage:1.0
podman images

出力結果
$ podman images
REPOSITORY                                TAG         IMAGE ID      CREATED        SIZE
localhost/myimage                         latest      c3c487bbbf7b  9 minutes ago  454 MB
quay.io/rhatdan/myimage                   latest      c3c487bbbf7b  9 minutes ago  454 MB
quay.io/rhatdan/myimage                   1.0         c3c487bbbf7b  9 minutes ago  454 MB
registry.access.redhat.com/ubi8/httpd-24  latest      c4127096ce64  2 weeks ago    454 MB

イメージの削除

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

以前にpodman commit myapp myimageで作成したコンテナイメージはlocalhost/myimageという名前で保存されています。

localhost/myimageタグを削除します

$ podman images
$ podman rmi localhost/myimage
$ podman images

(コピペ用)

podman images
podman rmi localhost/myimage
podman images

出力結果
$ podman images
REPOSITORY                                TAG         IMAGE ID      CREATED         SIZE
localhost/myimage                         latest      c3c487bbbf7b  10 minutes ago  454 MB
quay.io/rhatdan/myimage                   latest      c3c487bbbf7b  10 minutes ago  454 MB
quay.io/rhatdan/myimage                   1.0         c3c487bbbf7b  10 minutes ago  454 MB
registry.access.redhat.com/ubi8/httpd-24  latest      c4127096ce64  2 weeks ago     454 MB
$ podman rmi localhost/myimage
Untagged: localhost/myimage:latest
$ podman images
REPOSITORY                                TAG         IMAGE ID      CREATED         SIZE
quay.io/rhatdan/myimage                   latest      c3c487bbbf7b  10 minutes ago  454 MB
quay.io/rhatdan/myimage                   1.0         c3c487bbbf7b  10 minutes ago  454 MB
registry.access.redhat.com/ubi8/httpd-24  latest      c4127096ce64  2 weeks ago     454 MB

myimageおよびmyimage:1.0を削除します

訳注

1章で実行したコンテナが残っている場合は、myimageの削除前に停止する必要があります。

podman rm -f -t 0 myapp1

$ podman rmi myimage
$ podman rmi myimage:1.0
$ podman images

(コピペ用)

$ podman rmi myimage
$ podman rmi myimage:1.0
$ podman images

出力結果
$ podman rmi myimage
Untagged: quay.io/rhatdan/myimage:latest
$ podman rmi myimage:1.0
Untagged: quay.io/rhatdan/myimage:1.0
Deleted: c3c487bbbf7ba989432ae65facfac36ca34fbd75fde664b24cf6247bf844f955
$ podman images
REPOSITORY                                TAG         IMAGE ID      CREATED      SIZE
registry.access.redhat.com/ubi8/httpd-24  latest      c4127096ce64  2 weeks ago  454 MB

コンテナイメージを削除する別の方法

ID指定してコンテナイメージを削除することも可能です。

$ podman rmi edc479f58484
$ podman rmi edc479f58484 --force

podman image prune -aコマンドを使用すると、起動中のコンテナで使われているコンテナイメージ以外を全て削除できます。 ローカルにあるコンテナイメージを全て削除します。

$ podman image prune -a
$ podman images

(コピペ用)

podman image prune -a
podman images

出力結果
$ podman image prune -a
WARNING! This command removes all images without at least one container associated with them.
Are you sure you want to continue? [y/N] y
$ podman images

イメージのプル

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

quay.ioからmyimageコンテナイメージをプルする

$ podman pull quay.io/rhatdan/myimage

(コピペ用)

podman pull quay.io/rhatdan/myimage

出力結果
$ podman pull 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
2c7e43d880382561ebae3fa06c7a1442d0da2912786d09ea9baaef87f73c29ae

Original

$ podman run -d -p 8080:8080 --name myapp registry.access.redhat.com/ubi8/httpd-24

(コピペ用)

podman run -d -p 8080:8080 --name myapp registry.access.redhat.com/ubi8/httpd-24

出力結果
$ podman run -d -p 8080:8080 --name myapp registry.access.redhat.com/ubi8/httpd-24
Trying to pull registry.access.redhat.com/ubi8/httpd-24:latest...
Getting image source signatures
Checking if image destination supports signatures
Copying blob 9ece777c9660 done  
Copying blob 70de3d8fc2c6 done  
Copying blob b653248f5bcb done  
Copying config c4127096ce done  
Writing manifest to image destination
Storing signatures
a68b01256feb009ba382174831f67a8f78af61024abe809c50d1ce6ae6f84131

コンテナイメージのリストを表示します

$ podman images

(コピペ用)

podman images

出力結果
$ podman images
REPOSITORY                                TAG         IMAGE ID      CREATED      SIZE
registry.access.redhat.com/ubi8/httpd-24  latest      c4127096ce64  2 weeks ago  454 MB
quay.io/rhatdan/myimage                   latest      2c7e43d88038  2 years ago  462 MB

Dockerはdocker.ioをハードコード Podmanでは複数のレジストリが定義されている。パッケージングにより異なる。

Podmanの情報を出力

$ podman info

(コピペ用)

podman info

出力結果
$ podman info
...
registries:
  search:
  - registry.access.redhat.com
  - registry.redhat.io
  - docker.io
...

podman createコマンドを使うと、コンテナイメージからコンテナが作成されますがすぐには実行されません。 停止状態のコンテナを起動するにはpodman startコマンドを使用します。

短縮名でコンテナイメージを指定し、コンテナを作成します

$ podman create -p 8080:8080 ubi8/httpd-24

(コピペ用)

podman create -p 8080:8080 ubi8/httpd-24

注記

RHELの場合*

$ podman create -p 8080:8080 ubi8/httpd-24
Resolved "ubi8/httpd-24" as an alias (/etc/containers/registries.conf.d/001-rhel-shortnames.conf)
Trying to pull registry.access.redhat.com/ubi8/httpd-24:latest...
Getting image source signatures
Checking if image destination supports signatures
Copying blob 9ece777c9660 done  
Copying blob 70de3d8fc2c6 done  
Copying blob b653248f5bcb done  
Copying config c4127096ce done  
Writing manifest to image destination
Storing signatures
94ad6a37b8fb40b13eb7038e5e174cc22bdd3fe8237a6fbd6a14bd87896528f8
- "ubi8" = "registry.access.redhat.com/ubi8" があるため解決してしまう

短縮名を設定しているファイルの内容を確認してみる

$ cat /etc/containers/registries.conf.d/000-shortnames.conf
出力結果
$ cat /etc/containers/registries.conf.d/000-shortnames.conf
[aliases]
...
  # centos
  "centos" = "quay.io/centos/centos"
  # containers
  "skopeo" = "quay.io/skopeo/stable"
  "buildah" = "quay.io/buildah/stable"
  "podman" = "quay.io/podman/stable"
...

イメージの検索

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

リポジトリregistry.access.redhat.comで、名前にhttpdという文字列を含むイメージを検索します

$ podman search registry.access.redhat.com/httpd

(コピペ用)

podman search registry.access.redhat.com/httpd

出力結果
$ podman search registry.access.redhat.com/httpd
NAME                                                                         DESCRIPTION
registry.access.redhat.com/rhscl/httpd-24-rhel7                              Apache HTTP 2.4 Server
registry.access.redhat.com/ubi8/httpd-24                                     Platform for running Apache httpd 2.4 or bui...
registry.access.redhat.com/ubi9/httpd-24                                     rhcc_registry.access.redhat.com_ubi9/httpd-2...
registry.access.redhat.com/cloudforms46-beta/cfme-openshift-httpd            CloudForms is a management and automation pl...
registry.access.redhat.com/cloudforms46/cfme-openshift-httpd                 Web Server image for a multi-pod Red Hat® C...
...

イメージのマウント

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

podman mountを実行する。そのままではエラーになる。

$ podman mount quay.io/rhatdan/myimage

(コピペ用)

podman mount quay.io/rhatdan/myimage

出力結果
$ podman mount quay.io/rhatdan/myimage
Error: cannot run command "podman mount" in rootless mode, must execute `podman unshare` first

podman unshareを実行します(ローカルにイメージが無い場合はpodman pull quay.io/rhatdan/myimageを事前に実行します) podman unsahreを実行するとプロンプトが$から#に変化します。

$ podman unshare
# mnt=$(podman image mount quay.io/rhatdan/myimage)
# cat $mnt/var/www/html/index.html
# podman image unmount quay.io/rhatdan/myimage
# exit

(コピペ用)

podman unshare
mnt=$(podman image mount quay.io/rhatdan/myimage)
cat $mnt/var/www/html/index.html
podman image unmount quay.io/rhatdan/myimage
exit

出力結果
$ podman unshare
# mnt=$(podman image mount quay.io/rhatdan/myimage)
# cat $mnt/var/www/html/index.html
<html>
 <head>
 </head>
 <body>
   <h1>Hello World<h1>
 </body>
</html>
# podman image unmount quay.io/rhatdan/myimage
2c7e43d880382561ebae3fa06c7a1442d0da2912786d09ea9baaef87f73c29ae
# exit
exit

(オプション)podman imageコマンドの他のサブコマンドの詳細はマニュアルページを参照してください

$ man podman-image

まとめ(2.2 コンテナイメージの操作)

コンテナ実行の元となるコンテナイメージは、コンテナレジストリから入手するだけでなく、名前やタグを付けたものをコンテナレジストリにプッシュできます。 Dockerには無いPodman独自のコマンドとして、podman image mountpodman unshareがあります。これらのコマンドを使用することでより安全にコンテナイメージの中を調査することができます。

2.3 イメージの構築

アプリケーションのビルドの自動化

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

myappディレクトリを作成し、その中にindex.htmlとContainerfileを作成します

$ mkdir myapp
$ cat > myapp/index.html << _EOF
<html>
 <head>
 </head>
 <body>
 <h1>Hello World</h1>
 </body>
</html>
_EOF
$ cat > myapp/Containerfile << _EOF
FROM ubi8/httpd-24
COPY index.html /var/www/html/index.html
_EOF

出力結果

$ mkdir myapp
$ cat > myapp/index.html << _EOF
<html>
 <head>
 </head>
 <body>
 <h1>Hello World</h1>
 </body>
</html>
_EOF
$ cat > myapp/Containerfile << _EOF
FROM ubi8/httpd-24
COPY index.html /var/www/html/index.html
_EOF

コンテナイメージをビルドします

$ podman build -t quay.io/rhatdan/myimage ./myapp

(コピペ用)

podman build -t quay.io/rhatdan/myimage ./myapp

出力結果
$ podman build -t quay.io/rhatdan/myimage ./myapp
STEP 1/2: FROM ubi8/httpd-24
STEP 2/2: COPY index.html /var/www/html/index.html
COMMIT quay.io/rhatdan/myimage
--> 1992ba61ae6
Successfully tagged quay.io/rhatdan/myimage:latest
1992ba61ae60d779d865e7de510601d52184f12b25187f6b8c02318ccc240f6b

コンテナイメージをビルドし、レジストリにプッシュするスクリプトを作成します

このシェルスクリプトはコンテナのビルドとプッシュを簡単に自動化するための一例です。

ここではスクリプトの実行は行いませんが、試してみたい方はご自身のquay.ioアカウントを用意してお試しください。

$ cat > myapp/automate.sh << _EOF
#!/bin/bash
podman build -t quay.io/rhatdan/myimage ./myapp
podman push quay.io/rhatdan/myimage
_EOF
$ chmod +x myapp/automate.sh

(コピペ用)

cat > myapp/automate.sh << _EOF
#!/bin/bash
podman build -t quay.io/rhatdan/myimage ./myapp
podman push quay.io/rhatdan/myimage
_EOF
chmod +x myapp/automate.sh

出力結果
cat > myapp/automate.sh << _EOF
#!/bin/bash
podman build -t quay.io/rhatdan/myimage ./myapp
podman push quay.io/rhatdan/myimage
_EOF
$ chmod +x myapp/automate.sh

コンテナイメージのリストを出力する

$ podman images

(コピペ用)

$ podman images

出力結果
$ podman images
REPOSITORY                                TAG         IMAGE ID      CREATED        SIZE
quay.io/rhatdan/myimage                   latest      1992ba61ae60  4 minutes ago  454 MB
registry.access.redhat.com/ubi8/httpd-24  latest      c4127096ce64  2 weeks ago    454 MB
<none>                                    <none>      2c7e43d88038  2 years ago    462 MB