news 2026/9/21 17:37:07

Docker Compose 和 Docker Swarm

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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/joindocker 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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/22 2:25:58

28、嵌入式系统中的看门狗与电源管理

嵌入式系统中的看门狗与电源管理 看门狗的添加与使用 在嵌入式设备中,看门狗是一项常见需求。当关键服务停止工作时,通常需要采取行动,一般是重启系统。大多数嵌入式片上系统(SoC)都配备硬件看门狗,可通过 /dev/watchdog 设备节点进行访问。看门狗在启动时会设置一个…

作者头像 李华
网站建设 2026/9/21 13:43:23

38、事件跟踪工具全解析

事件跟踪工具全解析 在软件开发和系统调试过程中,了解事件的顺序和相互关系对于排查问题、优化性能至关重要。传统的统计采样工具虽然能提供一些信息,但对于事件的详细排序和关联分析却显得力不从心。函数跟踪则是一种更为强大的技术,它通过在代码中插入跟踪点来捕获事件信…

作者头像 李华
网站建设 2026/9/21 15:12:47

【URP】Unity[后处理]通道混合ChannelMixer

核心功能与参数‌通道混合原理‌通过修改输入颜色通道(Red/Green/Blue)对输出通道的贡献权重,实现如单色保留、色调偏移等效果。例如增加绿色通道对红色输出的影响会使绿色区域偏红。ChannelMixer在Unity URP后处理中的底层原理基于颜色通道的…

作者头像 李华
网站建设 2026/9/22 2:28:05

阿里Qoder IDE革新编程范式:自然语言驱动的全流程AI开发平台

阿里Qoder IDE革新编程范式:自然语言驱动的全流程AI开发平台 【免费下载链接】LFM2-1.2B-Extract 项目地址: https://ai.gitcode.com/hf_mirrors/LiquidAI/LFM2-1.2B-Extract 在人工智能与软件开发深度融合的浪潮中,阿里巴巴最新发布的Qoder IDE…

作者头像 李华
网站建设 2026/9/22 9:07:41

Flutter + FastAPI 30天速成计划自用并实践-第10天-组件化开发实践

Day 10 详细学习计划:组件化开发实践 内容有点多,有点吃不消,看了好多视频和文章才开始做这样天的内容,做出来是这个效果学习目标 理解 StatelessWidget 和 StatefulWidget学习组件化开发思想创建可复用的文章卡片组件实现组件间通信 知识点详…

作者头像 李华