Docker引擎:由Docker Client、Docker Daemon、containerd、shim和runc组成,结构为从上到下,层级调用。
Docker Daemon:主要功能包括镜像管理、镜像构建、 REST API、身份验证、安全、核心网络以及编排(看不懂没关系)。使用CRUD(创建、读取、更新和删除)的API,通过gRPC与containerd通信。
containerd:管理容器的生命周期(start|stop|pause|rm),位于Docker Daemon和runc之间(中间层),将image转换为OCI bundle。
shim的部分职责:
保持所有STDIN和STDOUT流是开启的状态,使得当daemon重启的时候,容器不会因为管道(pipe)的关闭而终止。
将容器的退出状态反馈给daemon。
runc:
OCI容器运行时标准的参考实现,唯一作用为创建容器,位于OCI层。
与操作系统内核接口进行通信,基于所有必要的工具(Namespace、CGroup等)来创建容器,容器运行时以进程形式存在,且runc进程是容器进程的父进程,runc在容器进程启动完毕时退出,由shim接管成为容器进程的父进程。
Docker引擎优点:将整个引擎分为4部分,各部分负责单一职责,实现了程序解耦,如对Daemon的升级不会影响到正在运行的容器,因为此时容器作为单独的进程存在,且由containerd管理生命周期(runc启动后就退出,由containerd-shim接管)。
Docker引擎——深入浅出Docker读书笔记(2)
于 2022-03-24 14:36:20 首次发布