Docker服務進程關系
宿主機進程關系
注意:此圖片適用於18.09.X版本;如果是18.06之前版本,containerd的父進程不再是systemd,而是dockerd;名字為docker-containe。
containerd進程關系
containerd進程關系 | |
---|---|
dockerd | 被client直接訪問,其附近成為宿主機的systemd守護進程 |
docker-proxy | 實現容器通信,維護生成iptables規則,父進程為dockerd |
containerd | 被dockerd進程調用以實現與runc交互 |
containerd-shim | 真正運行容器的載體,其父進程為containerd |
containerd-shim命令
~]# containerd-shim -h
Usage of containerd-shim:
-address string
grpc address back to main containerd
-containerd-binary containerd publish
path to containerd binary (used for containerd publish) (default "containerd")
-criu string
path to criu binary
-debug
enable debug output in logs
-namespace string
namespace that owns the shim
-runtime-root string
root directory for the runtime (default "/run/containerd/runc")
-socket string
abstract socket path to serve
-systemd-cgroup
set runtime to use systemd-cgroup
-workdir string
path used to storge large temporary data
容器的創建於管理過程通信流程
- docker通過grpc和containerd模塊通信(runc)交換,dockerd和containerd通信的socker文件:
/run/containerd/containerd.sock
- containerd在dockerd啟動時被啟動,然后containerd啟動grpc請求監聽,containerd處理grpc請求,根據請求做相應動作。
- 若是創建容器,containerd拉起一個container-shim容器進程,並進行相應的創建操作。
- container-shim被拉起后,start/exec/create拉起runC進程,通過exit、control文件和containerd通信,通過父子進程關系和SIGCHLD(信號)監控容器中進程狀態。
- 在整個容器生命周期中,containerd通過epoll監控容器文件,監控容器事件。
grpc
gRPC是Google開發的一塊高性能、開源和通用的RPC框架,支持眾多語言客戶端
https://www.grpc.io/