容器运行时

407 阅读4分钟

容器运行时介绍

容器运行时(Container Runtime)是使容器技术得以运行和实现的基石。它负责运行容器的生命周期管理,使容器可以很轻松的运行、停止、删除。

常见的容器运行时有 Docker Engine、containerd、CRI-O 以及 runc 等。

容器运行时提供了容器基础执行环境和应用隔离机制。它不包含更高级的功能,如编排、网络设置、存储管理等,这些通常由Docker、Kubernetes 等容器平台来实现。

容器运行时至少需要实现 OCI(Open Container Initiative)规范中定义容器运行时规范的API。这使不同的运行时具有一定的兼容性,如同一镜像可以运行在不同运行时,实现可移植性。

常见的容器运行时

Docker Engine

  • Docker 官方运行时,用于运行 Docker 专有格式镜像
  • 适用于本地开发与学习、CI/CD 构建等场景

containerd

  • 容器运行时,来自 Docker 项目
  • 可以直接运行 Docker 专有格式镜像或 OCI 标准格式镜像
  • 用于 Kubernetes 等生产环境,提供更高性能和稳定性

CRI-O

  • 实现了 Kubernetes CRI (Container Runtime Interface)
  • 专注于运行 OCI 标准格式镜像
  • 主要用于 Kubernetes 集群节点,提供 OCI 标准兼容的运行时

runc

  • OCI 标准低级别运行时,可以运行 OCI 标准格式镜像
  • 不提供高级功能如镜像管理、日志等,主要用于被其他运行时调用
  • 用于一些轻量级的容器使用场景,追求最小化资源消耗

Kata Containers

  • 提供轻量级虚拟机类容器,增加隔离性
  • 运行时支持 Kata 专有格式镜像和 OCI 标准格式镜像
  • 用于有强隔离要求的场景,如多租户的云环境

总结来说:

  • Docker Engine 和 containerd 主要用于 Docker 生态和 Kubernetes
  • CRI-O 专注于 Kubernetes 集群,提供 OCI 标准兼容运行时
  • runc 和 Kata 具有更广泛的使用场景,可以提供不同级别的隔离

镜像格式标准

1. OCI 标准格式镜像

  • OCI 标准格式镜像遵循 Open Container Initiative (OCI) 的 Image Specification.
  • 其中定义了镜像的基本内容与结构,包括了需要包含的层、配置信息等。
  • OCI 标准格式的镜像可以由任何实现了 OCI 标准的构建工具或运行时使用。如 buildah、CRI-O 等。 特点:
  • 通用兼容:遵循开放标准,可多种工具/运行时使用
  • 不包含 Docker 专有信息:只包含 OCI 标准定义的必要内容

2. Docker 专用格式镜像

  • Docker 专用格式镜像是 Docker 构建并管理使用的专有格式镜像。
  • 除了 OCI 标准定义的内容外,还包含 Docker 专有的元数据、标签等信息。
  • 只能由 Docker 工具或 Docker 兼容的工具构建与管理。 特点:
  • 仅 Docker 生态可用:需要 Docker 或兼容工具构建/管理
  • 包含 Docker 专有信息:有助于 Docker 操作、优化等

不同容器运行时对镜像的兼容性

  • runc:完全兼容 OCI 规范的容器镜像,像 Docker 镜像、CRI-O 镜像都可以直接使用。
  • Docker Engine:只支持 Docker 镜像格式,不兼容 OCI 规范。
  • containerd:支持 OCI 规范的容器镜像,如 Docker 镜像、CRI-O 镜像。
  • CRI-O:只支持 OCI 规范的容器镜像,像 Docker 镜像可以直接使用,但不支持 Docker 专有的镜像格式。
  • cri-containerd:同 containerd,支持 OCI 规范的容器镜像。
运行时Docker 镜像OCI标准镜像
Docker EngineYesNo
runcNoYes
containerdYesYes
CRI-ONoYes
cri-containerdYesYes

总体来说,runc、containerd、CRI-O、cri-containerd 这些容器运行时都完全支持 OCI 标准的容器镜像,彼此之间可以共享镜像。Docker Engine 由于采用的是 Docker 专有的镜像格式,无法直接使用 OCI 标准的容器镜像。

常用的镜像构建工具与容器运行时组合

OCI 标准格式镜像

  • buildah + runc / containerd / CRI-O
  • kaniko + CRI-O

Docker 专有格式镜像

  • Docker + Docker Engine
  • kaniko + Docker Engine

兼容 Docker 与 OCI 标准格式

  • buildkit + Docker Engine / containerd
  • nerdctl + Docker Engine

其中第一个是镜像构建工具,第二个是容器运行时。