Docker Swarm 容器编排集群搭建

Docker Swarm 是 Docker 内置的容器编排引擎,无需安装额外组件即可将多台 Docker 主机组成集群,实现服务的高可用部署和负载均衡。相比 Kubernetes,Swarm 学习曲线更平缓、配置更简单,非常适合中小规模的容器化部署场景。本文将介绍如何在搬瓦工 VPS 上搭建 Docker Swarm 集群。

一、环境要求

  • Docker:所有节点需安装 Docker(20.10+)。
  • 网络:各节点间需开放端口 2377/tcp(管理)、7946/tcp+udp(通信)、4789/udp(覆盖网络)。
  • 节点数量:最少 1 个 Manager 节点。生产环境推荐 3 个 Manager + N 个 Worker。
  • 内存:每个节点至少 1GB。

搬瓦工 VPS 购买地址:bwh81.net,使用优惠码 NODESEEK2026 享受 6.77% 折扣。

二、初始化 Swarm 集群

2.1 在 Manager 节点上初始化

docker swarm init --advertise-addr MANAGER_IP

MANAGER_IP 替换为 Manager 节点的公网或内网 IP。命令执行后会输出加入集群的 token。

2.2 添加 Worker 节点

在每个 Worker 节点上执行 init 输出的命令:

docker swarm join --token SWMTKN-1-xxxxx MANAGER_IP:2377

2.3 添加 Manager 节点

获取 Manager 加入令牌:

docker swarm join-token manager

2.4 查看集群状态

docker node ls

三、防火墙配置

# 管理端口
ufw allow 2377/tcp

# 节点通信
ufw allow 7946/tcp
ufw allow 7946/udp

# Overlay 网络
ufw allow 4789/udp

四、部署服务

4.1 创建简单服务

docker service create \
  --name web \
  --replicas 3 \
  --publish 80:80 \
  nginx:alpine

4.2 查看服务状态

docker service ls
docker service ps web
docker service logs web

4.3 扩缩容

# 扩容到 5 个副本
docker service scale web=5

# 缩容到 2 个副本
docker service scale web=2

五、使用 Stack 部署(推荐)

使用 Docker Compose 文件格式部署 Swarm Stack。创建 stack.yml

version: '3.8'

services:
  web:
    image: nginx:alpine
    deploy:
      replicas: 3
      update_config:
        parallelism: 1
        delay: 10s
        order: start-first
      rollback_config:
        parallelism: 1
        delay: 5s
      restart_policy:
        condition: on-failure
        delay: 5s
        max_attempts: 3
      resources:
        limits:
          cpus: '0.5'
          memory: 128M
        reservations:
          cpus: '0.1'
          memory: 64M
    ports:
      - "80:80"
    networks:
      - webnet

  redis:
    image: redis:7-alpine
    deploy:
      replicas: 1
      placement:
        constraints:
          - node.role == manager
    networks:
      - webnet

networks:
  webnet:
    driver: overlay
# 部署 Stack
docker stack deploy -c stack.yml myapp

# 查看 Stack 状态
docker stack ls
docker stack services myapp
docker stack ps myapp

# 删除 Stack
docker stack rm myapp

六、Overlay 网络

Swarm 的 Overlay 网络允许跨节点的容器相互通信:

# 创建 Overlay 网络
docker network create --driver overlay --attachable my-overlay

# 在服务中使用
docker service create \
  --name api \
  --network my-overlay \
  myapp-api:latest

七、滚动更新

# 更新服务镜像
docker service update --image nginx:1.25-alpine web

# 指定更新策略
docker service update \
  --update-parallelism 1 \
  --update-delay 10s \
  --update-order start-first \
  --image nginx:1.25-alpine web

# 回滚到上一个版本
docker service rollback web

八、配置和密钥管理

8.1 Docker Config

# 创建配置
echo "server { listen 80; }" | docker config create nginx-conf -

# 在服务中使用
docker service create \
  --name web \
  --config source=nginx-conf,target=/etc/nginx/conf.d/default.conf \
  nginx:alpine

8.2 Docker Secret

# 创建密钥
echo "my_secure_password" | docker secret create db_password -

# 在服务中使用
docker service create \
  --name db \
  --secret db_password \
  -e MYSQL_ROOT_PASSWORD_FILE=/run/secrets/db_password \
  mysql:8.0

九、节点管理

# 设置节点为维护模式
docker node update --availability drain NODE_NAME

# 恢复节点
docker node update --availability active NODE_NAME

# 添加标签
docker node update --label-add zone=us-west NODE_NAME

# 移除节点
docker node rm NODE_NAME

# 节点离开集群(在节点上执行)
docker swarm leave --force

十、常见问题

服务无法跨节点通信

检查防火墙是否开放了必要端口(2377、7946、4789),以及 Overlay 网络是否正常:

docker network inspect my-overlay

服务副本一直 Pending

docker service ps --no-trunc web

常见原因是节点资源不足或镜像拉取失败。

Manager 节点故障

生产环境应配置 3 个 Manager 节点以保证高可用。单 Manager 节点故障将导致整个集群无法管理。

总结

Docker Swarm 是入门容器编排的最佳选择,无需额外组件即可实现集群管理、服务发现和负载均衡。对于需要更强大功能的场景,可以考虑迁移到 KubernetesK3S。选购搬瓦工 VPS 请参考 全部方案,使用优惠码 NODESEEK2026 享受 6.77% 折扣。

关于本站

搬瓦工VPS中文网(bwgvps.com)是非官方中文信息站,整理搬瓦工的方案、优惠和教程。我们不销售主机,不提供技术服务。

新手必读
搬瓦工优惠码

NODESEEK2026(优惠 6.77%)

购买时填入即可抵扣。