Der angegebene Podman ist auf einem Linux-System und einer Systemd-Einheit namens baz.service installiert:
# /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
Und der baz.service hat begonnen:
# systemctl daemon-reload
# systemctl start baz.service
Wenn ich dann den Status des Geräts überprüfe, wird der Prozess sh
oder sleep
in der Gruppe /system.slice/baz.service nicht angezeigt
# 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
# ...
Ich hatte erwartet, die sh
und sleep
Kinder in meinem baz.service-Status zu sehen, weil ich von Redhat gehört habe, dass Podman ein traditionelles Fork-Exec-Modell verwendet.
Wenn Podman Fork und Exec gemacht hätte, wären meine sh
und sleep
Process dann nicht Kinder von Podman und würden in derselben Gruppe wie der ursprüngliche Podman-Prozess sein?
Ich hatte erwartet, systemd und podman verwenden zu können, um meine Container verwalten zu können, ohne dass die Kinder zu einem anderen Elternteil gehen und aus meiner baz.service ssystemd-Einheit entkommen.
Wenn ps
ich mir die Ausgabe von ansehe, kann ich das sehen sh
und bin sleep
tatsächlich Kinder eines anderen Prozesses namens conmon
. Ich bin nicht sicher, woher conmon kam oder wie es gestartet wurde, aber systemd hat es nicht erfasst.
# ps -Heo user,pid,ppid,comm
# ...
root 17254 1 podman
root 17331 1 conmon
root 17345 17331 sh
root 17380 17345 sleep
Aus der Ausgabe geht hervor, dass meine baz.service-Einheit die conmon -> sh -> Schlafkette nicht verwaltet.
- Wie unterscheidet sich podman vom Docker-Client-Server-Modell?
- Wie unterscheidet sich Podmans Conmon von Dockers Containerd?
Vielleicht sind sie beide Container-Laufzeiten und der dockerd
Daemon ist das, was die Leute loswerden wollen.
Vielleicht ist Docker wie folgt:
- Dockerd Daemon
- Docker Cli
- Containerd Container Laufzeit
Und Podman ist wie:
- podman cli
- Conmon Container Laufzeit
Vielleicht verwendet Podman ein traditionelles Fork-Exec-Modell, aber es ist nicht das Podman-Cli, das Forking und Exec ist, sondern der Conmon-Prozess.
Ich bin verwirrt.