蓝戒博客

  • 首页
  • 研发说
  • 架构论
  • 效能录
  • AI谈
  • 随笔集
智构苍穹
融合 AI、架构与工程实践,沉淀方法论,构建可持续的技术价值。
  1. 首页
  2. 研发说
  3. 正文

Docker 进阶(四):使用 Docker Swarm 与 Kubernetes 实现容器编排

2026年1月17日 43点热度 0人点赞 0条评论

在前面的几篇文章中,我们已经解决了几个核心问题:

  • Docker 进阶(一):掌握镜像、容器、Dockerfile 等基础
  • Docker 进阶(二):理解网络与数据卷,解决通信与数据持久化
  • Docker 进阶(三):吃透镜像 Layer 与缓存机制,优化构建与发布效率

当应用进入 多实例、高可用、可扩缩容 阶段时,一个新的问题不可避免地出现:

如何在多台机器上,统一管理、调度、扩缩、恢复这些容器?

这正是 容器编排(Container Orchestration) 要解决的问题。


一、为什么需要容器编排?

在生产环境中,容器绝不会只是 docker run 那么简单。

1️⃣ 现实中的问题

  • 一个服务需要 多个副本
  • 容器异常退出,需要 自动重启
  • 多个服务之间存在 依赖关系
  • 需要 滚动更新,而不是一次性停服
  • 流量需要 负载均衡
  • 不同环境(测试 / 预发 / 生产)配置不同

如果继续靠脚本和人工操作,很快就会失控。


二、容器编排的核心能力

无论是 Docker Swarm 还是 Kubernetes,本质都在解决同一类问题:

能力说明
服务声明描述“我想要什么”,而不是“我怎么做”
调度自动把容器分配到合适的节点
副本管理保证服务副本数符合预期
自愈能力容器或节点异常时自动恢复
服务发现服务之间通过名称通信
负载均衡请求自动分发到多个实例
滚动更新平滑发布新版本

三、Docker Swarm:Docker 官方的编排方案

1️⃣ 什么是 Docker Swarm?

Docker Swarm 是 Docker 内置的集群与编排系统,特点是:

  • 零额外安装
  • 与 Docker CLI 完全一致
  • 学习成本低
  • 适合中小规模集群

一句话总结:

Swarm = Docker 原生的“轻量级 Kubernetes”


2️⃣ Swarm 的核心概念

概念说明
Node集群中的一台机器
Manager负责调度和集群状态
Worker运行容器的节点
Service一个服务定义
TaskService 的具体实例

3️⃣ 初始化 Swarm 集群

Bash
docker swarm init

查看节点:

Bash
docker node ls

4️⃣ 使用 Service 部署应用

Bash
docker service create \
  --name web \
  --replicas 3 \
  -p 80:80 \
  nginx

此时你会发现:

  • 不需要自己做负载均衡
  • 任意节点访问 80 端口都能命中服务
  • 容器挂了会自动拉起

5️⃣ 使用 docker-compose 进行 Swarm 编排

YAML
version: "3.8"

services:
  web:
    image: nginx
    deploy:
      replicas: 3
      restart_policy:
        condition: on-failure
    ports:
      - "80:80"

部署:

Bash
docker stack deploy -c docker-compose.yml myapp

6️⃣ Swarm 的优缺点

优点:

  • 学习曲线低
  • 原生 Docker 支持
  • 快速上手

缺点:

  • 生态相对较小
  • 社区活跃度下降
  • 不适合超大规模集群

四、Kubernetes:事实上的行业标准

1️⃣ 为什么 Kubernetes 会成为主流?

Kubernetes(K8s)最初由 Google 推出,如今已成为 云原生事实标准:

  • 公有云全面支持(阿里云 / AWS / GCP)
  • 强大的扩展能力
  • 成熟的生态体系
  • 超大规模实践验证

一句话总结:

Swarm 更像“工具”,Kubernetes 更像“平台”。


2️⃣ Kubernetes 的核心对象

对象作用
Pod最小调度单元
Deployment无状态应用管理
Service服务发现与负载均衡
ConfigMap配置管理
Secret敏感信息管理
Ingress七层流量入口

3️⃣ 一个最简单的 Deployment 示例

YAML
apiVersion: apps/v1
kind: Deployment
metadata:
  name: web
