Skip to content

运行时与工具边界

容器生态里很多名字都能“运行容器”,但它们的层级不同。Docker 更像面向开发者的完整工具链,containerd 和 CRI-O 更像运行时,runc 和 crun 更靠近内核隔离执行,Kubernetes 是部署和编排平台,Colima 是本地环境工具。

分层关系

角色典型项目主要职责
用户工具Docker CLI、Podman CLI提供命令行、构建、运行、日志、网络、卷等操作入口
高层运行时Docker Engine、containerd、CRI-O管理镜像、容器生命周期、快照、拉取和运行请求
低层运行时runc、crun根据 OCI runtime spec 创建容器进程
编排平台Kubernetes调度 Pod、维护副本、服务发现、滚动发布和自愈
本地环境工具Colima、Docker Desktop、Rancher Desktop在开发机上准备 Linux VM、运行时和可选 Kubernetes

Docker

Docker 是开发者最常接触的容器工具链。它提供 Dockerfile 构建、镜像管理、容器运行、网络、卷、日志和 Compose 等能力。它适合本地开发、单机部署、镜像构建和快速验证。

Docker 的价值在于把很多底层能力包装成一致的开发体验,但它不是容器技术本身。生产 Kubernetes 集群可以使用 Docker 构建镜像,却不一定用 Docker Engine 运行容器。

containerd

containerd 是从 Docker 中拆分出来的高层容器运行时,专注镜像拉取、镜像存储、容器生命周期、快照和运行时调用。很多 Kubernetes 集群会直接使用 containerd 作为节点运行时。

containerd 通常不是普通开发者日常操作入口,但它是理解 Kubernetes 节点运行容器的重要组件。

CRI-O

CRI-O 是面向 Kubernetes CRI 的运行时实现,目标是为 Kubernetes 提供必要的容器运行能力。它不像 Docker 那样提供完整开发者工作流,而是更聚焦集群节点运行时。

runc 与 crun

runc 和 crun 属于低层 OCI runtime。高层运行时会调用它们来真正创建 Linux namespace、配置 cgroup、挂载文件系统并启动容器进程。

日常使用中很少直接操作 runc,但当排查底层运行时、容器逃逸防护、cgroup 或 seccomp/AppArmor 配置时,需要知道它的位置。

Podman

Podman 是无守护进程的容器工具,命令体验与 Docker 接近,并强调 rootless 模式。它适合希望减少常驻 daemon、增强本地安全边界或在某些 Linux 发行版生态中替代 Docker 的场景。

Kubernetes

Kubernetes 不是容器运行时,也不是镜像构建工具。它是容器应用的部署和编排框架。它通过 kubelet 调用 CRI 运行时,运行时再调用低层运行时启动容器。

在 Kubernetes 中,最重要的操作对象不是单个容器,而是 Pod、Deployment、Service、Ingress、ConfigMap、Secret、PVC 等资源。

Colima

Colima 是 macOS 上的本地容器环境工具。macOS 不能直接使用 Linux 容器内核能力,所以 Colima 通过 Lima 创建 Linux 虚拟机,在虚拟机里运行 containerd 或 Docker,并可选择启用 Kubernetes。

Colima 不属于容器标准,也不是编排框架。它的定位是“让开发机更方便地使用容器生态”。

选型判断

需求优先看
本地构建和运行镜像Docker、Podman、Colima
Kubernetes 节点运行时containerd、CRI-O
容器底层隔离实现runc、crun
多节点部署、服务发现、滚动发布Kubernetes
macOS 上轻量使用 Docker/KubernetesColima
别急,先让缓存热一下。