当前位置: 首页 > news >正文

Docker Compose 和 Docker Swarm

Docker Swarm 和 Docker Compose 都是Docker 官方提供的容器编排工具,但它们的应用场景和目标有所不同,它们的关系可以概括为:分工不同、可以结合使用。

1. 🎯 用途和范围的不同

特性Docker ComposeDocker Swarm
应用范围单主机/单服务器多主机集群
主要目标管理单个应用的多个容器的生命周期(启动、停止、重建等)。管理整个集群的服务的部署、扩容、负载均衡和高可用性。
配置文件docker-compose.yml也使用docker-compose.yml,但通过docker stack deploy命令部署为Service (服务)。
编排类型多容器应用编排集群服务编排
命令行工具docker-compose up/downdocker swarm init/join,docker stack deploy
  • Docker Compose (多容器管理工具):

    • 它用于在单个 Docker 主机上定义和运行多容器 Docker 应用程序。
    • 通过一个docker-compose.yml文件,您可以定义组成应用程序的所有服务(如 Web 服务器、数据库、缓存等)及其配置、网络和卷。
    • 它非常适合用于开发环境、测试环境或在单个服务器上运行小型应用程序。
  • Docker Swarm (集群和服务编排工具):

    • 它是 Docker 的原生集群管理和编排工具,用于将多个 Docker 主机(节点)组合成一个虚拟的集群 (Swarm)。
    • 它用于在集群中部署、维护和扩展应用程序,提供高可用性、容错能力和负载均衡。
    • 它更适合用于生产环境,需要跨多个服务器进行扩展和保障服务不中断的场景。

2. 🤝 如何结合使用

最关键的一点是:您可以在 Docker Swarm 模式下使用docker-compose.yml文件。

  1. Compose 文件的复用:您定义好的docker-compose.yml文件不仅可以在单主机上用docker-compose up运行,也可以在 Docker Swarm 集群中通过docker stack deploy命令来部署。
  2. Stack (堆栈):当您在 Swarm 集群中部署docker-compose.yml文件时,它会被视为一个Stack (堆栈),文件中的每个服务都会被部署为 Swarm 的Service (服务)。
  3. 服务与容器:Swarm 的 Service 负责确保所需数量的容器(称为Tasks或副本)在集群中运行。Swarm 会自动处理服务间的负载均衡、故障转移和扩缩容。

总结来说:

  • Docker Compose帮助您定义多容器应用程序的结构和配置。
  • Docker Swarm使用这个定义文件(Stack),将应用部署到多主机环境中,并提供集群级别的管理和高可用性。

下面演示一个标准的流程,使用一个简单的docker-compose.yml文件来部署一个包含 Web 服务和 Redis 缓存的应用到 Docker Swarm 集群。

🚀 部署到 Docker Swarm 的演示步骤

假设您已经有了一个包含多个节点的 Docker Swarm 集群(至少一个 Manager 节点)。


第一步:准备docker-compose.yml文件

我们将创建一个名为demo-app.yml的文件,定义一个 Web 服务和相应的 Redis 缓存服务。

demo-app.yml

version:'3.8'services:web:image:nginx:latest# 使用 Nginx 作为简单的 Web 服务ports:-"8080:80"# 将集群的 8080 端口映射到容器的 80 端口deploy:replicas:3# **Swarm 特有配置:** 部署 3 个副本,实现负载均衡和高可用restart_policy:condition:on-failurenetworks:-app-netredis:image:redis:6.2-alpine# 使用 Redis 作为缓存服务networks:-app-net# 在 Swarm 中,默认情况下,服务只有 1 个副本,除非明确指定 replicasnetworks:app-net:driver:overlay# **Swarm 特有配置:** 必须使用 overlay 网络,以便跨节点通信

🔑 关键区别:在 Swarm 中,Compose 文件中的deploy部分是专门用于 Swarm 模式的配置,它定义了服务的高可用性(replicas)和重启策略等。此外,网络驱动必须使用overlay。


第二步:初始化或加入 Swarm 集群

如果您还没有 Swarm 集群,您需要在您的主机上初始化一个:

# 在 Manager 节点上执行docker swarm init

如果您已有一个集群,请确保您在 Manager 节点上执行后续的部署操作。


第三步:使用docker stack deploy部署应用

使用docker stack deploy命令,指定您的 Compose 文件和您希望给这个应用堆栈取的名字(例如:my-stack)。

