构造
简介
最开始容器我的项目有很多公司在做像 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)