我们都知道,容器技术其实在很久以前就已经出现,但只是在最近十年由于云计算的发展才逐渐进入大众的视野。对于容器运行时,传统意义上来说就是代表容器从拉取镜像到启动运行再到中止的整个生命周期,较类似于 Java 中的 Java hotspot 运行时。在本文中我会介绍容器运行时相关概念及组件原理,梳理下我们常听到的 OCI、runc、containerd 等名词之间的关系。
何为容器运行时
容器运行时顾名思义就是要掌控容器运行的整个生命周期,以 docker 为例,其作为一个整体的系统,主要提供的功能如下:
- 制定容器镜像格式
- 构建容器镜像
docker build
- 管理容器镜像
docker images
- 管理容器实例
docker ps
- 运行容器
docker run
- 实现容器镜像共享
docker pull/push
然而这些功能均可由小的组件单独实现,且没有相互依赖。而后 Docker 公司与 CoreOS 和 Google 共同创建了 OCI (Open Container Initial),并提供了两种规范:
- 运行时规范(https://github.com/opencontainers/runtime-spec)
描述如何运行filesystem bundle
- 镜像规范(https://github.com/opencontainers/image-spec)
制定镜像格式、操作等
filesystem bundle(文件系统束): 定义了一种将容器编码为文件系统束的格式,即以某种方式组织的一组文