Docker 与 Kubernetes 对比:不是竞争而是分工
Docker 提供容器构建与运行工具,Kubernetes 是容器编排平台——两者解决不同层的问题且协同工作。本文讲清各自定位、优劣、协作方式与选型时机。
直接回答:"Docker vs Kubernetes" 是常见误解——两者不是同类竞品:Docker 把应用打包成容器并在单机运行;Kubernetes 在集群规模下调度管理这些容器(K8s 使用兼容 CRI 的运行时,例如 containerd 或 CRI-O,但仍运行 OCI 标准容器)。真实问题是"单机 Docker 够不够用,何时需要 K8s 编排"。
各自定位
Docker:容器化的打包、分发、单机运行——镜像、Dockerfile、docker run/compose。让"在我机器上能跑"成为历史。
Kubernetes:跨节点集群的容器编排——调度、自愈、弹性伸缩、服务发现、滚动发布。管理"成百上千容器在几十台机器上"的复杂度。
优势与局限
| Docker | Kubernetes | |
|---|---|---|
| 优势 | 简单、普及、开发体验好 | 弹性、自愈、生态繁荣 |
| 局限 | 单机 Engine 不能独自提供跨节点编排,需 Swarm 等组件 | 复杂度与运维成本高 |
协同关系
典型流水线:Docker 构建镜像 → 推送镜像仓库 → K8s 拉镜像调度运行。K8s 1.24 移除了内置 dockershim,并非强制只能使用 containerd;containerd、CRI-O 等通过 CRI 接入。Docker 构建的兼容 OCI 镜像仍可运行,镜像格式与运行时接口是两件事。
何时用哪个
- 开发环境、单机部署、小项目:Docker + Compose 就够
- 多节点、弹性伸缩、高可用生产:K8s(优先托管发行版)
- 中间态:Docker Swarm 或 k3s
常见问题(FAQ)
Q:K8s 不用 Docker 了,还要学 Docker 吗?
A:要——镜像构建与容器工具仍值得学习,但容器与 OCI 标准不由 Docker 独占。移除 dockershim 不影响兼容镜像的运行。
Q:Docker Desktop 自带的 K8s 能用于生产吗?
A:不能——它是本地学习/开发环境。生产用云托管(ACK/TKE/EKS)或自建集群。
Q:小团队微服务架构必须上 K8s 吗?
A:不必须。服务数量个位数、无弹性需求时 Compose/Swarm 的运维成本远低于 K8s——架构选型匹配规模,不追潮流。
官方参考
本文依据官方文档整理,示例未在本文中进行运行验证。生产部署需按所用版本、权限和实际负载验证。