Containerization implementation
概述
参考:
OCI Runtime 规范的实现
参考:
当人们想到容器运行时,可能会想到一连串的相关概念;runc、runv、lxc、lmctfy、Docker(containerd)、rkt、cri-o。每一个都是基于不同的场景而实现的,均实现了不同的功能。如 containerd 和 cri-o,实际均可使用 runc 来运行容器,但其实现了如镜像管理、容器 API 等功能,可以将这些看作是比 runc 具备的更高级的功能。
可以发现,容器运行时是相当复杂的。每个运行时都涵盖了从低级到高级的不同部分,如下图所示

根据功能范围划分,将其分为 Low level Container Runtime(低级容器运行时) 和 High level Container Runtime(高级容器运行时)
- 低级容器运行时 # 只关注容器的本身运行
- 高级容器运行时 # 支持更多高级功能的运行时,如镜像管理及一些 gRPC/Web APIs,通常被称为
需要注意的是,低级运行时和高级运行时有本质区别,各自解决的问题也不同。
低级运行时
低级运行时的功能有限,通常执行运行容器的低级任务。大多数开发者日常工作中不会使用到。其一般指按照 OCI 规范、能够接收可运行 roofs 文件系统和配置文件并运行隔离进程的实现。这种运行时只负责将进程运行在相对隔离的资源空间里,不提供存储实现和网络实现。但是其他实现可以在系统中预设好相关资源,低级容器运行时可通过 config.json 声明加载对应资源。低级运行时的特点是底层、轻量,限制也很一目了然:
- 只认识 rootfs 和 config.json,没有其他镜像能力
- 不提供网络实现
- 不提供持久实现
- 无法跨平台等
RunC
参考:
runc 是一个 CLI 工具,用于根据 OCI 规范生成和运行容器。
youki
参考:
使用 Rust 语言写的,类似于 Runc 的容器运行时,
Sysbox
参考:
Sysbox 是一个新型的 OCI 容器运行时,对标 runc。相比于 runc,Sysbox 在以下两个方面做了增强:
- 增强容器隔离性:Sysbox 为所有容器开启 user namespace(即容器中的 root 用户映射为主机中的普通用户),在容器中隐藏宿主机的信息,锁定容器的初始挂载,等等。
- 容器不仅可以运行普通进程,还可以运行 systemd、Docker、K8s、K3s 等系统级软件,一定程度上可以替换虚拟机。
最初 Sysbox 只支持 Docker,但最新版本 v0.4.0 已支持直接作为 Kubernetes 的 CRI 运行时。
Kata Container
参考:
Kata Containers 是一个开源项目和社区,致力于构建轻量级虚拟机 (vm) 的标准实现,该虚拟机感觉和性能类似于容器,但提供 vm 的工作负载隔离和安全性优势。

高级运行时
高级运行时负责容器镜像的传输和管理,解压镜像,并传递给低级运行时来运行容器。通常情况下,高级运行时提供一个守护程序和一个 API,远程应用程序可以使用它来运行容器并监控它们,它们位于低层运行时或其他高级运行时之上。
高层运行时也会提供一些看似很低级的功能。例如,管理网络命名空间,并允许容器加入另一个容器的网络命名空间。
这里有一个类似逻辑分层图,可以帮助理解这些组件是如何结合在一起工作的。

Docker
Containerd
反馈
此页是否对你有帮助?
Glad to hear it! Please tell us how we can improve.
Sorry to hear that. Please tell us how we can improve.