当前位置: 首页 > Linux

docker和k8s底层架构的区别

时间:2023-04-07 01:03:37 Linux

结构介绍最开始很多公司像谷歌等厂商都在做容器项目,但是docker容器项目最后活了下来。自从docker统一了容器领域,但由于过度垄断,docker迫于压力,谷歌、CoreOS、Redhat成立了中立基金。Docker被拆分成几个标准化的模块docker-client、dockerd、containerd、docker-shim、runc等,而自己的容器运行时则由LibContainer捐出,更名为RunC。并制定了一套镜像和容器标准规范(OCI)。由于OCI的成立,其他公司可以在不依赖docker的情况下实现自己的dockerruntime。docker-cli:docker的前端,提供docker命令,如dockerrun,dockerbuild等dockerd(dockerdaemon):docker的server端,其实就是docker-client的后台containerd:容器服务,也是docker的核心组件,负责容器的增删改查等操作。containerd之所以是一个单独的服务,没有与dockerd集成,是为了让其他项目可以定义自己的客户端。比如kubernetes通过CRI客户端访问containerdrunc:它是一个命令行工具端,按照OCI(OpenContainerOrganization)标准创建并运行容器,containerd调用runc命令运行镜像。我们容器的核心是容器。最新的k8s绕过了dockerd,直接调用容器减少一层。容器主要负责镜像的拉取和解压,dockerd负责镜像的上传和制作。所以docker的容器和k8s的容器是一样的。所以理论上只要符合OCI规范,任何工具编译出来的镜像都可以被容器拉取编译运行。containerd是一个行业标准的容器运行时。它强调简单性、健壮性和可移植性。它几乎包括在单台机器上运行容器运行时所需的一切:执行、分发、监控、网络、构建、日志记录等。主要功能有:1)、管理容器的生命周期(从创建容器到销毁容器)2)、pull/push容器镜像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(容器运行时接口)