单节点swarm方案实现
一、单节点 Swarm 基础概念
1.1 什么是单节点 Swarm?
单节点 Swarm 是在单个 Docker 主机上运行的 Swarm 模式集群,虽然不具备多节点的分布式特性,但可以:
-
学习 Swarm 核心概念
-
测试服务部署流程
-
开发环境快速验证
1.2 单节点 vs 多节点 Swarm
| 特性 | 单节点 Swarm | 多节点 Swarm |
|---|---|---|
| 高可用 | ❌ 不支持 | ✅ 支持 |
| 负载均衡 | 仅限本机 | 跨节点自动分配 |
| 故障转移 | ❌ 无 | ✅ 自动恢复 |
| 适用场景 | 开发/测试 | 生产环境 |
二、单节点 Swarm 环境搭建
2.1 环境准备
# 检查 Docker 版本(需 >= 1.12)
docker --version
# 安装 Docker Desktop(Mac/Windows)
# 或 Linux 安装:
curl -fsSL https://get.docker.com | sh
2.2 初始化单节点 Swarm
# 初始化 Swarm(自动使用当前主机IP)
docker swarm init
# 成功输出示例:
Swarm initialized: current node (abc123) is now a manager.
To add a worker to this swarm, run:
docker swarm join --token SWMTKN-1-xxx 192.168.1.100:2377
2.3 验证集群状态
# 查看节点信息
docker node ls
# 输出示例(单节点既是Manager也是Worker):
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
abc123* my-pc Ready Active Leader
三、服务部署与管理实战
3.1 部署第一个服务
# 部署Nginx服务(3个副本)
docker service create \
--name web \
--publish published=8080,target=80 \
--replicas 3 \
nginx:alpine
# 查看服务状态
docker service ls
3.2 服务扩缩容
# 扩容到5个副本
docker service scale web=5
# 缩容到2个副本
docker service update --replicas 2 web
3.3 服务更新与回滚
# 更新镜像版本
docker service update \
--image nginx:1.25-alpine \
--update-parallelism 1 \
--update-delay 10s \
web
# 回滚到上一版本
docker service rollback web
四、单节点网络配置
4.1 默认网络架构
4.2 创建自定义网络
# 创建overlay网络
docker network create -d overlay mynet
# 部署使用自定义网络的服务
docker service create \
--name api \
--network mynet \
--replicas 2 \
my-api:latest
五、数据持久化方案
5.1 单节点数据卷
# 创建命名卷
docker volume create db_data
# 挂载到服务
docker service create \
--name db \
--mount type=volume,source=db_data,target=/var/lib/mysql \
mysql:8.0
5.2 绑定挂载(开发环境)
docker service create \
--name dev-app \
--mount type=bind,source=/path/on/host,target=/app \
--mode global \
dev-image:latest
六、日志与监控
6.1 查看服务日志
# 实时查看日志
docker service logs -f web
# 显示时间戳
docker service logs --timestamps web
6.2 单节点监控方案
# 部署cAdvisor监控
docker service create \
--name cadvisor \
--mode global \
--mount type=bind,source=/,target=/rootfs,readonly=true \
--mount type=bind,source=/var/run,target=/var/run \
google/cadvisor:latest
# 访问监控界面
http://localhost:8080
七、常见问题解决
7.1 端口冲突
# 检查端口占用
netstat -tuln | grep 8080
# 修改服务发布端口
docker service update \
--publish-rm 8080:80 \
--publish-add 9090:80 \
web
7.2 服务无法启动
# 查看失败任务详情
docker service ps --no-trunc web
# 检查容器日志(替换CONTAINER_ID)
docker logs <CONTAINER_ID>
八、生产环境迁移准备
8.1 导出服务定义
# 查看服务配置
docker service inspect --pretty web > web-service.yaml
# 转换为Stack文件
docker stack deploy -c docker-compose.yml myapp
8.2 多节点迁移步骤
-
初始化多节点Swarm集群
-
将当前单节点作为Manager
-
添加Worker节点:
# 在Manager节点获取令牌 docker swarm join-token worker # 在Worker节点执行加入命令 docker swarm join --token <TOKEN> <MANAGER_IP>:2377
九、学习路径建议
9.1 新手练习路线
-
单服务部署 → 2. 多服务通信 → 3. 数据持久化 → 4. 滚动更新
9.2 推荐练习项目
# 部署WordPress+MySQL
docker service create --name db -e MYSQL_ROOT_PASSWORD=pass mysql:5.7
docker service create --name wordpress --link db -p 8080:80 wordpress
十、性能优化技巧
10.1 资源限制
docker service update \
--limit-cpu 2 \
--limit-memory 1G \
web
10.2 容器清理策略
# 自动清理停止的容器
docker system prune -f
# 清理未使用的网络和卷
docker network prune
docker volume prune
通过这个完整的单节点Swarm指南,您可以从零开始掌握Swarm的核心操作,为后续的多节点集群管理打下坚实基础。
郭慕荣博客园


浙公网安备 33010602011771号