基于 CentOS 的 Docker Swarm 集群管理实战指南
之前是基于ubuntu系统,此文以CentOS进行不同配置管理和实战说明,特别加上了FAQ常见问题。

一、环境准备
1.1 系统要求
操作系统 :CentOS 7/8(推荐 7.9 + 版本)
内核版本 :需高于 3.10(通过uname -r
验证)
硬件配置:管理节点建议 2 核 4G,工作节点建议 1 核 2G
网络配置:所有节点需互通,关闭防火墙或放行以下端口:
\# 开放Swarm通信端口
firewall-cmd --zone=public --add-port=2377/tcp --permanent
firewall-cmd --zone=public --add-port=7946/tcp --permanent
firewall-cmd --zone=public --add-port=7946/udp --permanent
firewall-cmd --zone=public --add-port=4789/udp --permanent
firewall-cmd --reload
1.2 安装 Docker(国内源优化)
卸载旧版本:
sudo yum remove docker \\
docker-client \\
docker-client-latest \\
docker-common \\
docker-latest \\
docker-latest-logrotate \\
docker-selinux \\
docker-engine-selinux \\
docker-engine
配置国内源:
\# 阿里云Docker CE源
sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sudo yum-config-manager --enable docker-ce-stable
安装 Docker CE:
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum install -y docker-ce docker-ce-cli containerd.io
配置镜像加速器:
\# 创建配置文件
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": \["https://mirror.ccs.tencentyun.com", "https://docker.m.daocloud.io"]
}
EOF
启动服务:
sudo systemctl start docker
sudo systemctl enable docker
1.3 关闭 SELinux(可选)
sudo setenforce 0
sudo sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
二、单管理节点集群配置
2.1 初始化 Swarm
\# 选择管理节点执行
sudo docker swarm init --advertise-addr <管理节点IP>
2.2 添加工作节点
获取加入令牌:
sudo docker swarm join-token worker
\# 输出示例:
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-3nuu8r2s3z9eq2o3tl47wjgacpfuxpg64eqsc8wb5t8buijzbx-d2qw8h52loc0ithrvnosxxxxx 172.xx.xx.12:2377
在工作节点执行加入命令:
sudo docker swarm join \\
\--token \<WORKER\_TOKEN> \\
<管理节点IP>:2377
2.3 验证集群状态
sudo docker node ls
三、三管理节点高可用集群配置
3.1 初始化主管理节点
\# 在第一个管理节点执行
sudo docker swarm init --advertise-addr \<Manager1-IP>
3.2 添加其他管理节点
获取管理节点令牌:
sudo docker swarm join-token manager
\# 输出示例:
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
在 Manager2 和 Manager3 执行加入命令:
sudo docker swarm join \\
\--token \<MANAGER\_TOKEN> \\
\<Manager1-IP>:2377
3.3 验证集群状态
sudo docker node ls
四、集群管理实战
4.1 服务部署
\# 创建Nginx服务(3副本)
sudo docker service create \\
\--name nginx \\
\--replicas 3 \\
-p 80:80 \\
nginx
4.2 滚动更新
\# 更新镜像版本
sudo docker service update \\
\--image nginx:1.23.3 \\
nginx
\# 回滚更新
sudo docker service update \\
\--rollback nginx
4.3 节点管理
\# 查看节点状态
sudo docker node ls
\# 移除节点
sudo docker node rm <节点ID>
\# 晋升为管理节点
sudo docker node promote <节点ID>
五、常见问题与解决方案(FAQ)
5.1 Docker 安装问题
Q1:yum 安装 Docker 时提示依赖错误 A:执行sudo yum update -y
更新系统包后重试。
Q2:镜像拉取速度慢A:配置国内镜像加速器(参考 1.2 节),或使用阿里云 / 腾讯云专有加速器。
5.2 Swarm 集群问题
Q1:节点无法加入集群A:
检查防火墙规则(参考 1.1 节)
确认节点间网络连通性(ping
/telnet
)
重新获取加入令牌(docker swarm join-token
)
Q2:管理节点配置错误导致集群不可用A:
使用docker swarm leave --force
强制退出问题节点
主节点执行docker swarm init --force-new-cluster
重建集群
重新加入其他节点
Q3:Raft 协议脑裂问题A:确保管理节点数量为奇数(1/3/5),避免同时离线超过半数节点。
5.3 服务部署问题
Q1:服务启动失败 A:检查镜像是否存在(docker image ls
),或通过docker service logs <服务名>
查看日志。
Q2:滚动更新失败A:
检查更新策略(--update-parallelism
/--update-delay
)
手动回滚至稳定版本
排查应用程序错误
六、性能优化建议
资源限制:
sudo docker service create \\
\--name nginx \\
\--limit-cpu 2 \\
\--memory 1g \\
nginx
存储优化:
sudo docker service create \\
\--name mysql \\
\--mount type=volume,source=mysql-data,destination=/var/lib/mysql \\
mysql
网络优化:
sudo docker network create \\
-d overlay \\
\--subnet 10.0.0.0/24 \\
my-overlay-network
七、生产环境最佳实践
节点监控:
\# 安装Portainer可视化工具
sudo docker service create \\
\--name portainer \\
\--publish 9000:9000 \\
\--mount type=bind,source=/var/run/docker.sock,destination=/var/run/docker.sock \\
portainer/portainer-ce
数据备份:
\# 备份Raft日志
sudo tar czvf raft-data.tar.gz /var/lib/docker/volumes/
安全加固:
\# 启用TLS认证
sudo docker swarm init --tlsverify \\
\--tlscacert ca.pem \\
\--tlscert server.pem \\
\--tlskey server-key.pem \\
\--advertise-addr \<IP>
八、总结
本文通过实战案例详细介绍了基于 CentOS 的 Docker Swarm 集群搭建与管理,涵盖单节点和三节点高可用配置、服务部署、滚动更新及故障处理等核心操作。通过国内源优化和防火墙配置,显著提升了镜像拉取速度和集群通信效率。在生产环境中,建议结合监控工具和数据备份策略,确保容器化应用的稳定运行。