Docker Swarm

Docker Swarm 是 Docker 官方提供的原生容器编排工具,用于将多个 Docker 主机(物理机或虚拟机)组成一个集群(称为 Swarm),以统一管理和调度容器化应用。在 Swarm 模式下,用户可以通过简单的命令或声明式配置实现高可用、负载均衡、服务扩展等生产级功能。


Swarm 模式的核心概念

  1. 集群(Swarm)

    • 由多个 节点(Node) 组成,分为两类:
      • 管理节点(Manager):负责集群状态管理、任务调度(默认也参与工作负载)。
      • 工作节点(Worker):仅执行容器任务,不参与决策。
    • 通过 Raft 共识算法保证管理节点的高可用(建议至少 3 个 Manager 避免脑裂)。
  2. 服务(Service)

    • Swarm 的核心抽象,定义容器的期望状态(如镜像、副本数、网络、存储等)。
    • 示例:运行一个 3 副本的 Nginx 服务:
      docker service create --name nginx --replicas 3 -p 80:80 nginx
      
  3. 任务(Task)

    • 服务的最小调度单元,每个任务对应一个运行的容器实例。Swarm 会自动将任务分配到健康的节点。
  4. 负载均衡与网络

    • 内置 DNS 和 VIP:服务名自动解析到所有容器的虚拟 IP,请求会被均匀分发。
    • Overlay 网络:跨主机的容器间通信通过加密的 overlay 网络实现。
  5. 滚动更新与回滚

    • 支持分批次更新服务(如镜像版本升级),失败时自动回滚到上一版本。

Swarm vs. 单机 Docker

特性 单机 Docker Docker Swarm(集群模式)
规模 单主机 多主机(横向扩展)
高可用 自动重启失败容器、节点故障转移
调度 手动运行容器 自动分配任务到最优节点
服务发现 需手动配置 内置 DNS 和负载均衡
声明式管理 需脚本或工具 通过 docker service 定义状态

Swarm 的典型使用场景

  1. Web 应用集群:通过 --replicas 快速扩展无状态服务(如 API 后端)。
  2. 高可用数据库:结合 --placement-pref 将副本分散到不同节点。
  3. CI/CD 流水线:动态部署测试环境,完成后自动清理。
  4. 边缘计算:轻量级编排,适合资源受限的设备集群。

示例命令

# 初始化 Swarm(管理节点)
docker swarm init --advertise-addr <MANAGER_IP>

# 加入工作节点
docker swarm join --token <TOKEN> <MANAGER_IP>:2377

# 部署服务
docker service create --name web --replicas 5 -p 8080:80 nginx

# 监控服务状态
docker service ps web

# 扩展副本数
docker service scale web=10

与 Kubernetes 的对比

  • 优势:Swarm 更轻量、学习曲线低、完全兼容 Docker API,适合中小规模场景。
  • 局限:功能不如 Kubernetes 丰富(如缺乏高级调度策略、CRD 扩展等)。

总结:Docker Swarm 模式是简化容器编排的“开箱即用”方案,适合需要快速搭建集群但不想复杂配置的场景。

posted on 2025-04-09 09:09  Leo-Yide  阅读(140)  评论(0)    收藏  举报