与えられたpodmanはLinuxシステムとbaz.serviceという名前のsystemdユニットにインストールされています:
# /etc/systemd/system/baz.service
[Service]
ExecStart=/usr/bin/podman run --rm --tty --name baz alpine sh -c 'while true; do date; sleep 1; done'
ExecStop=/usr/bin/podman stop baz
そして、baz.serviceが開始しました:
# systemctl daemon-reload
# systemctl start baz.service
次に、ユニットのステータスを確認すると、/ system.slice / baz.service cgroupにプロセスsh
またはsleep
プロセスが表示されません。
# systemctl status baz
● baz.service
Loaded: loaded (/etc/systemd/system/baz.service; static; vendor preset: enabl
Active: active (running) since Sat 2019-08-10 05:50:18 UTC; 14s ago
Main PID: 16910 (podman)
Tasks: 9
Memory: 7.3M
CPU: 68ms
CGroup: /system.slice/baz.service
└─16910 /usr/bin/podman run --rm --tty --name baz alpine sh -c while
# ...
podmanが従来のfork-execモデルを使用しているとredhatの人々から聞いたので、私はbaz.serviceステータスでsh
とsleep
子供が表示されることを期待していました。
podmanがforkとexecを実行した場合、私のsh
and sleep
プロセスはpodmanの子になり、元のpodmanプロセスと同じcgroupに含まれるのではないでしょうか?
私はsystemdとpodmanを使用して、子供たちが別の親に出向いて私のbaz.service ssystemdユニットから脱出することなく、私のコンテナーを管理できることを期待していました。
ps
私の出力を見るとsh
、それsleep
が実際にと呼ばれる別のプロセスの子であることがわかりconmon
ます。conmonがどこから来たのか、どのように開始されたのかはわかりませんが、systemdはそれをキャプチャしませんでした。
# ps -Heo user,pid,ppid,comm
# ...
root 17254 1 podman
root 17331 1 conmon
root 17345 17331 sh
root 17380 17345 sleep
出力から、私のbaz.serviceユニットがconmon-> sh-> sleepチェーンを管理していないことは明らかです。
- podmanはDockerクライアントサーバーモデルとどう違うのですか?
- ポッドマンのコンモンはドッカーのコンテナとどのように違うのですか?
多分それらは両方ともコンテナーランタイムであり、dockerd
デーモンは人々が取り除きたいものです。
だからおそらくドッカーは次のようなものです:
- dockerdデーモン
- ドッカークリ
- コンテナー化されたコンテナーランタイム
そしてpodmanは次のようなものです:
- ポッドマンCLI
- 共通コンテナーランタイム
つまり、podmanは従来のfork execモデルを使用しているかもしれませんが、フォークして実行するのはpodman cliではなく、共通のプロセスです。
戸惑う。