Docker存储引擎和服务进程
三、docker 存储引擎目前docker的默认存储引擎为overlay2,不同的存储引擎需要相应的系统支持,如需要磁盘分区的时候传递d-type文件分层功能,即需要传递内核参数开启格式化磁盘的时候的指定功能。支持d-type的功能的参数是 ftype=1历史更新信息:https://github.com/moby/moby/blob/master/CHANGELOG.md官方文档关于存储引擎的选
·
四 docker 服务进程
通过查看 docker 进程,了解docker的运行及工作方式
4.1 containerd 进程关系
有四个进程:
1> dockerd:被client(docker命令)直接访问,其父进程为宿主机的 systemd 守护进程。
2> docker-proxy:实现容器通信,生成iptables规则,其父进程为dockerd
有多少个容器就会有多少个docker-prox子进程,每个docker-proxy只为当前自己维护的容器来处理网络通信(管理iptables规则)
3> containerd:被dockerd进程调用以实现与runc交互。
在docker的启动文件中有一个sock文件,这个sock文件就是containerd的本机的sock文件,
dockerd是基于这个sock文件调用的containerd服务以实现和runc的交互,创建容器等等
containerd本身是一个单独的服务.但是他并不对外直接提供服务,而是由dockerd调用,
docker命令调用dockerd服务,dockerd服务再用containerd来创建容器
4> containerd-shim:真正运行容器的载体,其父进程为containerd。
每起一个容器就会生成一个containerd-shim进程,进程中就会包装容器运行的目录结构或者说运行空间
4.2 containerd-shim 命令使用:
containerd-shim 命令也可以用来创建容器
容器的创建是由dockerd来调用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
4.3 容器的创建与管理过程:
通信流程:
1.dockerd通过grpc和containerd模块通信,通信目录的是为了实现runc的运行空间交换
dockerd和containerd通信的socket文件:/run/containerd/containerd.sock。
dockerd在启动的时候会通过containerd.sock文件调用containerd,containerd再调用runc,通过runc创建和管理容器
2.containerd在dockerd启动时被启动,然后containerd启动grpc请求监听,containerd处理grpc请求,根据请求做相应动作。
/usr/bin/dockerd -H fd://
--containerd=/run/containerd/containerd.sock
grpc: google开发的一款中立、开源的远程过程调用(RPC)系统,各个组件之间通过API相互调用的一个方式
3.若是创建容器,containerd拉起一个container-shim容器进程,并进行相应的创建操作(对容器进行初始化)。
4.container-shim被拉起后,start/exec/create拉起runC进程,通过exit、control文件和containerd通信,
通过父子进程关系和 SIGCHLD(信号)监控容器中进程状态。
5.在整个容器生命周期中,containerd通过epoll监控容器文件,监控容器事件。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QKEuyUix-1638600416326)(D:/%E6%8A%80%E6%9C%AF%E4%B9%A6%E7%B1%8D/K8s%E7%AC%94%E8%AE%B0/docker%E5%9F%BA%E7%A1%80/docker-image/docker-containerd.png)]
创建容器和访问容器都是先访问到dockerd,然后dockerd通过GRPC发送request请求给containerd(发送给containerd.sock文件,本地调用)
然后containerd收到以后,处理request请求,不同的消息会有不同的处理方式,如果要创建容器或者启动容器,他会调用shim进程。
然后拉起一个容器,拉起容器以后就会创建一个containerd-shim的进程,再调用runc进程,执行create/start/ex rc,将容器创建起来,成为容器以后,再将创建的结果,一步一步返回回来,这样容器就创建成功了
如果结果是发送respose返回回来的,要执行一些操作,containerd要和runc进行交互,然后再返回给dockerd
4.4 grpc 简介:
gRPC是Google开发的一款高性能、开源和通用的RPC框架,支持众多语言客户端。
官网地址:
https://www.grpc.io/
更多推荐
已为社区贡献1条内容
所有评论(0)