TL;DR
Docker 负责「打包和运行单个容器」,Kubernetes 负责「大规模管理成千上万个容器」。两者是互补关系:K8s 调度容器,而容器通常由 containerd 等运行时承载。
核心要点
- Docker:镜像(Image)构建 + 容器(Container)运行 + Dockerfile 定义环境;解决「在我机器上能跑」的移植问题;
- Kubernetes:容器编排平台,提供调度、伸缩、自愈、服务发现、滚动更新、配置与存储管理;
- 关系:K8s 不直接运行 Docker 引擎,而是通过 CRI 运行时(默认 containerd)运行符合 OCI 标准的容器镜像;Docker 构建的镜像可直接被 K8s 使用;
- 什么时候需要 K8s:多服务、多副本、需要自动伸缩和自愈的生产系统;单机小项目用 Docker Compose 足够。
常见误区
- 「K8s 取代 Docker」不对:两者解决不同层级的问题;
- 「上 K8s 一定更好」不对:K8s 有显著运维成本,小项目反而拖慢交付。
来源
- docs.docker.com
- kubernetes.io 官方文档
- OCI(Open Container Initiative)规范