Podman入門 2 - podman-compose の Pod は何してん?
前回 の続き
Podman の Pod って何
podman-compose
は Pod なるサムシング的な何かで何かしてるサムシング的な何からしい。
ざっくばらんに言えば Pod は複数のコンテナを取りまとめて管理するもの。 Kubernetes の概念がベースにあるらしいが、 Podman の Pod と Kubernetes の Pod は別物であるらしいよ。詳しくは知らん。
Pod に所属しているコンテナはネットワークスタックやPIDを共有できるらしく、別コンテナなのに IPC通信 (プロセス間通信) が可能だったりするらしいです。
逆に言えば、 Pod に所属してるコンテナはリソースを共有しちゃうということでもあるわけで。これが便利なことは理解するけど、私としては困っちゃう。
私は Podman を使ってサービスを連結展開したいのではなく、組み込みの環境を仮想的に・簡易的にテストしたいのです。そもそも別々の機器として存在してるものを、共有されたら困るのです。
podman-compose は何するものぞ
前回作成した docker-compose.yaml。
これを podman-compose up
するときに何が起こるのでしょうか? podman-compose
の help を眺めてたらやっぱり --verbose
があったので、これで出力してみます。
podman-compose --verbose up --abort-on-container-exit
--label
とか本質的には要らないものを省いた結果が以下です。実際、このスクリプトを実行するとほぼ同等の結果が得られます。
-
pod_docker-compose
Pod を作成- インフラコンテナ(PIDとか共有するための処理するらしい)は無し
- PIDやネットワークスタックの共有はしない
- network の作成
- コンテナを作成し、
pod_docker-compose
Pod に所属させる - 作ったコンテナを開始
逆に、podman-compose down
に相当する処理はこちら。
SSH Server を 2 つ立ち上げ、ホストから ssh 接続
上記の up.sh を見る限り、Pod は何も共有してないので SSH サーバーノードをもう一個追加しても Port 22 が衝突などは起こらなそうです。
実際、 node3 として SSH サーバーのコンテナを追加して実行しても、ちゃんと起動しますし、どちらにもそれぞれアクセスできました。
上記の podman-compose
の up と down と同等のスクリプトは以下です。
ついでなので、ポートフォワーディング(node2: 2222:22
, node2: 2223:22
)もしています。
podman-compose up
で立ち上げた後に、 connect.sh を使ってlocalhost
に接続できます。以下の様に接続できました。
$ ./connect.sh 2
Welcome to Ubuntu 22.04.5 LTS (GNU/Linux 5.15.153.1-microsoft-standard-WSL2 x86_64)
* Documentation: https://help.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/pro
This system has been minimized by removing packages and content that are
not required on a system that users do not log into.
To restore this content, you can run the 'unminimize' command.
Last login: Fri Oct 4 18:29:59 2024 from 192.168.11.101
root@792cc64b2281:~# ifconfig
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.11.101 netmask 255.255.255.0 broadcast 192.168.11.255
inet6 fe80::64a4:e7ff:fee3:d216 prefixlen 64 scopeid 0x20<link>
ether 66:a4:e7:e3:d2:16 txqueuelen 0 (Ethernet)
RX packets 58 bytes 8214 (8.2 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 28 bytes 6366 (6.3 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 117 bytes 22920 (22.9 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 117 bytes 22920 (22.9 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
root@792cc64b2281:~# exit
logout
まとめ
-
podman-compose
は結局中で Podman のコマンドを叩いてるだけ- 自分でスクリプトとして再現することも可能
-
podman-compose
の Pod は何も共有しない- コンテナ間でリソースが競合することは無さそう
- そもそも Podって必要なの?
-
podman-compose
でポートフォワーディングしてホストから ssh も可能
結論としては「大丈夫だった」ということが分かっただけですが、 podman のコマンドを使って自分でコントロールするスクリプトとか書いてだいぶ理解が深まった気がしますね。
Discussion