chat

docker 与 k8s 的区别与联系

一句话结论(先记住)

Docker 解决的是「应用怎么打包并在一台机器上跑」的问题 Kubernetes 解决的是「大量 Docker 应用如何在一堆机器上稳定地跑」的问题

👉 Docker = 单机级别的容器运行能力 👉 K8s = 集群级别的容器编排与管理系统


一、Docker 是什么(它解决了什么问题)

Docker 的核心目标

让应用 + 依赖 → 变成一个可移植、可重复运行的“标准单元”

Docker 主要做的事

从工程角度看,Docker 解决的是:

  1. 应用打包

    • Dockerfile
    • 镜像(Image)
  2. 容器运行

    • docker run
    • 进程隔离(namespace)
    • 资源限制(cgroups)
  3. 基础生命周期管理

    • start / stop / restart
    • logs
    • exec

Docker 的能力边界

Docker 擅长

  • 单机运行
  • 开发 / 测试 / CI
  • 简单部署

Docker 不擅长

  • 多机调度
  • 自动扩缩容
  • 服务发现
  • 高可用
  • 自愈

👉 Docker 本身不“懂”集群


二、Kubernetes 是什么(它补了 Docker 哪些坑)

K8s 的核心目标

在“不可靠的机器”上,持续、稳定地运行“大量容器应用”

K8s 关注的是:

  • 机器会挂
  • 容器会挂
  • 流量会变
  • 版本会升级

Kubernetes 主要做的事

1️⃣ 容器调度(Scheduler)

  • 决定 哪个 Pod 跑在哪台 Node 上
  • 考虑 CPU / 内存 / 亲和性 / 污点

2️⃣ 应用编排(Orchestration)

  • Deployment / StatefulSet / DaemonSet
  • 副本数管理
  • 滚动更新
  • 回滚

3️⃣ 服务治理

  • Service(ClusterIP / NodePort / LoadBalancer)
  • DNS
  • 负载均衡

4️⃣ 自愈能力

  • 容器挂了 → 自动拉起
  • Node 挂了 → 重新调度
  • 健康检查(liveness / readiness)

5️⃣ 弹性能力

  • HPA(自动扩缩容)
  • 按 CPU / QPS / 自定义指标

三、K8s 和 Docker 的关系(这是关键)

核心关系一句话

K8s 不负责“怎么创建容器”,它只负责“怎么用容器”

分层关系(非常重要)

应用代码
   ↓
Docker Image(镜像)
   ↓
容器运行时(Docker / containerd / CRI-O)
   ↓
Kubernetes(调度、管理、编排)

一个关键事实(很多人不知道)

K8s 并不依赖 Docker

  • 早期:K8s 使用 Docker 作为默认运行时
  • 现在:K8s 直接使用 containerd
  • Docker 只是:

    • 镜像构建工具
    • 开发体验工具

👉 生产环境 ≠ 一定要装 Docker


四、对照表(工程师最实用)

维度 Docker Kubernetes
定位 容器技术 容器编排平台
关注点 单机容器运行 集群应用运行
规模 单机 / 少量容器 大规模集群
调度
自动重启 基础 强(自愈)
自动扩缩容
服务发现
滚动升级
学习曲线
是否必须 开发必备 生产必备

五、一个真实落地场景对比

只有 Docker

docker run -d -p 8080:8080 my-app

问题:

  • 进程挂了?
  • 机器挂了?
  • 流量暴涨?
  • 升级怎么不影响用户?

你需要 自己写脚本 + 监控 + 负载均衡


使用 Kubernetes

replicas: 3
strategy:
  type: RollingUpdate

K8s 自动帮你:

  • 跑 3 个副本
  • 挂一个补一个
  • 滚动升级
  • 负载均衡

六、工程化理解(给你一个“正确心智模型”)

Docker 是“集装箱” Kubernetes 是“港口调度系统”

  • Docker:标准化货物
  • K8s:决定

    • 放哪
    • 放几个
    • 坏了怎么办
    • 高峰期加多少

七、什么时候用谁?

只用 Docker 就够

  • 本地开发
  • Demo
  • 单机服务
  • 学习阶段

必须上 K8s

  • 多实例
  • 高可用
  • 微服务
  • 自动扩缩容
  • 生产系统

参考资料

https://milvus.io/docs/zh/install_standalone-docker.md