3·基础入门入门

Kubernetes vs Docker

kubernetesdockercomparison

Kubernetes vs Docker

学习目标

  1. 理解 Docker 和 Kubernetes 的定位差异
  2. 了解两者如何协同工作
  3. 掌握何时使用 Docker,何时使用 Kubernetes

核心概念

定位差异

Docker:
┌─────────────────────────────────────┐
│  构建 (Build) → 运输 (Ship) → 运行 (Run)  │
│  专注于:单机容器生命周期管理           │
└─────────────────────────────────────┘

Kubernetes:
┌─────────────────────────────────────┐
│  调度 (Schedule) → 编排 (Orchestrate) → 管理 (Manage)  │
│  专注于:集群级容器编排和管理          │
└─────────────────────────────────────┘

技术栈对比

层级Docker 生态Kubernetes 生态
容器运行时Docker Enginecontainerd, CRI-O
镜像格式Docker ImageOCI Image (兼容)
编排工具Docker Compose, SwarmKubernetes
网络Docker NetworkCNI 插件
存储Docker VolumeCSI 插件

互补关系

开发者视角:
┌─────────────────────────────────────────────┐
│  Docker 负责                                │
│  • 编写 Dockerfile                          │
│  • 构建镜像                                 │
│  • 本地测试                                 │
└─────────────────────────────────────────────┘
                    ↓
┌─────────────────────────────────────────────┐
│  Kubernetes 负责                            │
│  • 部署到集群                               │
│  • 自动扩缩容                               │
│  • 服务发现和负载均衡                        │
│  • 滚动更新和回滚                            │
└─────────────────────────────────────────────┘

Docker Compose vs Kubernetes

特性Docker ComposeKubernetes
适用场景开发/测试生产环境
部署范围单机集群
扩展能力有限强大
高可用内置
学习曲线简单陡峭
配置格式YAMLYAML

典型工作流

开发阶段:
Dockerfile → docker build → docker run
    ↓
本地测试:
docker-compose up
    ↓
生产部署:
kubectl apply -f deployment.yaml
    ↓
Kubernetes 集群管理

Docker Swarm vs Kubernetes

特性Docker SwarmKubernetes
复杂度简单复杂
功能基础丰富
生态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:理解定位

回答以下问题:

  1. Docker 和 Kubernetes 的核心定位有什么不同?
  2. 为什么说两者是互补关系而非替代关系?
  3. Kubernetes 为什么弃用 Docker 作为容器运行时?

练习 2:场景选择

为以下场景选择合适的工具:

  1. 本地开发和测试一个多服务应用
  2. 部署一个需要高可用的生产应用
  3. 快速原型开发和验证
  4. 管理数百个微服务

练习 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...

继续学习

完成本课后,建议继续学习下一课「Kubernetes 架构」 以巩固所学知识。