云原生安全:攻防实践与体系构建
上QQ阅读APP看书,第一时间看更新

2.1.5 容器运行时

容器运行时负责管理容器运行的整个生命周期,包括但不限于指定容器镜像格式、构建镜像、上传和拉取镜像、管理镜像、管理容器实例、运行容器等。在容器技术发展早期,Docker作为容器运行时的标准被广为使用,而后由Google、CoreOS、Docker等公司在2015年联合创建了开放容器标准(Open Container Initiative,OCI)[1],用于推进容器标准化,其主要包含两个标准,分别为容器运行时标准[2]和容器镜像标准[3],OCI的容器运行时主要包括runC、Rocket、Kata Containers、gVisor等。再后来随着容器编排技术的不断发展,处于行业翘楚的Kubernetes推出了容器运行时接口(Container Runtime Interface,CRI),用于与容器运行时进行通信,进而操作容器化应用程序,从Kubernetes官方文档[4]中我们可以看到,当前支持的CRI运行时包括Docker、Containerd、CRI-O。需要注意的是虽然Docker被作为CRI运行时,但其自身并不符合Kubernetes的CRI标准,只是在早期Docker被作为主流运行时(Containerd、CRI-O相对出现较晚),因而被Kubernetes采用并通过维护中间件的形式来调用。从Kubernetes的长远发展来看,这并非明智之举,Kubernetes也对此进行了声明[5],建议用户评估并迁移至CRI支持更完善的运行时上,如Containerd、CRI-O等。

从容器运行时的发展历程来看,容器和Docker这两个经常被混淆使用的词的边界将会愈发清晰,未来容器的构建、管理将会更倾向于使用各自领域的工具来实现,各司其职。

以上我们对容器技术进行了简单介绍,限于篇幅,更多容器技术的详细内容可通过本书的Github仓库进行查看。

[1] https://github.com/opencontainers。

[2] https://github.com/opencontainers/runtime-spec。

[3] https://github.com/opencontainers/image-spec。

[4] https://kubernetes.io/zh/docs/setup/production-environment/container-runtimes/。

[5] https://github.com/kubernetes/kubernetes/blob/master/CHANGELOG/CHANGELOG-1.20.md。