容器相关概念解释:Docker & containerd & kata 2021-08-16 Docker 暂无评论 2257 次阅读 ##### OCI OCI是由Docker、CoreOS和其他公司与2015年成立的,主要是围绕容器格式和运行时开放的行业标准。如果容器运行时兼容 OCI,则意味着它实现了 OCI 定义的规范:即 image-spc/或 runtime-spec。 ##### CRI 容器运行时接口(CRI)是在Kubernetes 1.5版本中引入的。在此版本之前,kubelet和负责运行容器的运行时耦合在一起。 通过 CRI,Kubernetes 创建了一个明确定义的接口来开发容器运行时。如果某个容器运行时实现了CRI,它就可以与Kubernetes一起使用。 ##### CNI 容器网络接口(CNI)属于CNCF,它定义了如何实现容器之间以及容器与宿主机之间的连接。 ##### Docker Docker发布于2013年,解决了许多开发者在端到端运行容器时遇到的问题。它有以下这些部分: - 容器镜像格式 - 一种用于构建容器镜像的方法(Dockerfile/docker build) - 一种管理容器镜像的方法(docker images, docker rm , etc.) - 一种管理容器实例的方法(docker ps, docker rm , etc.) - 一种共享容器镜像的方法(docker push/pull) - 一种运行容器的方法(docker run) 当时Docker是个庞大的系统,这些特性之间也没有真正的依赖,所以可以通过一种通用的容器标准,使得每种工具可以协同工作。正因如此,Docker、Google、CoreOS和其他厂商创建了开放容器协议(OCI)。然后将运行容器的代码分解为一个叫runc的工具和库,并将其捐赠给了OCI作为OCI运行时规范的参考实现。 随着Docker等公司推动标准化工作,Docker生态系统发生了变化。某些功能被分离并外包到独立的项目中:Containerd成为了新的管理镜像的high-level的守护进程,runc作为新的low-level的容器运行时。现在使用Docker,实际上是由Docker守护进程调用containerd,而containerd又会调用runc。 ![docker_vs_containerd.png](/usr/uploads/2021/08/2432957420.png) Containerd和cri-o其实使用runc来运行容器,但在上层管理镜像和api,与low-level的runc比,这些镜像传输、镜像管理、镜像解压被视为高级特性。所以只关注运行容器的容器运行时一般称作low-level container runtimes,支持镜像管理和api的运行时被称为high-level container runtimes。 ##### Containerd Containerd是一个独立的高级容器运行时,能够推送和拉取镜像,管理存储和定义网络功能。它也能通过调用runc实现管理容器的生命周期时。 ##### runc runc是OCI规范的一个参考实现,runc起源于Docker项目(以前叫做libcontainer),后来被捐赠给OCI。runc只关注管理容器运行,所以是个low-level container runtimes。它使用namespaces和cgroups来提供隔离。可以通过docker export命令拿到OCI容器镜像后,就可以在本地使用runc而不是Docker来运行镜像。 ##### kata kata容器也兼容了OCI,有自己的kata container runtime (runv),每个容器都是是轻量级虚拟机,拥有自己的内核。 Kata容器结合了来自Intel Clear Containers和Hyper runV的技术,使得容器拥有虚拟机般的安全性。 Kata container runtime 符合 OCI 运行时规范 因此能够被Docker引擎管理,作为Docker引擎的一个runtime插件。 Kata container runtime 还基于Containerd的CRI插件与CRI-O实现了Kubernetes的CRI规范,因此,使用者可以在Docker默认的runtime runc 与 kata container runtime (runv) 之间平滑切换,上层组件不感知差异。 ![docker-kata.png](/usr/uploads/2021/08/1112011861.png) 打赏: 微信, 支付宝 标签: Docker 本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。本站myrat.top所有文章均为原创,转载请注明出处。