Dado que o podman está instalado em um sistema Linux e em uma unidade systemd chamada 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 o baz.service começou:
# systemctl daemon-reload
# systemctl start baz.service
Então, quando verifico o status da unidade, não vejo o processo sh
nem sleep
no 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
# ...
Eu esperava ver as crianças sh
e sleep
no meu status baz.service porque ouvi pessoas de redhat dizer que podman usa um modelo tradicional de fork-exec.
Se o podman fez fork e exec, meu processo sh
e não sleep
seriam filhos do podman e estariam no mesmo cgroup do processo original do podman?
Eu esperava poder usar o systemd e o podman para gerenciar meus contêineres sem que os filhos fossem para um pai diferente e escapassem da minha unidade baz.service ssystemd.
Olhando para a saída de ps
, posso ver isso sh
e sleep
na verdade são filhos de um processo diferente chamado conmon
. Não sei de onde veio o conmon ou como ele foi iniciado, mas o systemd não o capturou.
# ps -Heo user,pid,ppid,comm
# ...
root 17254 1 podman
root 17331 1 conmon
root 17345 17331 sh
root 17380 17345 sleep
A partir da saída, fica claro que minha unidade baz.service não está gerenciando a cadeia de sono conmon -> sh ->.
- Qual a diferença entre o podman e o modelo do servidor cliente docker?
- Como o conmon de podman é diferente do container de docker?
Talvez eles sejam ambos tempos de execução de contêiner e o dockerd
daemon é o que as pessoas querem se livrar.
Talvez o docker seja como:
- daemon dockerd
- docker cli
- tempo de execução do contêiner
E podman é como:
- podman cli
- tempo de execução do contêiner conmon
Então, talvez o podman use um modelo tradicional de exec fork, mas não seja o podman cli que é bifurcado e exec, é o processo de conmon.
Eu me sinto confuso.