一文搞懂 Docker 与 Kubernetes:从容器到集群的进化之路
Docker与Kubernetes核心解析 Docker通过镜像打包应用及环境,实现"一次构建,到处运行",解决开发与生产环境差异问题。其轻量化容器启动快、隔离性强,适合微服务架构。Kubernetes(K8s)作为容器编排系统,管理大规模容器集群,提供自动扩缩容、服务发现、滚动升级等能力。两者关系互补:Docker负责单容器运行,K8s调度集群资源。典型应用场景包括微服务部署
目录
前言
在当今的云原生时代,Docker 和 Kubernetes(K8s) 已经成为开发者绕不开的核心技术。无论是微服务架构、CI/CD,还是大模型推理部署,都离不开这两大工具。 很多初学者经常会问:
-
Docker 到底是什么?为什么大家都用它来部署应用?
-
Kubernetes 又解决了哪些 Docker 解决不了的问题?
今天,我们就用一篇文章来带你从 容器化 到 容器编排,全面理解 Docker 与 Kubernetes 的核心价值。
一、什么是 Docker?
1.1 背景问题
在传统应用部署中,开发环境与生产环境往往存在差异:
-
开发机能跑,线上报错;
-
本地是 Python 3.10,服务器是 Python 3.7;
-
依赖库冲突,部署耗时长。
💡 一句话概括:Docker 提供了一种“打包环境+应用”的统一方案。
1.2 Docker 的核心概念
-
镜像(Image):应用的打包文件,包含运行环境和依赖。
-
容器(Container):镜像运行起来的实例,类似“轻量级虚拟机”。
-
仓库(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 核心组件
-
Master 节点(控制平面)
-
API Server
:对外提供接口,集群的"神经中枢",所有操作统一通过REST API接口执行,支持认证授权、数据校验和集群状态变更 -
Scheduler
:负责调度容器运行在哪个节点,负责Pod调度决策,通过"筛选-评分"机制(Predicates→Priorities)选择最优工作节点,例如优先将Pod调度到资源利用率低的节点 -
Controller Manager
:保证副本数、任务执行等,运行各类控制器(如Deployment Controller、Node Controller),实现集群自愈能力,例如当Pod故障时自动重启或重建 -
etcd
:保存集群状态,绿色圆柱形分布式数据库,存储集群所有状态信息(如Pod配置、节点健康状态),具备强一致性和高可用性
-
-
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 解决了“容器集群管理与调度”的问题
-
两者结合,构建了现代 云原生基础设施
如果你是初学者,可以这样入门:
-
学会写 Dockerfile,理解容器运行机制
-
了解 kubectl 命令,跑一个简单的 Pod
-
学习 Deployment、Service,部署一个 Nginx 集群
-
最后尝试在 K8s 上部署自己的项目
📌 学习建议
-
推荐官方文档:
更多推荐
所有评论(0)