首页 最新 热门 推荐

  • 首页
  • 最新
  • 热门
  • 推荐

Docker Compose与Docker Swarm集成:集群部署

  • 25-04-24 12:44
  • 3017
  • 8236
blog.csdn.net

在容器化应用的部署中,Docker Compose 和 Docker Swarm 是两个常用的工具。Docker Compose 用于定义和管理多容器应用,而 Docker Swarm 是 Docker 官方的容器编排工具,用于管理大规模的容器集群。将两者结合使用,可以实现高效的集群部署和管理。本文将详细介绍如何将 Docker Compose 项目部署到 Docker Swarm 集群中,并通过实际案例展示其应用场景。

5.1 Docker Swarm简介

5.1.1 什么是Docker Swarm?

Docker Swarm 是 Docker 官方的容器编排工具,用于将多个 Docker 主机组成一个虚拟的“集群”,并在集群上统一管理容器。Swarm 提供了以下核心功能:

  1. 集群管理:将多个 Docker 主机组成一个集群。

  2. 服务编排:以“服务”的形式定义容器的运行方式,支持自动扩展和负载均衡。

  3. 高可用性:通过多管理节点实现高可用性,支持故障转移。

  4. 弹性伸缩:根据负载动态调整服务的实例数量。

5.1.2 为什么需要Docker Swarm?

随着应用规模的扩大,单机部署已经无法满足需求。Docker Swarm 提供了强大的集群管理功能,支持大规模容器的部署和管理。它特别适合以下场景:

  1. 高可用性:通过多管理节点和自动故障转移,确保集群的高可用性。

  2. 弹性伸缩:根据负载动态调整服务实例数量,优化资源利用率。

  3. 负载均衡:自动分配流量到多个服务实例,提高系统的稳定性。

5.2 创建Docker Swarm集群

在开始之前,确保你有多个 Docker 主机(物理机或虚拟机)。以下是创建 Docker Swarm 集群的步骤:

5.2.1 初始化管理节点

在集群的主节点上运行以下命令,初始化 Swarm 模式:

bash复制

docker swarm init --advertise-addr <MANAGER-IP>
  • 是管理节点的 IP 地址,用于集群通信。

初始化完成后,Docker 会输出一个命令,用于将其他节点加入集群。

5.2.2 添加工作节点

在其他主机上运行以下命令,将它们加入集群:

bash复制

docker swarm join --token <JOIN-TOKEN> <MANAGER-IP>:2377
  • 是初始化管理节点时生成的令牌。

  • 是管理节点的 IP 地址。

5.2.3 查看集群状态

在管理节点上运行以下命令,查看集群的状态和节点信息:

bash复制

docker node ls

输出示例:

复制

  1. ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS ENGINE VERSION
  2. 1234567890abcdef manager1 Ready Active Leader 20.10.7
  3. 9876543210fedcba worker1 Ready Active 20.10.7

5.3 使用Docker Compose部署服务

Docker Compose 支持将项目部署到 Docker Swarm 集群中。通过 docker stack deploy 命令,可以将 docker-compose.yml 文件中的服务定义部署到 Swarm 集群。

5.3.1 编写 docker-compose.yml 文件

假设你有一个简单的 Web 应用,包含前端服务和数据库服务。项目结构如下:

复制

  1. my_web_app/
  2. ├── docker-compose.yml
  3. ├── frontend/
  4. │ └── index.html
  5. └── db/
  6. └── init.sql

docker-compose.yml 文件内容:

yaml复制

  1. version: '3.8'
  2. services:
  3. web:
  4. image: nginx:latest
  5. ports:
  6. - "80:80"
  7. deploy:
  8. replicas: 3
  9. update_config:
  10. parallelism: 2
  11. delay: 10s
  12. restart_policy:
  13. condition: on-failure
  14. db:
  15. image: mysql:5.7
  16. environment:
  17. MYSQL_ROOT_PASSWORD: example
  18. MYSQL_DATABASE: mydb
  19. deploy:
  20. replicas: 1
  21. update_config:
  22. parallelism: 1
  23. delay: 10s
  24. restart_policy:
  25. condition: on-failure
  26. volumes:
  27. - db_data:/var/lib/mysql
  28. volumes:
  29. db_data:

5.3.2 部署到Docker Swarm集群

在项目根目录下运行以下命令,将服务部署到 Swarm 集群:

bash复制

docker stack deploy -c docker-compose.yml my_stack
  • my_stack 是部署的栈(Stack)名称。

5.3.3 查看服务状态

运行以下命令,查看服务的状态:

bash复制

docker stack ps my_stack

输出示例:

复制

  1. ID NAME IMAGE NODE DESIRED STATE CURRENT STATE
  2. 1234567890abcdef my_stack_web.1 nginx:latest worker1 Running Running 10 seconds ago
  3. 9876543210fedcba my_stack_web.2 nginx:latest worker2 Running Running 10 seconds ago
  4. 34567890abcdef12 my_stack_web.3 nginx:latest manager1 Running Running 10 seconds ago
  5. 4567890abcdef1234 my_stack_db.1 mysql:5.7 manager1 Running Running 10 seconds ago

5.3.4 更新服务

如果需要更新服务配置,可以修改 docker-compose.yml 文件,然后重新运行部署命令:

