目录

前言

一、什么是 Docker?

1.1 背景问题

1.2 Docker 的核心概念

1.3 Docker 的优势

1.4 30 秒上手 Docker

二、为什么需要 Kubernetes?

三、Kubernetes(K8s)核心介绍

3.1 什么是 Kubernetes?

3.2 Kubernetes 核心组件

3.3 Kubernetes 的核心概念

3.4 Kubernetes 的优势

四、Docker vs Kubernetes 的关系

五、应用场景举例

六、总结


前言

在当今的云原生时代,Docker 和 Kubernetes(K8s) 已经成为开发者绕不开的核心技术。无论是微服务架构、CI/CD,还是大模型推理部署,都离不开这两大工具。 很多初学者经常会问:

  • Docker 到底是什么?为什么大家都用它来部署应用?

  • Kubernetes 又解决了哪些 Docker 解决不了的问题?

今天,我们就用一篇文章来带你从 容器化容器编排,全面理解 Docker 与 Kubernetes 的核心价值。


一、什么是 Docker?

1.1 背景问题

在传统应用部署中,开发环境与生产环境往往存在差异:

  • 开发机能跑,线上报错;

  • 本地是 Python 3.10,服务器是 Python 3.7;

  • 依赖库冲突,部署耗时长。

💡 一句话概括:Docker 提供了一种“打包环境+应用”的统一方案


1.2 Docker 的核心概念

  1. 镜像(Image):应用的打包文件,包含运行环境和依赖。

  2. 容器(Container):镜像运行起来的实例,类似“轻量级虚拟机”。

  3. 仓库(Registry):存放镜像的地方,比如 Docker Hub。

    Image 镜像 安装包 ISO 只读模板,构建一次到处运行
    Container 容器 跑起来的进程 镜像的实例,秒级启动
    概念 类比 一句话
    Registry 仓库 应用商店 存镜像,官方 Docker Hub 最常用
+-----------------+        +------------------+
|   Docker 镜像    | -----> |   Docker 容器     |
| (打包好的应用)   |        | (运行实例)        |
+-----------------+        +------------------+

1.3 Docker 的优势

  • 一次构建,到处运行

  • 轻量化:启动快,占用资源少

  • 隔离性强:每个容器之间互不干扰

  • 适合微服务架构:每个服务一个容器

1.4 30 秒上手 Docker

# 1. 拉镜像
docker pull nginx:alpine
​
# 2. 起容器
docker run -d -p 8080:80 --name web nginx:alpine
​
# 3. 访问
curl http://localhost:8080

浏览器看到“Welcome to nginx!”,恭喜入门 🎉

二、为什么需要 Kubernetes?

虽然 Docker 解决了单个应用的部署问题,但在企业级应用中我们常遇到:

  • 有成百上千个容器要管理

  • 需要自动伸缩(流量大时扩容,闲时缩容)

  • 要监控健康状态,宕机自动重启

  • 要支持滚动升级,避免服务中断

这时,Kubernetes 就登场了


三、Kubernetes(K8s)核心介绍

3.1 什么是 Kubernetes?

Kubernetes 是 Google 开源的 容器编排系统,可以用来自动化容器的 部署、扩展、管理。 如果把 Docker 比作“单兵作战”,那么 Kubernetes 就是“调度军队的司令部”。

核心对象速记表

对象 作用 类比
Pod 最小调度单元,1-N 个容器 一卡车货
Deployment 管理 Pod 副本 物流调度中心
Service 负载均衡 + 服务发现 收货地址
Namespace 逻辑隔离 城市分区
ConfigMap / Secret 配置/密钥 快递包裹里的说明书

3.2 Kubernetes 核心组件

  1. Master 节点(控制平面)

    • API Server:对外提供接口,集群的"神经中枢",所有操作统一通过REST API接口执行,支持认证授权、数据校验和集群状态变更

    • Scheduler:负责调度容器运行在哪个节点,负责Pod调度决策,通过"筛选-评分"机制(Predicates→Priorities)选择最优工作节点,例如优先将Pod调度到资源利用率低的节点

    • Controller Manager:保证副本数、任务执行等,运行各类控制器(如Deployment Controller、Node Controller),实现集群自愈能力,例如当Pod故障时自动重启或重建

    • etcd:保存集群状态,绿色圆柱形分布式数据库,存储集群所有状态信息(如Pod配置、节点健康状态),具备强一致性和高可用性

  2. Worker 节点(工作节点)

    • Kubelet:和 Master 通信,管理 Pod,节点"管家",负责监控容器健康状态、执行主控节点指令(如启动/停止Pod),并定期向API Server汇报节点状态

    • Kube-Proxy:提供服务发现和负载均衡,网络代理,通过维护节点网络规则(如Service转发规则)实现Pod间通信和外部访问

    • Pod:K8s 中最小的调度单位,里面运行一个或多个容器

数据流向关键路径:用户通过kubectl发送命令→API Server认证授权→Etcd存储配置→Scheduler调度Pod→Kubelet在工作节点执行部署→Kube-proxy配置网络规则,最终实现外部流量通过防火墙接入Service。


3.3 Kubernetes 的核心概念

  • Pod:最小运行单元,封装一个或多个容器

  • Deployment:管理 Pod 的副本数量,支持滚动更新

  • Service:为一组 Pod 提供统一访问入口

  • Ingress:暴露 HTTP/HTTPS 服务

  • ConfigMap & Secret:配置和敏感信息管理


3.4 Kubernetes 的优势

  • 高可用:节点宕机自动迁移

  • 自动扩缩容:根据流量自动调整副本数

  • 服务发现与负载均衡:不用手动写死 IP

  • 滚动升级 & 回滚:平滑更新应用

  • 跨云平台:支持公有云、私有云和混合云


四、Docker vs Kubernetes 的关系

很多人容易混淆:

  • Docker 是容器引擎,解决“如何运行单个容器”。

  • Kubernetes 是容器编排平台,解决“如何大规模管理容器集群”。

📌 示意图(Docker vs Kubernetes)

Docker 负责:
  - 镜像打包
  - 容器运行
  - 本地开发部署
​
Kubernetes 负责:
  - 容器调度
  - 自动扩缩容
  - 集群管理
  - 服务发现

两者是 互补关系:先用 Docker 打包应用,再用 K8s 进行大规模管理。

维度 Docker Kubernetes
定位 单机容器引擎 分布式容器编排
隔离 Namespace/Cgroups Pod/NetworkPolicy
网络 单机 bridge 集群级 CNI
存储 Volume PV/PVC/StorageClass
发布 手动/Compose 声明式 YAML
生态 Docker Hub Helm、Operator、CRD

一句话总结——Docker 是集装箱,K8s 是港口操作系统


五、应用场景举例

  • 微服务架构:每个服务一个容器,K8s 负责调度和扩缩容

  • 大模型推理服务:Docker 打包 PyTorch/TensorRT 环境,K8s 自动扩容以应对高并发请求

  • CI/CD 流水线:代码提交 → Jenkins 构建镜像 → 推送到仓库 → K8s 部署


六、总结

  • Docker 解决了“应用打包与运行”的问题

  • Kubernetes 解决了“容器集群管理与调度”的问题

  • 两者结合,构建了现代 云原生基础设施

如果你是初学者,可以这样入门:

  1. 学会写 Dockerfile,理解容器运行机制

  2. 了解 kubectl 命令,跑一个简单的 Pod

  3. 学习 Deployment、Service,部署一个 Nginx 集群

  4. 最后尝试在 K8s 上部署自己的项目


📌 学习建议

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