Docker容器编排:Linux-Tutorial中的Docker Swarm入门实战
你是否还在为多容器应用的部署头疼?服务器资源利用率低、容器间网络配置复杂、故障恢复需要手动操作?本文将通过Linux-Tutorial项目中的实战案例,带你快速掌握Docker Swarm(容器集群)的核心技能,实现容器的自动化部署与管理。读完本文你将能够:搭建Swarm集群环境、使用docker-compose编排多服务应用、实现服务的动态扩缩容、配置高可用负载均衡。
Docker Swarm基础概念
Docker Swarm是Docker官方提供的容器编排工具,可将多个Docker主机组成一个虚拟的"超级计算机",统一管理容器的生命周期。相比单机Docker,Swarm提供三大核心能力:
- 集群管理:通过Manager节点管理Worker节点,实现多主机统一控制
- 服务编排:使用声明式语法定义服务,自动处理容器调度与部署
- 高可用保障:服务故障自动恢复,支持滚动更新与回滚
Linux-Tutorial项目中提供了完整的Docker环境支持,基础Docker安装可参考Docker 安装与使用。Swarm作为Docker Engine内置功能,无需额外安装,只需通过命令初始化即可启用。
Swarm核心组件
Docker Swarm架构
- Manager节点:负责集群管理决策,包括服务调度、状态维护、集群配置等
- Worker节点:运行实际容器,接收并执行Manager节点的任务
- Service:定义容器的运行模板,包括镜像、端口、环境变量等配置
- Task:Swarm集群的最小调度单元,通常对应一个容器实例
搭建Swarm集群环境
环境准备
本次实战使用3台CentOS 7主机,节点规划如下:
| 节点角色 | IP地址 | 硬件配置 |
|---|---|---|
| Manager | 192.168.1.10 | 2核4G |
| Worker1 | 192.168.1.11 | 2核4G |
| Worker2 | 192.168.1.12 | 2核4G |
所有节点需先安装Docker环境,可使用项目提供的自动化脚本快速部署:
# 使用项目中的Docker安装脚本
sh favorite-file/shell/install_docker_centos7.sh
初始化Swarm集群
在Manager节点执行初始化命令:
# 初始化Swarm集群,指定Manager节点的IP地址
docker swarm init --advertise-addr 192.168.1.10
成功执行后会输出类似以下内容:
Swarm initialized: current node (abc123) is now a manager.
To add a worker to this swarm, run the following command:
docker swarm join --token SWMTKN-1-49nj1cmql0jkz5s954yi3oex3nedyz0fb0xx14ie39trti4wxv-8vxv8rssmk743ojnwacrr2e7c 192.168.1.10:2377
To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.
添加Worker节点
在两台Worker节点分别执行上一步输出的join命令:
docker swarm join --token SWMTKN-1-49nj1cmql0jkz5s954yi3oex3nedyz0fb0xx14ie39trti4wxv-8vxv8rssmk743ojnwacrr2e7c 192.168.1.10:2377
验证集群状态
在Manager节点执行以下命令检查集群状态:
# 查看集群节点
docker node ls
# 输出示例
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
abc123def456 * manager-node Ready Active Leader 20.10.12
ghj789ikl012 worker1-node Ready Active 20.10.12
mno345pqr678 worker2-node Ready Active 20.10.12
使用docker-compose编排服务
Linux-Tutorial项目的favorite-file/gravitee-docker-compose目录提供了多个docker-compose实战案例,我们以platform/docker-compose.yml为基础,改造为Swarm适用的版本。
创建docker-compose.yml
version: '3.8'
services:
nginx:
image: nginx:1.15-alpine
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx/nginx.conf:/etc/nginx/nginx.conf
- ./nginx/ssl:/etc/ssl
deploy:
replicas: 1
placement:
constraints: [node.role == manager]
mongodb:
image: mongo:3.4
volumes:
- mongodb_data:/data/db
deploy:
replicas: 1
resources:
limits:
cpus: '0.5'
memory: 512M
elasticsearch:
image: elasticsearch:6.4.0
environment:
- http.host=0.0.0.0
- transport.host=0.0.0.0
- xpack.security.enabled=false
ulimits:
nofile: 65536
volumes:
- elasticsearch_data:/usr/share/elasticsearch/data
deploy:
replicas: 1
resources:
limits:
cpus: '1'
memory: 2G
apim_gateway:
image: graviteeio/gateway:latest
environment:
- gravitee_management_mongodb_uri=mongodb://mongodb:27017/gravitee
- gravitee_reporters_elasticsearch_endpoints_0=http://elasticsearch:9200
depends_on:
- mongodb
- elasticsearch
deploy:
replicas: 3
update_config:
parallelism: 1
delay: 10s
restart_policy:
condition: on-failure
volumes:
mongodb_data:
elasticsearch_data:
核心配置说明
-
deploy配置:Swarm模式特有的部署配置,包括:
- replicas:指定服务副本数
- placement:节点调度约束
- resources:资源限制
- update_config:滚动更新策略
-
持久化存储:使用命名卷(volumes)而非宿主机绑定挂载,确保数据在集群中可用
-
服务发现:通过服务名自动发现,如
mongodb://mongodb:27017
部署与管理Swarm服务
部署栈服务
在Manager节点执行以下命令部署整个应用栈:
# 部署栈,指定栈名称和compose文件
docker stack deploy -c docker-compose.yml gravitee
查看服务状态
# 查看栈中的所有服务
docker stack services gravitee
# 查看服务运行日志
docker service logs -f gravitee_apim_gateway
# 查看单个服务详情
docker service inspect gravitee_apim_gateway
动态扩缩容
当流量增加时,可快速扩展服务实例数量:
# 将apim_gateway服务扩展到5个实例
docker service scale gravitee_apim_gateway=5
# 缩减到2个实例
docker service scale gravitee_apim_gateway=2
滚动更新服务
更新服务镜像版本,实现零停机部署:
# 更新服务镜像
docker service update --image graviteeio/gateway:1.30.0 gravitee_apim_gateway
Swarm会自动执行滚动更新:先启动新实例,健康检查通过后停止旧实例,逐个替换所有副本。
服务监控与维护
查看集群资源使用情况
# 查看节点资源使用
docker node ps
# 查看容器资源占用
docker stats
备份数据卷
项目中提供了Prometheus监控配置,可参考platform/prometheus.yml配置监控系统。数据备份可使用以下命令:
# 备份mongodb数据卷
docker run --rm -v gravitee_mongodb_data:/source -v $(pwd):/backup alpine tar -czf /backup/mongodb_backup.tar.gz -C /source .
故障处理示例
当某个Worker节点故障时,Swarm会自动将该节点上的容器调度到其他健康节点。可通过以下步骤模拟和观察:
- 在Worker节点执行
docker node update --availability drain worker1-node将节点设为不可用 - 观察容器自动迁移到其他节点:
docker stack ps gravitee - 恢复节点:
docker node update --availability active worker1-node
总结与进阶
通过本文实战,你已掌握Docker Swarm的核心操作:从集群搭建、服务编排到动态扩缩容。Linux-Tutorial项目还提供了更多高级场景示例:
进阶学习路径:
- 配置Swarm可视化管理界面(如Portainer)
- 实现跨主机网络加密与安全策略
- 结合GitLab CI/CD实现自动部署
- 学习Docker Swarm与Kubernetes的选型对比
收藏本文,关注Linux-Tutorial项目获取更多容器编排实战案例。下期将带来"Docker Swarm与外部存储集成"的深度教程。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



