swarm如何搭建docker集群

发布时间:2021-11-18 17:16:46 作者:小新
来源:亿速云 阅读:150
# Swarm如何搭建Docker集群

## 前言

Docker Swarm是Docker官方提供的容器编排工具,它允许用户将多个Docker主机组成一个虚拟的集群,实现容器的分布式部署和管理。与Kubernetes相比,Swarm更加轻量级且易于上手,适合中小规模的生产环境。本文将详细介绍如何从零开始搭建一个Docker Swarm集群。

---

## 一、环境准备

### 1.1 服务器要求
- 至少2台Linux服务器(推荐Ubuntu 20.04/CentOS 7+)
- 所有节点需安装Docker Engine(版本18.06+)
- 节点间网络互通(关闭防火墙或开放端口:2377/tcp, 7946/tcp+udp, 4789/udp)
- 主机名解析(建议配置`/etc/hosts`或DNS)

### 1.2 安装Docker
在所有节点执行以下命令:
```bash
# Ubuntu
sudo apt-get update && sudo apt-get install -y docker.io

# CentOS
sudo yum install -y docker
sudo systemctl start docker && sudo systemctl enable docker

二、初始化Swarm集群

2.1 创建管理节点

选择一台服务器作为管理节点(Manager):

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 <MANAGER_IP>:2377

2.2 添加工作节点

在其他服务器上执行上述输出的docker swarm join命令:

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

2.3 验证集群状态

在管理节点执行:

docker node ls

应看到所有节点状态为Ready,Manager节点显示Leader


三、集群网络配置

3.1 创建覆盖网络

Swarm使用overlay网络实现跨主机容器通信:

docker network create -d overlay my_network

3.2 验证网络

docker network ls | grep overlay

四、部署服务

4.1 创建示例服务

部署一个Nginx服务(3个副本):

docker service create \
  --name web \
  --replicas 3 \
  --publish published=8080,target=80 \
  --network my_network \
  nginx:latest

4.2 服务管理命令

命令 功能
docker service ls 查看服务列表
docker service ps <SERVICE> 查看服务详情
docker service scale <SERVICE>=5 扩容副本数
docker service update --image nginx:alpine web 滚动更新

五、集群高可用

5.1 添加多个管理节点

为防止单点故障,建议部署3个Manager节点:

# 在第二个Manager节点执行
docker swarm join-token manager
# 使用输出的命令加入其他节点

5.2 查看Raft共识状态

docker node ls -q | xargs docker node inspect -f '{{.ManagerStatus.Reachability}}'

六、数据持久化方案

6.1 使用Volume

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

6.2 网络存储方案

推荐NFS或云存储(AWS EBS/Azure Disk等)。


七、监控与日志

7.1 启用Swarm监控

docker swarm update --monitor=true

7.2 集中式日志

使用ELK或Fluentd收集日志:

docker service create --name logspout \
  --mode global \
  --mount type=bind,source=/var/run/docker.sock,target=/var/run/docker.sock \
  gliderlabs/logspout syslog+tls://logs.example.com:514

八、安全加固

  1. 加密通信:启用TLS
    
    docker swarm init --tlsverify
    
  2. 限制管理节点:仅允许可信IP加入
  3. 定期轮换Token
    
    docker swarm join-token --rotate
    

常见问题排查

  1. 节点无法加入集群

    • 检查端口是否开放
    • 验证Token是否过期
  2. 服务无法跨节点通信

    • 确认overlay网络已创建
    • 检查docker network inspect my_network
  3. 管理器节点宕机

    • 剩余管理器需满足多数存活(3节点集群至少2个在线)

结语

通过以上步骤,我们完成了Docker Swarm集群的搭建和基础配置。Swarm的简洁性使其成为快速部署容器化应用的理想选择。对于更复杂的场景,可以结合CI/CD流水线实现自动化部署。下一步建议探索: - 与Traefik集成实现服务发现 - 使用Portainer进行可视化管控 - 结合Prometheus监控集群性能

注意:生产环境建议阅读官方文档获取最新安全实践。 “`

(全文约1300字)

推荐阅读:
  1. 管理Docker Swarm 集群
  2. docker Swarm集群配置

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

swarm docker

上一篇:mysqldump流程举例分析

下一篇:MySQL 5.7 online DDL特性有什么优点

相关阅读

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

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