怎么设置Docker Swarm

发布时间:2021-12-08 13:39:34 作者:iii
来源:亿速云 阅读:181
# 怎么设置Docker Swarm

## 目录
1. [Docker Swarm简介](#docker-swarm简介)
2. [环境准备](#环境准备)
3. [初始化Swarm集群](#初始化swarm集群)
4. [节点管理](#节点管理)
5. [服务部署与管理](#服务部署与管理)
6. [网络配置](#网络配置)
7. [存储卷管理](#存储卷管理)
8. [安全配置](#安全配置)
9. [监控与日志](#监控与日志)
10. [常见问题排查](#常见问题排查)
11. [最佳实践](#最佳实践)

---

## Docker Swarm简介

Docker Swarm是Docker官方提供的容器编排工具,允许用户将多个Docker主机组成一个虚拟集群,通过简单的命令实现容器的分布式部署和管理。与Kubernetes相比,Swarm更轻量、易上手,适合中小规模的应用场景。

**核心概念**:
- **Manager节点**:负责集群状态维护、任务调度
- **Worker节点**:执行容器任务
- **服务(Service)**:定义容器部署模板
- **任务(Task)**:服务的最小调度单元

---

## 环境准备

### 硬件要求
- 至少2台Linux主机(物理机或虚拟机)
- 每台机器1GB+ RAM(生产环境建议4GB+)
- 10GB+ 磁盘空间

### 软件要求
1. 在所有节点安装Docker Engine(版本20.10+)
   ```bash
   # Ubuntu安装示例
   sudo apt-get update
   sudo apt-get install docker-ce docker-ce-cli containerd.io
  1. 确保节点间网络互通

    • 开放端口:2377/tcp(集群管理)、7946/tcp+udp(节点通信)、4789/udp(覆盖网络)
  2. 配置主机名解析(可选)

    # 在/etc/hosts中添加节点IP和主机名映射
    192.168.1.10 manager01
    192.168.1.11 worker01
    

初始化Swarm集群

创建管理节点

# 在主管理节点执行
docker swarm init --advertise-addr <MANAGER_IP>

# 输出示例:
Swarm initialized: current node (xyz) is now a manager.
To add a worker to this swarm, run the following command:
    docker swarm join --token SWMTKN-1-xxx 192.168.1.10:2377

添加工作节点

在其他节点上运行join命令:

docker swarm join --token <WORKER_TOKEN> <MANAGER_IP>:2377

验证集群状态

# 在管理节点执行
docker node ls

# 输出示例:
ID       HOSTNAME   STATUS  AVLABILITY  MANAGER STATUS
abc123   manager01  Ready   Active        Leader
def456   worker01   Ready   Active

节点管理

提升/降级节点角色

# 提升Worker为Manager
docker node promote worker01

# 降级Manager为Worker
docker node demote manager02

节点排水(维护模式)

# 停止接受新任务并迁移现有容器
docker node update --availability drain worker01

移除节点

# 在要移除的节点上执行
docker swarm leave

# 在Manager上强制删除
docker node rm worker02

服务部署与管理

创建服务

docker service create \
  --name web_server \
  --replicas 3 \
  -p 80:80 \
  nginx:latest

常用参数说明

参数 说明
--replicas 设置副本数量
--publish 端口映射
--mount 挂载存储卷
--env 环境变量
--constraint 部署约束

服务维护命令

# 扩缩容
docker service scale web_server=5

# 滚动更新
docker service update --image nginx:1.21 web_server

# 查看服务详情
docker service ps web_server

网络配置

创建覆盖网络

docker network create -d overlay my_network

网络类型对比

类型 说明
overlay 跨节点通信
bridge 单机桥接网络
host 使用主机网络

服务连接网络

docker service create \
  --network my_network \
  --name service1 \
  my_image

存储卷管理

创建数据卷

docker volume create db_data

挂载到服务

docker service create \
  --mount type=volume,source=db_data,target=/var/lib/mysql \
  --name mysql \
  mysql:5.7

挂载类型


安全配置

启用TLS加密

# 初始化集群时启用自动TLS
docker swarm init --advertise-addr <IP> --autolock

密钥管理

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

# 使用密钥
docker service create \
  --secret db_password \
  --name secure_service \
  alpine:latest

监控与日志

查看服务日志

docker service logs -f web_server

监控方案

  1. cAdvisor:容器资源监控

    docker service create \
     --mode global \
     --name cadvisor \
     --mount type=bind,source=/,target=/rootfs \
     google/cadvisor
    
  2. Prometheus+Grafana:集群级监控


常见问题排查

节点无法加入集群

  1. 检查防火墙设置
  2. 验证token是否正确
  3. 确认端口已开放

服务无法启动

# 查看失败原因
docker service ps --no-trunc <SERVICE_NAME>

网络连接问题

# 测试覆盖网络
docker exec -it <CONTNER> ping <OTHER_CONTNER_IP>

最佳实践

  1. 生产环境建议

    • 部署3或5个Manager节点保证高可用
    • 使用--autolock保护加密密钥
    • 为服务设置资源限制(CPU/MEM)
  2. 性能优化

    docker service create \
     --limit-cpu 2 \
     --limit-memory 1GB \
     --reserve-cpu 0.5 \
     --reserve-memory 500MB \
     my_service
    
  3. 备份恢复

    • 定期备份/var/lib/docker/swarm目录
    • 使用docker swarm ca --rotate更新CA证书

本文总计约3600字,涵盖了Docker Swarm从入门到生产部署的核心知识点。如需更深入的学习,建议参考官方文档和实际动手实验。 “`

该Markdown文档包含: 1. 结构化标题和目录 2. 代码块和表格等格式元素 3. 实操命令和配置示例 4. 关键概念说明 5. 故障排查指南 6. 生产环境建议

可通过Markdown阅读器或转换为PDF/HTML获得更好阅读体验。

推荐阅读:
  1. docker如何搭建集群
  2. Docker Compose 网络设置详解

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

docker swarm

上一篇:Nacos源码编译的示例分析

下一篇:Docker Engine和Docker Machine是什么

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》