你是否在寻找一个能直观展示Docker Swarm容器编排能力的实战案例?本文将以example-voting-app项目为基础,通过5个核心步骤,带您掌握分布式应用的容器化部署全流程。完成阅读后,您将能够独立使用Docker Swarm部署多服务架构,并理解容器网络、数据持久化和服务扩缩容的实现原理。
项目架构解析
example-voting-app采用微服务架构设计,包含5个核心组件,通过Docker容器实现服务解耦与通信。架构图清晰展示了各服务间的数据流向:
核心服务组件及功能:
- 投票应用(vote/):Python编写的前端应用,提供用户投票界面
- 结果展示(result/):Node.js实现的结果展示界面,实时更新投票数据
- 工作节点(worker/):.NET编写的后台服务,处理投票数据异步任务
- Redis:消息队列,暂存投票请求
- PostgreSQL:数据库服务,持久化存储投票结果
服务间通过Docker网络实现隔离与通信,docker-stack.yml定义了完整的服务关系和部署策略。
环境准备与初始化
前置条件
- 安装Docker Desktop(Windows/Mac)或Docker Engine+Docker Compose(Linux)
- Git环境(用于克隆代码仓库)
项目获取
git clone https://gitcode.com/GitHub_Trending/ex/example-voting-app
cd example-voting-app
Swarm集群初始化
首次使用需初始化Docker Swarm集群:
docker swarm init
若为单节点环境,直接执行上述命令;多节点部署需添加
--advertise-addr <MANAGER-IP>参数指定管理节点IP
核心配置文件解析
Docker Swarm部署清单
docker-stack.yml是Swarm部署的核心配置文件,定义了服务组合、网络配置和部署策略:
version: "3.9"
services:
redis:
image: redis:alpine
networks:
- frontend
db:
image: postgres:15-alpine
volumes:
- db-data:/var/lib/postgresql/data
networks:
- backend
vote:
image: dockersamples/examplevotingapp_vote
ports:
- 5000:80
deploy:
replicas: 2 # 部署2个投票应用实例
result:
image: dockersamples/examplevotingapp_result
ports:
- 5001:80
worker:
image: dockersamples/examplevotingapp_worker
deploy:
replicas: 2 # 部署2个工作节点
关键配置说明
- 服务副本策略:vote和worker服务通过
replicas: 2实现多实例部署,提供高可用性 - 网络隔离:frontend和backend两个网络实现服务间通信隔离
- 数据持久化:PostgreSQL使用命名卷db-data存储数据,防止容器重启数据丢失
- 健康检查:healthchecks/目录包含PostgreSQL和Redis的健康检查脚本,确保服务可用
部署与验证流程
1. 执行Swarm部署
docker stack deploy --compose-file docker-stack.yml vote
2. 查看服务状态
docker stack services vote
预期输出应显示所有服务处于running状态,每个服务的副本数与配置一致。
3. 访问应用服务
- 投票界面:http://localhost:5000 (来自vote/templates/index.html)
- 结果界面:http://localhost:5001 (来自result/views/index.html)
4. 数据持久化验证
- 在投票界面提交多个投票
- 执行
docker service rm vote_db删除数据库服务 - 重新部署
docker stack deploy --compose-file docker-stack.yml vote - 访问结果界面,验证历史投票数据是否保留
高级操作与最佳实践
服务扩缩容
通过调整副本数实现服务水平扩展:
# 将投票应用扩展到3个实例
docker service scale vote_vote=3
扩展操作会自动在Swarm集群节点间均衡分配容器实例
滚动更新
修改docker-stack.yml后执行以下命令实现无停机更新:
docker stack deploy --compose-file docker-stack.yml vote
Swarm会采用滚动更新策略,先启动新容器,验证健康后再终止旧容器。
健康检查配置
项目提供的健康检查脚本确保服务可用:
- PostgreSQL健康检查:healthchecks/postgres.sh
- Redis健康检查:healthchecks/redis.sh
在生产环境中,建议在服务定义中添加健康检查配置:
healthcheck:
test: ["CMD", "/healthchecks/postgres.sh"]
interval: 10s
timeout: 5s
retries: 3
总结与进阶方向
通过example-voting-app的部署实践,我们掌握了Docker Swarm的核心功能:服务编排、网络管理、数据持久化和服务扩缩容。官方文档README.md还提供了Kubernetes部署方案,可通过k8s-specifications/目录下的配置文件进行多平台部署对比学习。
下一步学习建议
- 尝试修改docker-stack.yml中的服务副本数,观察Swarm的负载均衡效果
- 添加自定义健康检查脚本,优化服务可用性检测
- 配置Swarm可视化工具(如Portainer),实现图形化管理
- 对比学习Docker Compose(docker-compose.yml)与Swarm部署的差异
掌握容器编排技术是现代DevOps工程师的核心能力,example-voting-app作为Docker官方示例项目,为我们提供了贴近生产环境的实践场景。立即动手操作,体验容器化部署的魅力吧!
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考




