单节点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 多节点迁移步骤

  1. 初始化多节点Swarm集群

  2. 将当前单节点作为Manager

  3. 添加Worker节点:

    # 在Manager节点获取令牌
    docker swarm join-token worker
    
    # 在Worker节点执行加入命令
    docker swarm join --token <TOKEN> <MANAGER_IP>:2377

九、学习路径建议

9.1 新手练习路线

  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的核心操作,为后续的多节点集群管理打下坚实基础。

posted @ 2025-06-30 11:29  郭慕荣  阅读(70)  评论(0)    收藏  举报