Rocky Linuxに Podmanをインストールして Dockerのコンテナを動かしてみます。
前々から RedHat Enterprise Linux(RHEL)周りで目にするようになっていた Podmanというコンテナ関連のソフトを少しイジってみました。
まずは本家サイトです。
Welcome to the new Podman Website!
そもそも Podmanってどういうものなのか、上記のサイトのドキュメントからの引用です。
Podman is a daemonless, open source, Linux native tool designed to make it easy to find, run, build, share and deploy applications using Open Containers Initiative (OCI) Containers and Container Images.
デーモンレス(常駐プログラム型ではない)と書いてありますが、これは常駐プログラムとして動いている Dockerとの対比なのだと思います。
で、OCIコンテナーを簡便に動かすためのものだということですね。
「dockerコマンドの代わりに podmanコマンドを使う感じ」と言えば Dokcer経験者には分かりやすいでしょうか、Dockerと同列のソフトウェアだと思いました。
当初は RHELだけのものと認識していたのですが、OSSであり、他の Linuxディストリビューションや Windows・Macでも動きますね。
もう一つの違いは、Linux環境だけにですが、コンテナ管理に Restful APIが用意されていること。
また引用です。
There is a RESTFul API to manage containers. We also have a remote Podman client that can interact with the RESTFul service. We currently support clients on Linux, Mac, and Windows. The RESTFul service is only supported on Linux.
リモートの Podmanクライアントとありますが、Podman Desktopのことかな?
とりあえずここではサーバーOSでのコンテナ運用を考えて、ローカルでの実行をしますので、リモートはいつかまた別な所で。
とりあえず、入れてみましょうか。
環境は以下の通りです。
- Rocky Linux 9.2
- Podman 4.4.1-9
2023年6月6日現在、Podmanの最新バージョンは 4.5.0 でしたが、Rocky Linux 9.2 に登録されているパッケージリポジトリからインストールすると上のバージョンになりました。
では dnfでインストールします。
長いですが、全部載せます。
[subro@Rocky-2 ~]$ sudo dnf install podman
Rocky Linux 9 - BaseOS 5.6 kB/s | 4.1 kB 00:00
Rocky Linux 9 - AppStream 6.2 kB/s | 4.5 kB 00:00
Rocky Linux 9 - AppStream 4.8 MB/s | 7.1 MB 00:01
Rocky Linux 9 - Extras 4.0 kB/s | 2.9 kB 00:00
依存関係が解決しました。
====================================================================================================================================================================================================
パッケージ アーキテクチャー バージョン リポジトリー サイズ
====================================================================================================================================================================================================
インストール:
podman x86_64 2:4.4.1-9.el9_2 appstream 14 M
依存関係のインストール:
conmon x86_64 2:2.1.7-1.el9_2 appstream 51 k
container-selinux noarch 3:2.205.0-1.el9_2 appstream 50 k
containers-common x86_64 2:1-52.el9_2 appstream 126 k
criu x86_64 3.17-4.el9 appstream 544 k
crun x86_64 1.8.4-1.el9_2 appstream 201 k
fuse-overlayfs x86_64 1.11-1.el9_2 appstream 71 k
fuse3 x86_64 3.10.2-5.el9.0.1 appstream 53 k
fuse3-libs x86_64 3.10.2-5.el9.0.1 appstream 91 k
libnet x86_64 1.2-6.el9 appstream 58 k
libslirp x86_64 4.4.0-7.el9 appstream 68 k
netavark x86_64 2:1.5.0-3.el9_2 appstream 2.6 M
protobuf-c x86_64 1.3.3-12.el9 baseos 35 k
shadow-utils-subid x86_64 2:4.9-6.el9 baseos 87 k
slirp4netns x86_64 1.2.0-3.el9 appstream 45 k
yajl x86_64 2.1.0-21.el9 appstream 37 k
弱い依存関係のインストール:
aardvark-dns x86_64 2:1.5.0-2.el9 appstream 998 k
criu-libs x86_64 3.17-4.el9 appstream 32 k
トランザクションの概要
====================================================================================================================================================================================================
インストール 18 パッケージ
ダウンロードサイズの合計: 19 M
インストール後のサイズ: 68 M
これでよろしいですか? [y/N]: y
パッケージのダウンロード:
(1/18): protobuf-c-1.3.3-12.el9.x86_64.rpm 176 kB/s | 35 kB 00:00
(2/18): shadow-utils-subid-4.9-6.el9.x86_64.rpm 295 kB/s | 87 kB 00:00
(3/18): container-selinux-2.205.0-1.el9_2.noarch.rpm 124 kB/s | 50 kB 00:00
(4/18): conmon-2.1.7-1.el9_2.x86_64.rpm 337 kB/s | 51 kB 00:00
(5/18): slirp4netns-1.2.0-3.el9.x86_64.rpm 633 kB/s | 45 kB 00:00
(6/18): fuse-overlayfs-1.11-1.el9_2.x86_64.rpm 219 kB/s | 71 kB 00:00
(7/18): yajl-2.1.0-21.el9.x86_64.rpm 104 kB/s | 37 kB 00:00
(8/18): criu-libs-3.17-4.el9.x86_64.rpm 73 kB/s | 32 kB 00:00
(9/18): crun-1.8.4-1.el9_2.x86_64.rpm 246 kB/s | 201 kB 00:00
(10/18): podman-4.4.1-9.el9_2.x86_64.rpm 7.8 MB/s | 14 MB 00:01
(11/18): libslirp-4.4.0-7.el9.x86_64.rpm 137 kB/s | 68 kB 00:00
(12/18): criu-3.17-4.el9.x86_64.rpm 377 kB/s | 544 kB 00:01
(13/18): netavark-1.5.0-3.el9_2.x86_64.rpm 7.3 MB/s | 2.6 MB 00:00
(14/18): containers-common-1-52.el9_2.x86_64.rpm 352 kB/s | 126 kB 00:00
(15/18): libnet-1.2-6.el9.x86_64.rpm 156 kB/s | 58 kB 00:00
(16/18): aardvark-dns-1.5.0-2.el9.x86_64.rpm 5.8 MB/s | 998 kB 00:00
(17/18): fuse3-3.10.2-5.el9.0.1.x86_64.rpm 321 kB/s | 53 kB 00:00
(18/18): fuse3-libs-3.10.2-5.el9.0.1.x86_64.rpm 533 kB/s | 91 kB 00:00
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
合計 5.0 MB/s | 19 MB 00:03
トランザクションの確認を実行中
トランザクションの確認に成功しました。
トランザクションのテストを実行中
トランザクションのテストに成功しました。
トランザクションを実行中
準備 : 1/1
インストール中 : fuse3-libs-3.10.2-5.el9.0.1.x86_64 1/18
scriptletの実行中: container-selinux-3:2.205.0-1.el9_2.noarch 2/18
インストール中 : container-selinux-3:2.205.0-1.el9_2.noarch 2/18
scriptletの実行中: container-selinux-3:2.205.0-1.el9_2.noarch 2/18
インストール中 : protobuf-c-1.3.3-12.el9.x86_64 3/18
インストール中 : fuse3-3.10.2-5.el9.0.1.x86_64 4/18
インストール中 : fuse-overlayfs-1.11-1.el9_2.x86_64 5/18
scriptletの実行中: fuse-overlayfs-1.11-1.el9_2.x86_64 5/18
インストール中 : aardvark-dns-2:1.5.0-2.el9.x86_64 6/18
インストール中 : netavark-2:1.5.0-3.el9_2.x86_64 7/18
インストール中 : libnet-1.2-6.el9.x86_64 8/18
インストール中 : criu-3.17-4.el9.x86_64 9/18
インストール中 : criu-libs-3.17-4.el9.x86_64 10/18
インストール中 : libslirp-4.4.0-7.el9.x86_64 11/18
インストール中 : slirp4netns-1.2.0-3.el9.x86_64 12/18
インストール中 : yajl-2.1.0-21.el9.x86_64 13/18
インストール中 : crun-1.8.4-1.el9_2.x86_64 14/18
インストール中 : containers-common-2:1-52.el9_2.x86_64 15/18
インストール中 : conmon-2:2.1.7-1.el9_2.x86_64 16/18
インストール中 : shadow-utils-subid-2:4.9-6.el9.x86_64 17/18
インストール中 : podman-2:4.4.1-9.el9_2.x86_64 18/18
scriptletの実行中: container-selinux-3:2.205.0-1.el9_2.noarch 18/18
scriptletの実行中: podman-2:4.4.1-9.el9_2.x86_64 18/18
検証 : shadow-utils-subid-2:4.9-6.el9.x86_64 1/18
検証 : protobuf-c-1.3.3-12.el9.x86_64 2/18
検証 : container-selinux-3:2.205.0-1.el9_2.noarch 3/18
検証 : fuse-overlayfs-1.11-1.el9_2.x86_64 4/18
検証 : conmon-2:2.1.7-1.el9_2.x86_64 5/18
検証 : slirp4netns-1.2.0-3.el9.x86_64 6/18
検証 : podman-2:4.4.1-9.el9_2.x86_64 7/18
検証 : yajl-2.1.0-21.el9.x86_64 8/18
検証 : criu-libs-3.17-4.el9.x86_64 9/18
検証 : criu-3.17-4.el9.x86_64 10/18
検証 : crun-1.8.4-1.el9_2.x86_64 11/18
検証 : libslirp-4.4.0-7.el9.x86_64 12/18
検証 : libnet-1.2-6.el9.x86_64 13/18
検証 : netavark-2:1.5.0-3.el9_2.x86_64 14/18
検証 : containers-common-2:1-52.el9_2.x86_64 15/18
検証 : aardvark-dns-2:1.5.0-2.el9.x86_64 16/18
検証 : fuse3-libs-3.10.2-5.el9.0.1.x86_64 17/18
検証 : fuse3-3.10.2-5.el9.0.1.x86_64 18/18
インストール済み:
aardvark-dns-2:1.5.0-2.el9.x86_64 conmon-2:2.1.7-1.el9_2.x86_64 container-selinux-3:2.205.0-1.el9_2.noarch containers-common-2:1-52.el9_2.x86_64 criu-3.17-4.el9.x86_64
criu-libs-3.17-4.el9.x86_64 crun-1.8.4-1.el9_2.x86_64 fuse-overlayfs-1.11-1.el9_2.x86_64 fuse3-3.10.2-5.el9.0.1.x86_64 fuse3-libs-3.10.2-5.el9.0.1.x86_64
libnet-1.2-6.el9.x86_64 libslirp-4.4.0-7.el9.x86_64 netavark-2:1.5.0-3.el9_2.x86_64 podman-2:4.4.1-9.el9_2.x86_64 protobuf-c-1.3.3-12.el9.x86_64
shadow-utils-subid-2:4.9-6.el9.x86_64 slirp4netns-1.2.0-3.el9.x86_64 yajl-2.1.0-21.el9.x86_64
完了しました!
何の問題もなくインストールできました。
続いて、Dockerよろしく nginxのコンテナを立ち上げてみます。
[docker]コマンドの書式のまま、コマンドを[podman]に替えてるだけ。
[subro@Rocky-2 ~]$ sudo podman run -dt -p 8080:80/tcp docker.io/library/nginx
Trying to pull docker.io/library/nginx:latest...
Getting image source signatures
Copying blob eed12bbd6494 done
Copying blob 831f51541d38 done
Copying blob fa7eb8c8eee8 done
Copying blob 7ff3b2b12318 done
Copying blob 0f67c7de5f2c done
Copying blob f03b40093957 skipped: already exists
Copying config f9c14fe76d done
Writing manifest to image destination
Storing signatures
70a75a3021fcac82f26a96ceda6e389c5fc9541fa9ef82bbe813248009efbefb
Dockerのコンテナリポジトリにあるコンテナイメージをそのまま持ってきて動いているようです。
[docker ps]を [podman]で。
[subro@Rocky-2 ~]$ sudo podman ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
70a75a3021fc docker.io/library/nginx:latest nginx -g daemon o... 10 seconds ago Up 9 seconds 0.0.0.0:8080->80/tcp silly_perlman
まるで Dockerです。
上記のマニュアルにも、[docker]コマンドのエイリアスとして [podman]コマンドを設定しても問題なく動くとあったくらいですから似ているはずです。
これは Podmanと関係ないですが、Nginxコンテナに外部からアクセスするため Rocky Linuxのポート解除をしましょう。
[subro@Rocky-2 ~]$ sudo firewall-cmd --permanent --add-port 8080/tcp
Warning: ALREADY_ENABLED: 8080:tcp
[subro@Rocky-2 ~]$ sudo firewall-cmd --reload
success
開放できましたので、他のノードから WEBブラウザでアクセスしてみます。
我が家では [http://Rocky-2:8080]になります。
まぁ、何のことはない、Nginxの画面ですわ。
Podmanでちゃんとコンテナが動いています。
Dockerをいじったことがあると何のことはないのですけど、運用を考えると常駐プロセスがないというのは良いと思います。
また、コンテナ管理用の Restful APIが用意されているということは、他ノードにある外部ツールとの連携がしやすくなっているのだと思います。
例えば Slackへの書き込みからコンテナ起動なんてことが比較的簡単にできるのだと思います。
周辺の情報を拾った限りは、Dockerを駆逐する立ち位置ではないようでした。
ネームバリューはまだまだ Dockerなので、Podmanを使う人はどんなメリットをして利用に至ったかを知りたいな〜と思いました。
少なくとも RHELでは Podman推しのようではあります。
これ以外に日本語書籍は無さげです。