Kubernetes vs Docker
学习目标
- 理解 Docker 和 Kubernetes 的定位差异
- 了解两者如何协同工作
- 掌握何时使用 Docker,何时使用 Kubernetes
核心概念
定位差异
Docker:
┌─────────────────────────────────────┐
│ 构建 (Build) → 运输 (Ship) → 运行 (Run) │
│ 专注于:单机容器生命周期管理 │
└─────────────────────────────────────┘
Kubernetes:
┌─────────────────────────────────────┐
│ 调度 (Schedule) → 编排 (Orchestrate) → 管理 (Manage) │
│ 专注于:集群级容器编排和管理 │
└─────────────────────────────────────┘
技术栈对比
| 层级 | Docker 生态 | Kubernetes 生态 |
|---|---|---|
| 容器运行时 | Docker Engine | containerd, CRI-O |
| 镜像格式 | Docker Image | OCI Image (兼容) |
| 编排工具 | Docker Compose, Swarm | Kubernetes |
| 网络 | Docker Network | CNI 插件 |
| 存储 | Docker Volume | CSI 插件 |
互补关系
开发者视角:
┌─────────────────────────────────────────────┐
│ Docker 负责 │
│ • 编写 Dockerfile │
│ • 构建镜像 │
│ • 本地测试 │
└─────────────────────────────────────────────┘
↓
┌─────────────────────────────────────────────┐
│ Kubernetes 负责 │
│ • 部署到集群 │
│ • 自动扩缩容 │
│ • 服务发现和负载均衡 │
│ • 滚动更新和回滚 │
└─────────────────────────────────────────────┘
Docker Compose vs Kubernetes
| 特性 | Docker Compose | Kubernetes |
|---|---|---|
| 适用场景 | 开发/测试 | 生产环境 |
| 部署范围 | 单机 | 集群 |
| 扩展能力 | 有限 | 强大 |
| 高可用 | 无 | 内置 |
| 学习曲线 | 简单 | 陡峭 |
| 配置格式 | YAML | YAML |
典型工作流
开发阶段:
Dockerfile → docker build → docker run
↓
本地测试:
docker-compose up
↓
生产部署:
kubectl apply -f deployment.yaml
↓
Kubernetes 集群管理
Docker Swarm vs Kubernetes
| 特性 | Docker Swarm | Kubernetes |
|---|---|---|
| 复杂度 | 简单 | 复杂 |
| 功能 | 基础 | 丰富 |
| 生态 | Docker 原生 | 广泛 |
| 扩展性 | 有限 | 强大 |
| 市场份额 | 少 | 主流 |
2020 年后的变化
重要事件:
2020.12 - Kubernetes 1.20 弃用 Docker 作为运行时
2022.04 - Kubernetes 1.24 移除 dockershim
原因:
• Docker 不是唯一的容器运行时
• Kubernetes 使用 CRI (Container Runtime Interface)
• containerd 和 CRI-O 更轻量
实际影响:
• Docker 构建的镜像仍然可用 (OCI 标准)
• 开发者仍然使用 Docker 构建镜像
• 生产环境使用 containerd/CRI-O 运行
实践练习
练习 1:理解定位
回答以下问题:
- Docker 和 Kubernetes 的核心定位有什么不同?
- 为什么说两者是互补关系而非替代关系?
- Kubernetes 为什么弃用 Docker 作为容器运行时?
练习 2:场景选择
为以下场景选择合适的工具:
- 本地开发和测试一个多服务应用
- 部署一个需要高可用的生产应用
- 快速原型开发和验证
- 管理数百个微服务
练习 3:技术栈对比
画出 Docker 和 Kubernetes 的技术栈对比图,包括:
- 容器运行时
- 镜像格式
- 网络方案
- 存储方案
常见误解
1. "Kubernetes 替代了 Docker"
错误理解:Kubernetes 出现后 Docker 过时了
正确理解:
• Docker 用于构建和运行容器
• Kubernetes 用于编排和管理容器
• 两者在不同层面工作
2. "必须二选一"
错误理解:选择 Kubernetes 就不能用 Docker
正确理解:
• 开发时用 Docker 构建镜像
• 部署时用 Kubernetes 管理集群
• 两者配合使用
3. "Docker Swarm 已死"
过于绝对:
• Docker Swarm 仍在维护
• 适合简单场景
• 只是市场份额小
小结
| 要点 | 说明 |
|---|---|
| Docker 定位 | 单机容器构建和运行 |
| Kubernetes 定位 | 集群级容器编排和管理 |
| 关系 | 互补而非替代 |
| 工作流 | Docker 构建 → Kubernetes 部署 |
| 运行时 | Kubernetes 使用 containerd/CRI-O |
| 镜像格式 | 两者都使用 OCI 标准 |
练习编辑器
bash
Loading...