构造
简介
最开始容器我的项目有很多公司在做像 Google 和其余厂商,然而就 docker 的容器我的项目最终成活下来, docker 自从对立了容器畛域,然而因为过垄断, docker 迫于压力由Google , CoreOS , Redhat成立一个中立基金,,docker当年的被拆分出了几个标准化的模块 docker-client ,dockerd,containerd,docker-shim,runc 等,本人的容器运行时LibContainer捐出,改名为RunC. 并制订了一套镜像和容器的规范和标准( OCI ).因为 OCI 的成立.让其余公司能够不依赖与 docker 来实现本人的docker 运行时。
- docker-cli: docker的前端,提供docker 命令,如docker run 、docker build等
- dockerd(docker daemon):docker的服务端,其实就是docker-client的后盾
- containerd:容器服务,这也是docker的外围组件,负责容器的增删改等操作,这里containerd之所以作为一个独自的服务,而没有和dockerd集成到一块,是为了让其余的我的项目能够定义本人的客户端,比方kubernetes通过CRI客户端来拜访containerd
runc:是一个命令行工具端,他依据oci(凋谢容器组织)的规范来创立和运行容器,containerd会调用runc命令来运行镜像。
container
咱们外围的是 container, 最新k8s 绕过dockerd 间接调用 container 缩小了一层, container 次要负责的是拉取和解压镜像, 上传和制作镜像是由 dockerd来负责的. 所以docker 的 container 与 k8s 的 container 是同一个.所以实践上,只有满足 OCI 的标准.无论是什么工具编译的镜像都能被 container 拉取、编译与运行。containerd是一个工业级别规范的容器运行时,它强调简略性、健壮性和可移植性,简直囊括了单机运行一个容器运行时所须要的所有:执行、散发、监控、网络、构建、日志等。次要作用是:
1)、治理容器的生命周期(从创立容器到销毁容器)
2)、拉取/推送容器镜像
3)、存储管理(治理镜像及容器数据的存储)
4)、调用runC运行容器(与runC等容器运行时交互)
5)、治理容器网络接口及网络dockerd理论实在调用的还是containerd的api接口,containerd是dockerd和runC之间的一个两头交换组件。 docker 镜像和 containerd 镜像通用。但组织形式和寄存目录不同,导致docker与ctr命令不通用,各自治理本人的镜像和容器。此外k8s还有客户端命令crictl,用法与docker基本相同,可crictl -h查看用法。
参考资料
- docker 与 k8s 的爱恨情仇
- k8s 弃用docker--Docker、containerd的关系
- K8s 集群内 containerd 、 docker 的区别
- CRI (container runtime interface)