Podman đã cho được cài đặt trên hệ thống linux và đơn vị systemd có tên 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
Và baz.service bắt đầu:
# systemctl daemon-reload
# systemctl start baz.service
Sau đó, khi tôi kiểm tra trạng thái của đơn vị, tôi không thấy sh
hoặc sleep
xử lý trong nhóm /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
# ...
Tôi đã mong đợi được nhìn thấy sh
và sleep
trẻ em trong tình trạng baz.service của mình vì tôi đã nghe những người từ redhat nói rằng podman sử dụng mô hình fork-exec truyền thống.
Nếu podman thực hiện fork và exec, thì tôi sh
và sleep
process sẽ không phải là con của podman và ở cùng nhóm với quy trình podman ban đầu?
Tôi đã mong đợi có thể sử dụng systemd và podman để có thể quản lý các container của mình mà không cần con cái đi đến một phụ huynh khác và thoát khỏi đơn vị ssystemd baz.service của tôi.
Nhìn vào đầu ra của ps
tôi có thể thấy điều đó sh
và sleep
thực sự là con của một quá trình khác được gọi là conmon
. Tôi không chắc conmon đến từ đâu, hoặc nó đã được bắt đầu như thế nào nhưng systemd đã không nắm bắt được nó.
# ps -Heo user,pid,ppid,comm
# ...
root 17254 1 podman
root 17331 1 conmon
root 17345 17331 sh
root 17380 17345 sleep
Từ đầu ra, rõ ràng đơn vị baz.service của tôi không quản lý conmon -> sh -> chuỗi ngủ.
- Podman khác với mô hình máy chủ docker như thế nào?
- Conmon của podman khác với container của docker như thế nào?
Có lẽ cả hai đều là thời gian chạy của container và dockerd
daemon là thứ mà mọi người muốn loại bỏ.
Vì vậy, có thể docker giống như:
- daemon bến tàu
- bến tàu
- thời gian chạy container container
Và podman giống như:
- podman cli
- thời gian chạy container conmon
Vì vậy, có thể podman sử dụng mô hình fork thực hiện truyền thống nhưng đó không phải là podman cli đang giả mạo và thực thi, đó là quá trình conmon.
Tôi cảm thấy bối rối.