docker基础知识-组件介绍

docker子项目

跟docker密切相关存在下面三个子项目

moby containerd runc
moby https://github.com/moby/moby --github地址
看github上对该项目的介绍:
Moby的核心是组装特定的容器系统的框架。 它提供:

容器系统所有重要方面的组件库:操作系统,容器运行时,编排,基础设施管理,网络,存储,安全,构建,镜像分发等。
将组件组装到各种平台和架构的可运行工件中的工具:裸机(x86和arm); 适用于Linux,Mac和Windows的可执行文件; 流行的云和虚拟化提供商的虚拟机image。
一组参考组件,可以原样使用,修改或用作创建自己的灵感。
所有Moby组件都是容器,因此创建新组件与构建新的OCI兼容容器一样简单。

Moby uses containerd as the default container runtime. —Moby将会使用containered作为默认的容器运行时
关于moby与docker之间的关系,这里就不多讨论了

containered
https://github.com/containerd/containerd –github地址
https://containerd.io  containered资料
https://github.com/docker/containerd/blob/master/design/architecture.md 架构
github上对其的介绍:
containerd是一个行业标准的容器运行时,重点在于简单性,可靠性和便携性。 它可用作Linux和Windows的守护进程,可以管理其主机系统的完整容器生命周期:镜像传输和存储,容器执行和监督,低层次的存储和网络附件等。
containerd旨在嵌入到更大的系统中,而不是由开发人员或最终用户直接使用。

runc
https://github.com/opencontainers/runc
https://www.opencontainers.org/
https://github.com/opencontainers/runtime-spec/blob/master/spec.md
github上对其的介绍
runc是根据OCI规范生成和运行容器的CLI工具。
在docker1.11版本的时候,架构做过一些调整,引入了runC和containerd,使得docker的结构更加的清晰,简单.

Containerd, a daemon to controller runC.

为什么要做将docker拆分成如上组件
将之前的docker daemon的功能打包,提升docker 平台的stability以及Operformance.

实验验证

执行cmd:docker run hello-world

其中,docker-containerd和docker-containerd-shim属于containerd项目,当docker-containerd收到dockerd的启动容器请求之后,会做一些初始化工作,然后启动docker-containerd-shim进程,并将相关配置所在的目录作为参数传给它。可以简单的理解成docker-containerd管理所有本机正在运行的容器,而docker-containerd-shim只负责管理一个运行的容器,相当于是对runc的一个包装,充当containerd和runc之间的桥梁,runc能干的就交给runc来做,runc做不了的就放到这里来做。
另外,docker-containerd-shim进程启动后,就会按照runtime的标准准备好相关运行时环境,然后启动docker-runc进程。docker-runc就是runc程序的重命名.

Notice: docker-runc就是runc程序的重命名,image和runtime标准都是由Open Container initiative(OCI)负责维护,runc是docker贡献给OCI的一个标准runtime实现.

Docker进程

1. Docker(docker daemon)
2. Docker-containerd
3. Docker-containerd-shim
4. Docker-runc

验证验证
执行docker run -d busybox sleep 1000
长驻进程

/usr/bin/dockerd --insecure-registry 172.100.200.208 --raw-logs
docker-containerd -l unix:///var/run/docker/libcontainerd/docker-containerd.sock --shim docker-containerd-shim --metrics-interval=0 --start-timeout 2m --state-dir /var/run/docker/libcontainerd/containerd --runtime docker-runc

针对每个容器会生成的bin可执行程序

docker-containerd-shim 8c1367c17d2e031fd6ba6badc8c9333039af92173a57fd702c4777b603b36c23 /var/run/docker/libcontainerd/8c1367c17d2e031fd6ba6badc8c9333039af92173a57fd702c4777b603b36c23 docker-runc

link:
https://segmentfault.com/a/1190000000448808
http://www.infoq.com/cn/news/2017/02/Docker-Containerd-RunC
http://www.dockerinfo.net/698.html

你可能感兴趣的:(docker)