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/