news 2026/4/18 6:24:32

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/4/18 6:25:24

20、闪存文件系统全解析:从UBIFS到临时文件系统

闪存文件系统全解析:从UBIFS到临时文件系统 1. UBIFS文件系统 1.1 UBIFS概述 UBIFS利用UBI卷创建可靠的文件系统,它添加了子分配和垃圾回收功能,构建了完整的闪存转换层。与JFFS2和YAFFS2不同,它将索引信息存储在芯片上,因此挂载速度快,但挂载前附加UBI卷可能需要较长…

作者头像 李华
网站建设 2026/4/17 21:29:13

35、GDB调试全解析:从基础命令到内核调试

GDB调试全解析:从基础命令到内核调试 1. GDB命令文件 在每次运行GDB时,有些操作是需要重复进行的,比如设置sysroot。为了方便,可以将这些命令放在一个命令文件中,每次启动GDB时自动运行。GDB会按以下顺序读取命令: 1. $HOME/.gdbinit 2. 当前目录下的 .gdbinit …

作者头像 李华
网站建设 2026/4/18 1:57:13

D.二分查找-基础-2529. 正整数和负整数的最大计数

题目链接:2529. 正整数和负整数的最大计数(简单) 算法原理: 解法:二分查找 模板👇 优选算法-二分:18.在排序数组中查找元素的第一个和最后一个位置 利用题目的按 非递减顺序 排列的条件就可以二…

作者头像 李华
网站建设 2026/4/18 7:49:38

基于EMB电子机械制动器的摩擦片磨损不均问题优化方案

目录 一、背景介绍 二、基于EMB电子机械制动器进行摩擦片磨损控制的方法 三、总结 一、背景介绍 车辆制动系统的磨损量主要受制动力分配比例及制动系统结构设计两大因素影响。在传统液压制动系统中,由于前后轮的制动力分配、摩擦面积及摩擦片材料不同,将导致前后轮制动器摩…

作者头像 李华
网站建设 2026/4/18 2:00:04

人工智能在医疗领域的创新应用与未来发展趋势

人工智能在医疗领域的创新应用与未来发展趋势 【免费下载链接】embeddinggemma-300m-qat-q8_0-unquantized 项目地址: https://ai.gitcode.com/hf_mirrors/unsloth/embeddinggemma-300m-qat-q8_0-unquantized 随着科技的飞速发展,人工智能(AI&am…

作者头像 李华