Kubernetes (K8s) 与 Docker 的区别
Docker — 容器引擎
Docker 负责创建和运行单个容器,是容器化技术的基础工具。
| 能力 | 说明 |
|---|
| 镜像构建 | docker build打包应用 + 依赖为镜像 |
| 容器运行 | docker run启动单个容器 |
| 单机管理 | 在一台机器上管理容器生命周期 |
| 适用场景 | 开发、调试、单节点部署 |
Kubernetes (K8s) — 容器编排平台
K8s 负责管理大规模集群中的容器,解决多机器协作问题。
| 能力 | 说明 |
|---|
| 集群编排 | 跨多台机器调度容器,自动分配到合适的节点 |
| 自动扩缩容 | 根据流量自动增减 Pod 数量 |
| 自愈恢复 | 容器/节点故障时自动重启或迁移 |
| 服务发现/负载均衡 | 自动分配 IP,对外提供统一入口 |
| 滚动更新 | 零停机部署新版本 |
| 适用场景 | 生产环境、多节点、大规模服务 |
类比理解
| 类比 | Docker | Kubernetes |
|---|
| 餐厅 | 厨师做一道菜 | 经理协调整个厨房 |
| 交通 | 一辆车的发动机 | 城市交通调度系统 |
| 问题 | “怎么跑一个容器?” | “怎么跑 1000 个容器?” |
关系
┌─────────────────────────────────────────┐ │ Kubernetes (K8s) │ │ ┌───────────┐ ┌───────────┐ ┌─────┐ │ │ │ Node 1 │ │ Node 2 │ │ ... │ │ │ │ ┌───────┐ │ │ ┌───────┐ │ │ │ │ │ │ │ Docker│ │ │ │ Docker│ │ │ │ │ │ │ │ (容器) │ │ │ │ (容器) │ │ │ │ │ │ │ └───────┘ │ │ └───────┘ │ │ │ │ │ └───────────┘ └───────────┘ └─────┘ │ └─────────────────────────────────────────┘
- Docker 是底层运行时,负责跑容器
- K8s 是上层编排器,调用 Docker(或其他容器运行时)来管理集群
- K8s 1.24 之后默认使用
containerd替代 Docker 作为运行时,但docker build仍可用于构建镜像
什么时候用什么
| 场景 | 选择 |
|---|
| 本地开发、测试 | Docker |
| 单个服务器部署 | Docker + Docker Compose |
| 生产环境,多节点 | Kubernetes |
| 需要自动扩缩容、自愈 | Kubernetes |