Dato podman è installato su un sistema linux e un'unità systemd chiamata baz.service:
# /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
E il baz.service è iniziato:
# systemctl daemon-reload
# systemctl start baz.service
Quindi quando controllo lo stato dell'unità non vedo il processo sh
o sleep
nel cgroup /system.slice/baz.service
# 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
# ...
Mi aspettavo di vedere la sh
e sleep
bambini nel mio stato di baz.service perché ho sentito la gente da dire RedHat usi podman un modello tradizionale forcella-exec.
Se podman eseguisse fork e exec, allora my sh
e sleep
process non sarebbero figli di podman e si troverebbero nello stesso cgroup del processo podman originale?
Mi aspettavo di poter usare systemd e podman per poter gestire i miei container senza che i bambini andassero da un altro genitore e fuggissero dalla mia unità sazsystemd baz.service.
Guardando l'output di ps
posso vederlo sh
e in sleep
realtà sono figli di un diverso processo chiamato conmon
. Non sono sicuro da dove provenga Conmon o come sia stato avviato ma Systemd non l'ha catturato.
# ps -Heo user,pid,ppid,comm
# ...
root 17254 1 podman
root 17331 1 conmon
root 17345 17331 sh
root 17380 17345 sleep
Dall'output è chiaro che la mia unità baz.service non gestisce la catena del sonno conmon -> sh ->.
- In che modo podman è diverso dal modello del server client docker?
- In che modo il conmon di podman è diverso dal containerd della docker?
Forse sono entrambi runtime del contenitore e il dockerd
demone è ciò di cui le persone vogliono sbarazzarsi.
Quindi forse la finestra mobile è come:
- demone dockerd
- docker cli
- runtime contenitore containerd
E podman è come:
- podman cli
- runtime contenitore conmon
Quindi forse podman usa un tradizionale modello di fork fork ma non è il podman cli che sta biforcando ed exec, è il processo comune.
Mi sento confuso.