TL;DR
Docker 是单机容器运行时,负责把应用打包成镜像并运行;Kubernetes(K8s)是跨多台机器的容器编排系统,负责调度、伸缩、自愈、服务发现和滚动发布。单机或小项目用 Docker Compose 就够;需要多机高可用、自动扩缩、故障自愈时才上 K8s。
核心对比
| 维度 | Docker | Kubernetes |
|---|---|---|
| 定位 | 容器运行时 | 容器编排平台 |
| 作用范围 | 单台机器 | 一个集群(多台机器) |
| 打包 | Dockerfile → 镜像 | 复用镜像,定义 Pod/Deployment |
| 自动扩缩 | 无(Compose 也不支持) | 支持 HPA 按 CPU/自定义指标扩缩 |
| 故障自愈 | 无 | 自动重启/重新调度故障 Pod |
| 服务发现/负载均衡 | 手动映射端口 | Service + Ingress + DNS |
| 滚动发布/回滚 | 手动 | 内置 rollout 与回滚 |
| 学习成本 | 低 | 高(网络、存储、RBAC 都要学) |
| 适用场景 | 本地开发、单机部署、小项目 | 生产集群、微服务、多团队 |
什么时候用哪个
- 本地开发、个人项目、单台 VPS:Docker + Docker Compose;
- 需要多个服务互相依赖、一条命令起停:Compose;
- 需要多机、高可用、自动扩缩、零停机发布:K8s;
- 不想自己运维 K8s:用托管 K8s(EKS/GKE/ACK)或 k3s 等轻量发行版。
常见问题
Docker 和 Kubernetes 是替代关系吗?
不是。Docker 负责"跑容器",K8s 负责"编排容器",K8s 的节点上仍要用容器运行时(如 containerd)来跑容器。
Docker Compose 和 Kubernetes 有什么区别?
Compose 是单机多容器编排(一个 docker-compose.yml 起停一组服务),没有自动扩缩、自愈和跨节点调度;K8s 把这些能力扩展到整个集群。
学习 Kubernetes 至少要几台机器?
学习可以用 minikube 或 k3s 单机跑;生产高可用集群通常建议 3 个控制平面节点 + 至少 2 个工作节点,控制面用奇数节点保证 etcd 多数派。
来源
- Docker 官方文档(docs.docker.com),2026-08-04 访问
- Kubernetes 官方文档(kubernetes.io/docs),2026-08-04 访问