其实 Kubernetes 只是弃用了 dockershim,并不是弃用了 Docker 的全部。Docker 体系中的 containerd 是符合 CRI 标准的,可以继续作为 Kubernetes 的容器运行时。而 OCI标准的实现者 runC 也是 Docker 体系的。
另一方面,Docker 构建的镜像符合 OCI 标准,可以运行在 Kubernetes 集群中,所以仍然可以在本地使用 Docker 进行开发和测试。
2.1 OCI 和 CRI 标准分别是什么?
OCI(Open Container Initiative)是一组围绕容器技术的开放标准和规范,主要定义了容器的生命周期管理规范。
OCI 的实现者通常被称为“低级容器运行时”,例如 runC。低级运行时的主要功能是按照给定的容器文件系统和 JSON 配置文件,创建容器,并管理容器的生命周期。
CRI(Container Runtime Interface)是一组插件接口,定义了 Kubernetes(kubelet)与容器运行时的接口规范,实现两者之间的解耦。
通过 CRI 与 Kubernetes 交互的运行时通常被称为“高级容器运行时”。高级运行时的功能是为容器准备必要的运行环境,比如拉取镜像、解压镜像并创建容器文件系统、创建容器网络等,然后调用低级容器运行时,创建和运行容器。