docker swarm作用和命令
Docker Swarm 是 Docker 官方推出的轻量级容器编排工具,主要解决多容器、多主机的分布式应用管理问题。以下是全面解析:
一、Docker Swarm 核心解决什么问题?
| 问题场景 | Swarm 解决方案 |
|---|---|
| 多容器协同管理难 | 统一编排服务依赖和通信 |
| 单点故障风险 | 自动故障转移和容器重启 |
| 手动扩缩容效率低 | 声明式副本数管理,一键扩缩容 |
| 跨主机网络复杂 | 内置 Overlay 网络和 DNS 服务发现 |
| 滚动更新服务中断 | 分批次更新,零停机部署 |
二、Swarm 核心作用
-
集群管理
-
将多个 Docker 主机虚拟化为单一资源池
-
支持动态添加/移除节点
-
-
服务调度
-
自动分配容器到最优节点
-
支持节点标签和约束(如
node.role==worker)
-
-
高可用保障
-
容器故障时自动重建
-
Manager 节点 Raft 共识(需 ≥3 个 Manager 实现真正高可用)
-
-
负载均衡
-
内置 Ingress 路由网格,外部请求自动分发到各节点容器
-
支持自定义负载均衡策略
-
三、使用流程(从零到生产)
1. 初始化 Swarm 集群
# 在第一个 Manager 节点执行
docker swarm init --advertise-addr <MANAGER_IP>
# 输出加入命令(Worker节点执行):
docker swarm join --token <TOKEN> <MANAGER_IP>:2377
2. 部署服务
# 部署 3 副本 Nginx 服务
docker service create \
--name web \
--replicas 3 \
--publish published=8080,target=80 \
--network my-overlay \
nginx:alpine
3. 日常管理操作
# 扩容服务
docker service scale web=5
# 滚动更新
docker service update \
--image nginx:1.25 \
--update-parallelism 2 \
web
# 故障排查
docker service logs -f web
四、必须掌握的命令清单
1. 集群管理
| 命令 | 作用 |
|---|---|
docker swarm init |
初始化 Swarm 集群 |
docker swarm join-token |
查看节点加入令牌 |
docker node ls |
列出所有节点 |
docker node promote <NODE> |
提升 Worker 为 Manager |
docker node update --availability drain <NODE> |
排空节点 |
2. 服务管理
| 命令 | 作用 |
|---|---|
docker service create |
创建服务 |
docker service ls |
列出所有服务 |
docker service ps <SERVICE> |
查看服务容器分布 |
docker service scale |
扩缩容 |
docker service update |
更新服务配置 |
docker service rollback |
回滚到上一版本 |
3. 网络与存储
| 命令 | 作用 |
|---|---|
docker network create -d overlay |
创建跨主机网络 |
docker secret create |
创建加密凭证 |
docker config create |
创建配置文件 |
4. 监控排错
| 命令 | 作用 |
|---|---|
docker service logs |
查看服务日志 |
docker stats |
实时资源监控 |
docker inspect <OBJECT> |
查看详细配置 |
五、典型生产场景示例
场景 1:高可用 Web 服务
# 创建 overlay 网络
docker network create -d overlay webnet
# 部署双副本服务
docker service create \
--name web \
--replicas 2 \
--network webnet \
--publish 80:80 \
--health-cmd "curl -f http://localhost || exit 1" \
nginx:alpine
场景 2:数据库+应用集群
# MySQL 服务(带持久化卷)
docker service create \
--name mysql \
--mount type=volume,source=mysql_data,target=/var/lib/mysql \
--network mynet \
--constraint 'node.role==worker' \
mysql:8.0
# 连接数据库的微服务
docker service create \
--name api \
--replicas 3 \
--network mynet \
-e DB_HOST=mysql \
my-api:latest
六、与 Kubernetes 的对比
| 特性 | Docker Swarm | Kubernetes |
|---|---|---|
| 学习曲线 | ⭐️⭐️ (简单) | ⭐️⭐️⭐️⭐️ (复杂) |
| 安装部署 | 内置 Docker,一键初始化 | 需要第三方工具部署 |
| 集群规模 | 适合中小集群(≤100节点) | 支持万级节点 |
| YAML 复杂度 | 通常 <50 行 | 通常 >100 行 |
| 适用场景 | 快速部署传统应用 | 复杂微服务架构 |
七、最佳实践建议
-
生产环境至少 3 个 Manager 节点(防止脑裂)
-
使用
constraints控制服务分布(如 SSD 节点跑数据库) -
启用健康检查(自动恢复故障容器)
--health-cmd "curl -f http://localhost || exit 1" -
资源限制必不可少
--limit-cpu 2 --limit-memory 1G
通过掌握这些核心概念和命令,您可以在生产环境中高效使用 Docker Swarm 管理容器化应用。对于中小型项目,Swarm 比 Kubernetes 更轻量易用,是理想的入门级编排工具。
郭慕荣博客园

浙公网安备 33010602011771号