# 在 Swarm Manager 节点上执行docker stack deploy -c demo-app.yml my-stack

命令详解:

  • -c demo-app.yml: 指定要使用的配置文件。
  • my-stack: 指定这个应用程序在 Swarm 中的堆栈名称 (Stack Name)。

输出示例:

Creating service my-stack_web Creating service my-stack_redis

第四步:检查部署状态

您可以使用以下命令检查部署后的服务状态:

1. 查看堆栈和服务列表
docker stackls# 查看已部署的堆栈docker stack services my-stack# 查看堆栈中包含的服务及其状态

示例输出 (docker stack services my-stack):

IDNAMEMODEREPLICASIMAGEPORTS
aj1…my-stack_webReplicated3/3nginx:latest*:8080->80/tcp
qb3…my-stack_redisReplicated1/1redis:6.2-alpine
2. 查看服务详情和任务 (Task) 分布
dockerservicepsmy-stack_web# 查看 web 服务的所有运行中的容器 (Tasks)

您会看到三个my-stack_web的任务,它们可能分布在集群的不同节点上,这表明Swarm 正在进行高可用和负载均衡。


第五步:访问应用

由于我们在web服务中将端口8080映射到了容器的80端口,您可以访问集群中任一节点的8080端口来访问 Nginx 服务。

# 假设任意一个节点(Manager 或 Worker)的 IP 是 192.168.1.10http://192.168.1.10:8080

得益于 Swarm 的路由网格 (Routing Mesh),无论哪个节点接收到请求,它都会自动将请求路由到正在运行的web服务副本中的一个。


第六步:清理应用

当您完成测试后,可以使用docker stack rm命令轻松移除整个应用堆栈:

docker stackrmmy-stack

总结:

docker-compose.yml文件是应用的蓝图。docker stack deploy命令将这个蓝图应用到整个Docker Swarm 集群,由 Swarm 来负责将应用转换为可扩展、高可用的Service。

http://www.cnnetsun.cn/news/43255.html

相关文章:

  • 28、嵌入式系统中的看门狗与电源管理
  • 38、事件跟踪工具全解析
  • 【URP】Unity[后处理]通道混合ChannelMixer
  • 90%前端都踩过的JS内存黑洞:从《你不知道的JavaScript》解锁底层逻辑与避坑指南
  • 阿里Qoder IDE革新编程范式:自然语言驱动的全流程AI开发平台
  • Flutter + FastAPI 30天速成计划自用并实践-第10天-组件化开发实践
  • 本地化部署腾讯混元大模型并集成Elasticsearch构建智能检索系统全攻略
  • 【面板数据】全球稀土贸易数据(2018-2024年)
  • 【后端】【Java】一文详解Spring Boot 统一日志与链路追踪实践
  • 无需运动恢复结构(SfM)的层级训练三维高斯溅射(3D Gaussian Splatting)
  • CS配合CrossC2插件,实现MacOS/Linux上线
  • 4、Puppet 入门:从基础使用到主从架构搭建
  • 线性代数(五)向量空间与子空间
  • matlab debug 调试程序
  • VibeVoice-Large-Q8:语音模型存储与性能的革命性突破——8位选择性量化技术深度解析
  • 腾讯开源双引擎AI模型:混元3D开创多模态创作新纪元,千倍效率革命重塑数字内容生产
  • Csharp学习笔记——常用类、集合框架、泛型、字典精华总结
  • 下载神器downkyi:5分钟掌握任务优先级管理技巧
  • 63.测试策略-领域模型测试集成测试实操方法-附测试框架选择
  • 1.2 主流大模型初探:解锁OpenAI、Gemini、Claude的强大能力
  • Ring-mini-linear-2.0:融合线性注意力与稀疏专家的下一代高效大语言模型
  • MFC消息处理机制
  • 商业级图像合成引擎6.0版本重磅发布:解锁跨场景视觉创作新范式
  • MyBatis-Plus与Spring整合(02--Service的代理)
  • 11、渗透测试实战:目标探索、利用与攻击行动
  • 16、攻击收尾:报告与撤离
  • 20、树莓派的替代项目探索
  • 事件查看器-事件ID
  • 单步出图革命:Consistency Model如何以100倍效率重构AI绘画产业格局
  • 搭建鸿蒙PC命令行适配环境测试hello程序