bash复制

docker stack deploy -c docker-compose.yml my_stack

Swarm 会自动更新服务实例,根据配置逐步替换旧实例。

5.4 实战案例:部署一个高可用Web应用

为了更好地理解 Docker Compose 与 Docker Swarm 的集成,我们将通过一个实际案例展示如何部署一个高可用的 Web 应用。

应用架构

  1. 前端服务(Web):运行 Nginx,提供静态页面服务。

  2. 数据库服务(DB):运行 MySQL,存储应用数据。

  3. 负载均衡:通过 Swarm 的内置负载均衡功能,自动分配流量到多个前端服务实例。

项目结构

复制

  1. my_web_app/
  2. ├── docker-compose.yml
  3. ├── frontend/
  4. │ └── index.html
  5. └── db/
  6. └── init.sql

docker-compose.yml 文件内容

yaml复制

  1. version: '3.8'
  2. services:
  3. web:
  4. image: nginx:latest
  5. ports:
  6. - "80:80"
  7. deploy:
  8. replicas: 3
  9. update_config:
  10. parallelism: 2
  11. delay: 10s
  12. restart_policy:
  13. condition: on-failure
  14. db:
  15. image: mysql:5.7
  16. environment:
  17. MYSQL_ROOT_PASSWORD: example
  18. MYSQL_DATABASE: mydb
  19. deploy:
  20. replicas: 1
  21. update_config:
  22. parallelism: 1
  23. delay: 10s
  24. restart_policy:
  25. condition: on-failure
  26. volumes:
  27. - db_data:/var/lib/mysql
  28. volumes:
  29. db_data:

部署步骤

  1. 初始化 Swarm 集群:

    bash复制

    docker swarm init --advertise-addr <MANAGER-IP>
  2. 添加工作节点:

    bash复制

    docker swarm join --token <JOIN-TOKEN> <MANAGER-IP>:2377
  3. 部署服务:

    bash复制

    docker stack deploy -c docker-compose.yml my_stack
  4. 查看服务状态:

    bash复制

    docker stack ps my_stack
  5. 测试高可用性:

    • 访问 http://,你应该能看到前端页面的内容。

    • 关闭一个工作节点,观察 Swarm 是否自动将流量切换到其他实例。

5.5 注意事项

  1. 服务依赖:

    • 在 Swarm 模式下,depends_on 不会阻塞服务启动,因此需要确保服务之间的依赖关系正确处理。

  2. 网络配置:

    • Swarm 默认会创建一个覆盖网络(Overlay Network),服务之间可以通过服务名互相通信。

  3. 数据持久化:

    • 使用命名卷(Named Volumes)持久化数据,避免容器删除后数据丢失。

  4. 更新策略:

    • 配置合理的更新策略(如 update_config),避免更新过程中服务不可用。

  5. 高可用性:

    • 添加多个管理节点,确保 Swarm 集群的高可用性。

5.6 总结

通过本文的介绍,我们详细探讨了如何将 Docker Compose 项目部署到 Docker Swarm 集群中。通过 docker stack deploy 命令,可以轻松地将多容器应用部署到 Swarm 集群,实现高可用性和弹性伸缩。Docker Compose 与 Docker Swarm 的结合使用,为容器化应用的部署和管理提供了强大的支持。

在接下来的博客中,我们将继续探索 Docker Compose 的高级功能,例如在 CI/CD 中的应用、性能优化以及安全性最佳实践。敬请期待!


希望这篇博客对你有帮助!如果你对 Docker Compose 与 Docker Swarm 的集成有任何疑问,或者需要进一步的解释,请随时告诉我。

注:本文转载自blog.csdn.net的CarlowZJ的文章"https://blog.csdn.net/csdn122345/article/details/146242221"。版权归原作者所有,此博客不拥有其著作权,亦不承担相应法律责任。如有侵权,请联系我们删除。
复制链接
复制链接
相关推荐
发表评论
登录后才能发表评论和回复 注册

/ 登录

评论记录:

未查询到任何数据!
回复评论:

分类栏目

后端 (14832) 前端 (14280) 移动开发 (3760) 编程语言 (3851) Java (3904) Python (3298) 人工智能 (10119) AIGC (2810) 大数据 (3499) 数据库 (3945) 数据结构与算法 (3757) 音视频 (2669) 云原生 (3145) 云平台 (2965) 前沿技术 (2993) 开源 (2160) 小程序 (2860) 运维 (2533) 服务器 (2698) 操作系统 (2325) 硬件开发 (2492) 嵌入式 (2955) 微软技术 (2769) 软件工程 (2056) 测试 (2865) 网络空间安全 (2948) 网络与通信 (2797) 用户体验设计 (2592) 学习和成长 (2593) 搜索 (2744) 开发工具 (7108) 游戏 (2829) HarmonyOS (2935) 区块链 (2782) 数学 (3112) 3C硬件 (2759) 资讯 (2909) Android (4709) iOS (1850) 代码人生 (3043) 阅读 (2841)

热门文章

123
硬件开发
关于我们 隐私政策 免责声明 联系我们
Copyright © 2020-2025 蚁人论坛 (iYenn.com) All Rights Reserved.
Scroll to Top