Docker和 Kubernetes
·
Docker 和 Kubernetes(简称 K8s)是现代云原生技术栈中最核心的两个工具,它们经常一起出现,但职责不同。
你可以把它们理解为“造船”和“舰队指挥系统”的关系。
✅ 一句话总结:
- Docker:负责 打包和运行单个容器(造一艘船)
- Kubernetes:负责 管理成百上千个容器的集群(指挥整个舰队)
✅ 一、核心定位对比
| 对比项 | Docker | Kubernetes (K8s) |
|---|---|---|
| 定位 | 容器运行时(Container Runtime) | 容器编排系统(Orchestration) |
| 作用 | 打包应用为镜像,运行单个容器 | 管理多个容器的部署、扩展、网络、故障恢复 |
| 范围 | 单机(一台机器) | 集群(多台机器) |
| 类比 | 造船厂:造一艘船 | 海军司令部:指挥整个舰队 |
| 是否必须 | ✅ 应用打包的事实标准 | ✅ 大规模部署的事实标准 |
✅ 二、功能对比详解
| 功能 | Docker | Kubernetes |
|---|---|---|
| 打包应用 | ✅ 用 Dockerfile 构建镜像 | ❌ 不负责打包,但依赖镜像 |
| 运行容器 | ✅ docker run 启动容器 | ✅ 可以运行,但通过 Pod 管理 |
| 多容器管理 | ❌ 仅支持简单组合(docker-compose) | ✅ 支持大规模集群调度 |
| 自动扩缩容 | ❌ 不支持 | ✅ 根据 CPU/内存/流量自动扩容 |
| 自愈能力 | ❌ 容器挂了不会自动重启(除非用 --restart) | ✅ 自动重建崩溃的 Pod |
| 滚动更新 | ❌ 不支持 | ✅ 支持无中断更新 |
| 服务发现 | ❌ 局限于单机 | ✅ 自动分配域名和负载均衡 |
| 多主机管理 | ❌ 不能跨机器调度 | ✅ 可管理成百上千台服务器 |
✅ 三、它们是如何协作的?
一个典型的 CI/CD + 生产部署流程:
1. 开发写代码 → 2. Jenkins 构建 → 3. Docker 打包成镜像 → 4. 推送到镜像仓库
↓
5. Kubernetes 从仓库拉取镜像
↓
6. K8s 部署为 Pod,自动管理
具体步骤:
- Docker 把应用打包成一个标准化的镜像(如
myapp:v1.2) - 镜像推送到 Docker Registry(如 Harbor)
- Kubernetes 从仓库拉取镜像,创建 Pod 运行
- K8s 负责:
- 保持 3 个副本运行
- 流量大时自动扩容到 5 个
- 某个 Pod 崩溃后自动重建
- 更新时滚动发布,不中断服务
✅ 四、举个生活化的例子:外卖平台
| 场景 | Docker 的角色 | Kubernetes 的角色 |
|---|---|---|
| 用户服务 | 打包成 user-service:1.0 镜像 | 部署 3 个实例,自动负载均衡 |
| 订单服务 | 打包成 order-service:1.0 镜像 | 双11流量暴增,自动扩容到 10 个 |
| 支付服务 | 打包成 payment-service:1.0 镜像 | 某个实例崩溃,K8s 自动重启 |
| 更新版本 | 构建 user-service:1.1 新镜像 | K8s 滚动更新,用户无感知 |
✅ Docker 负责“每个服务怎么运行”
✅ K8s 负责“所有服务怎么协同工作”
✅ 五、Docker 和 K8s 的关系演变
| 时间 | 关系 |
|---|---|
| 2013-2018 | Docker 是“唯一选择”,K8s 使用 Docker 作为底层运行时 |
| 2019-现在 | K8s 支持多种容器运行时(如 containerd、CRI-O),不再依赖 Docker Engine |
| 现在 | Docker = 开发工具,K8s = 生产调度平台 |
📌 注意:K8s 从 1.20 开始弃用 Docker Engine,改用
containerd(Docker 的核心组件之一)。
但开发者仍然广泛使用 Docker Desktop 来构建镜像。
✅ 六、学习建议:先学谁?
| 建议 | 说明 |
|---|---|
| ✅ 先学 Docker | 理解容器、镜像、网络、卷等基础概念 |
| ✅ 再学 Kubernetes | 理解 Pod、Deployment、Service、YAML 配置 |
| ✅ 配合使用 | 用 Docker 构建镜像,用 K8s 部署运行 |
✅ 七、常见组合工具
| 工具 | 作用 |
|---|---|
| Docker + Docker Compose | 本地开发,运行多个容器(如 Nginx + MySQL + App) |
| Docker + Kubernetes | 生产环境,大规模部署微服务 |
| Jenkins + Docker + K8s | 完整的 CI/CD 流水线 |
| Helm + K8s | 用 Helm Chart 管理 K8s 应用部署 |
✅ 总结
| 问题 | 回答 |
|---|---|
| Docker 是什么? | 用于打包和运行单个容器的工具 |
| Kubernetes 是什么? | 用于管理容器集群的编排系统 |
| 它们的关系? | Docker 造船,K8s 指挥舰队 |
| 能否单独使用? | ✅ Docker 可用于本地开发;✅ K8s 可用其他运行时 |
| 是否必须一起用? | 不强制,但生产环境通常配合使用 |
💡 一句话记住:
Docker 让应用“跑起来”,Kubernetes 让应用“跑得好、管得住”。
它们是现代云原生应用的“左膀右臂”。
更多推荐



所有评论(0)