1、容器运行时,传统意义上来说就是代表容器从拉取镜像到启动运行再到中止的整个生命周期
2、OCI标准:
Docker 公司与 CoreOS 和 Google 共同创建了 OCI (Open Container Initial),并提供了两种规范:
- 运行时规范(https://github.com/opencontainers/runtime-spec)
描述如何运行filesystem bundle
- 镜像规范(https://github.com/opencontainers/image-spec)
制定镜像格式、操作等
3、docker和runC的关系
runC是一个根据OCI标准创建并运行容器的命令行工具(CLI tool)。
Docker就是基于runC创建的,简单地说,runC就是docker中最为核心的部分,容器的创建,运行,销毁等等操作最终都将通过调用runc完成。而runC也有自己的客户端,后来被提取出来作为一个单独的工具和库。其实现了 OCI 规范,包含config.json文件和容器的根文件系统。
如何用runC,以最精简的方式创建并运行一个容器:
(https://blog.csdn.net/weixin_30883271/article/details/97419299)。
Docker、Google等公司开源了用于运行容器的工具和库 runc,在此之后,各种运行时工具和库也慢慢出现,例如 rkt、containerd、cri-o 等,然而这些工具所拥有的功能却不尽相同,有的只有运行容器(runc、lxc),而有的除此之外也可以对镜像进行管理(containerd、cri-o)。
4、容器运行时分类: low-level 和 high-level 两类
low-level runtime
low-level runtime :关注如何与操作系统交互,创建并运行容器,使用 namespace 和 cgroup 实现资源隔离和限制。
目前常见的 low-level runtime有:
- lmctfy -- 是Google的一个项目,它是Borg使用的容器运行时
- runc -- 目前使用最广泛的容器运行时。
- rkt -- CoreOS开发的Docker/runc的一个流行替代方案,提供了其他 low-level runtimes (如runc)所提供的所有特性。
high-level runtime
high-level: 指包含了更多上层功能,例如 grpc调用,镜像存储管理等。
High-level runtimes相较于low-level runtimes位于堆栈的上层。low-level runtimes负责实际运行容器,而High-level runtimes负责传输和管理容器镜像,解压镜像,并传递给low-level runtimes来运行容器。目前主流的 high-level runtime 有:
- docker
- containerd
- rkt