spec:
  replicas: 3
  selector:
    matchLabels:
      app: web
  template:
    metadata:
      labels:
        app: web
    spec:
      containers:
        - name: nginx
          image: nginx
          ports:
            - containerPort: 80

部署:

Bash
kubectl apply -f deployment.yaml

4️⃣ Kubernetes 的核心优势

  • 声明式配置(期望状态)
  • 强大的自动化能力
  • 高度可扩展
  • 完整的云原生生态

5️⃣ Kubernetes 的挑战

  • 学习曲线陡峭
  • 概念多、对象多
  • 运维复杂度高

五、Swarm vs Kubernetes:如何选择?

维度Docker SwarmKubernetes
学习成本⭐⭐⭐⭐⭐
上手速度快慢
集群规模小~中中~超大
生态较弱极其丰富
云厂商支持一般一流
未来趋势弱化主流

选择建议

  • 小团队 / 内部系统 / 学习阶段 → Docker Swarm
  • 中大型项目 / 云原生 / 长期演进 → Kubernetes

六、前端与容器编排的真实落地场景

对前端工程师来说,编排并不是“运维专属”。

常见应用场景

  • 前端 多环境部署
  • SSR / Node 服务的 横向扩展
  • 前端网关 / BFF 服务
  • 灰度发布与回滚
  • CI/CD 自动部署

当你写下第一份 Deployment YAML,
就真正走进了 云原生工程师 的世界。


七、小结

在这一篇中,我们完成了一个重要的跃迁:

从“管理容器”,到“管理服务与集群”。

你现在已经具备了:

  • 理解容器编排的必要性
  • 使用 Docker Swarm 快速构建集群
  • 认识 Kubernetes 的核心价值
  • 根据项目规模选择合适方案

下一篇预告

Docker 进阶(五):Docker + CI/CD —— 从代码提交到自动部署

我们将把 Docker、镜像优化、编排能力真正串进 工程化流水线。

标签: Docker Swarm Docker 进阶 Kubernetes 容器编排
最后更新:2026年1月17日

cywcd

我始终相信,技术不仅是解决问题的工具,更是推动思维进化和创造价值的方式。从研发到架构,追求极致效能;在随笔中沉淀思考,于 AI 中对话未来。

打赏 点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

cywcd

我始终相信,技术不仅是解决问题的工具,更是推动思维进化和创造价值的方式。从研发到架构,追求极致效能;在随笔中沉淀思考,于 AI 中对话未来。

最新 热点 随机
最新 热点 随机
前端开发 TanStack 化:从“框架思维”到“能力组合”的工程演进 Docker 进阶(七):容器化体系设计总结与生产落地经验复盘 Docker 进阶(六):生产环境中的 Docker 安全、监控与日志体系 Docker 进阶(五):Docker + CI/CD —— 从代码提交到自动部署 Docker 进阶(四):使用 Docker Swarm 与 Kubernetes 实现容器编排 Docker 进阶(三):深入理解镜像层(Layer)与缓存机制
Workbox:可直接用于生产环境的 Service Worker 利器快速构建项目文档网站:主流文档站点工具选型与对比DiceBear:30+ 风格、完全可定制的开源头像生成解决方案ES2015 → ES2025:JavaScript 十年演进全景回顾与核心 API 总结ECMAScript 2025(ES16)深度解析20 个现代 JavaScript API 深度盘点
flex布局及其兼容解决方案 Monorepo 工具全景解析:Workspace、Turborepo、Nx、Rush 如何选? Web Workers:释放浏览器多线程的魔力 在 Docker 中运行完整操作系统:Windows / macOS / Linux js禁止右键、复制、粘贴、另存为等功能代码 html5日历输入类型date实现浏览器原生日历
最近评论
渔夫 发布于 3 个月前(11月05日) 学到了,感谢博主分享
沙拉小王子 发布于 8 年前(11月30日) 适合vue入门者学习,赞一个
沙拉小王子 发布于 8 年前(11月30日) 适合vue入门者学习,赞一个
cywcd 发布于 9 年前(04月27日) 请参考一下这篇文章http://www.jianshu.com/p/fa4460e75cd8
cywcd 发布于 9 年前(04月27日) 请参考一下这篇文章http://www.jianshu.com/p/fa4460e75cd8

COPYRIGHT © 2025 蓝戒博客_智构苍穹-专注于大前端领域技术生态. ALL RIGHTS RESERVED.

京ICP备12026697号-2