在DockerSwarm中以堆栈形式部署分布式应用

立即解锁
发布时间: 2025-09-13 00:14:41 阅读量: 3 订阅数: 44 AIGC
# 在 Docker Swarm 中以堆栈形式部署分布式应用 ## 1. 应用配置与数据库连接问题 当应用配置为使用 Postgres 作为数据库时,配置对象会将设置加载到副本中。然而,当你访问 `http://localhost:8080`(如果你使用 Windows 系统,也可以从其他机器访问你的机器),会发现应用无法正常工作。查看 Web 服务的日志,会显示大量关于数据库连接的错误。这是因为虽然部署配置了 Web 应用使用 Postgres,但配置对象没有提供数据库的连接详细信息,导致连接失败。 ## 2. 使用秘密管理机密设置 ### 2.1 秘密的概念与特性 秘密是 Swarm 中由集群管理的资源,其工作方式与配置对象几乎完全相同。你可以从本地文件创建秘密,该秘密会存储在集群数据库中。然后在服务规范中引用该秘密,其内容会在运行时加载到容器文件系统中。与配置对象的关键区别在于,你只能在工作流程的一个点以纯文本形式读取秘密:即当秘密从 Swarm 加载到容器内部时。 秘密在集群中的整个生命周期都是加密的。数据以加密形式存储在管理器共享的数据库中,并且秘密只会交付给计划运行需要该秘密的副本的节点。从管理节点传输到工作节点时,秘密是加密的,只有在容器内部才会解密,显示原始文件内容。 ### 2.2 创建和检查秘密 以下是创建和检查秘密的操作步骤: ```bash # 从本地 JSON 文件创建秘密 docker secret create todo-list-secret ./todo-list/secrets/secrets.json # 使用 --pretty 标志检查秘密以查看数据 docker secret inspect --pretty todo-list-secret ``` 使用秘密的用户体验与配置对象相同,唯一的区别是一旦秘密被存储,就无法读取其内容。检查秘密只会显示资源的元数据,而不是实际数据。 ### 2.3 在应用部署中使用秘密 当秘密存储在 Swarm 中后,我们可以使用引用该秘密的服务规范部署应用的新版本。以下是 `v4.yml` 文件中关键部分的示例: ```yaml services: todo-web: image: diamol/ch06-todo-list ports: - 8080:80 configs: - source: todo-list-config target: /app/config/config.json secrets: - source: todo-list-secret target: /app/config/secrets.json #... secrets: todo-list-secret: external: true ``` 秘密的内容是更多的 JSON 数据,加载到应用查找配置源的另一个路径中。这会为应用设置连接详细信息,使其使用 Postgres 容器作为数据存储。部署应用后,无论哪个 Web 副本为用户提供服务,用户都会获得相同的项目列表。 ### 2.4 部署更新后的应用 部署应用的最新版本,提供缺失的数据库连接字符串并修复 Web 应用: ```bash # 部署应用的新版本 docker stack deploy -c ./todo-list/v4.yml todo # 检查堆栈的副本 docker stack ps todo ``` 虽然 Compose 文件中只有 Web 服务定义发生了变化,但运行此命令时,Docker 会显示正在更新两个服务。实际上,它不会对数据库服务进行任何更新,这是 CLI 稍微误导性的输出。 ### 2.5 配置对象和秘密的更新 配置对象和秘密一旦在集群中创建就无法更新。如果需要更新应用的配置,需要执行以下三个步骤: 1. 创建一个具有更新内容且名称与先前对象不同的新配置对象或秘密。 2. 在 Compose 文件中更新应用使用的配置对象或秘密的名称,指定新名称。 3. 从更新后的 Compose 文件部署堆栈。 这个过程意味着每次更改配置时都需要更新服务,即运行中的容器会被新容器替换。与 Kubernetes 不同,Kubernetes 允许更新集群中现有的配置和秘密对象,但这也会带来一些问题,因为有些应用平台会监视配置文件的更改,而有些则不会,所以更改可能会被忽略,最终还是需要替换容器。Swarm 在这方面是一致的,每次推出配置更改时都需要更新服务。 ### 2.6 服务更新的必要性 更新服务并不需要担心。每当应用有新功能需要部署,或者所使用的依赖项或镜像所基于的操作系统有安全更新时,都需要推出容器更新。至少,你应该每月发布一次更新,这也是 Docker Hub 上大多数基于操作系统的镜像的更新频率。 ## 3. 在 Swarm 中使用卷存储数据 ### 3.1 Docker 卷的概念 Docker 卷是与容器具有独立生命周期的存储单元。任何需要容器化的有状态应用都可以使用卷进行存储。卷作为容器文件系统的一部分出现,但实际上存储在容器外部。应用升级时会替换容器,并将卷附加到新容器,使新容器从先前容器拥有的所有数据开始。 ### 3.2 集群中卷的存储差异 在编排器中,卷的概念相同,即在 Compose 文件中为服务添加卷挂载规范,副本会将该卷视为本地目录。然而,数据的存储方式有很大差异。在集群中,有多个节点可以运行容器,每个节点都有自己的磁盘来存储本地卷。维持更新之间状态的最简单方法是使用本地卷,但存在一个问题:替换副本可能会被调度到与原始节点不同的节点上,从而无法访问原始节点的数据。 ### 3.3 为节点添加标签 你可以为服务指定特定节点,这样更新将始终在拥有数据的节点上运行。以下是为节点添加标签的操作步骤: ```bash # 查找节点 ID 并添加标签 docker nod ```
corwn 最低0.47元/天 解锁专栏
买1年送3月
继续阅读 点击查看下一篇
profit 400次 会员资源下载次数
profit 300万+ 优质博客文章
profit 1000万+ 优质下载资源
profit 1000万+ 优质文库回答
复制全文

相关推荐

SW_孙维

开发技术专家
知名科技公司工程师,开发技术领域拥有丰富的工作经验和专业知识。曾负责设计和开发多个复杂的软件系统,涉及到大规模数据处理、分布式系统和高性能计算等方面。
最低0.47元/天 解锁专栏
买1年送3月
百万级 高质量VIP文章无限畅学
千万级 优质资源任意下载
千万级 优质文库回答免费看
立即解锁

专栏目录

最新推荐

领导者的自我关怀:应对挑战与压力的关键

### 领导者的自我关怀:应对挑战与压力的关键 在领导他人的过程中,我们常常会遇到各种挑战和压力。这些挑战不仅来自于帮助他人改善状况时的不确定性,还来自于领导工作本身所带来的各种压力。因此,学会自我关怀对于领导者来说至关重要。 #### 帮助他人的挑战 在帮助他人时,我们可能会遇到一些难以应对的情况。有些人会将自己视为受害者,总是消极对待一切,期望最坏的结果。他们没有改变现状的意愿,这会让我们陷入救援者的角色中无法自拔。一旦我们发现试图帮助的人有这种受害者心态,或许就该建议他们寻求专业帮助,然后我们适时抽身。 帮助他人改善状况时,成功的衡量标准往往难以确定,而且具有很强的主观性。干预措施

PHP与JavaScript应用的托管、报告与分发指南

# PHP与JavaScript应用的托管、报告与分发指南 ## 1. 引言 在当今数字化时代,Web应用的托管、报告生成以及数据分发是数据处理流程中的重要环节。本文将介绍如何利用PHP和JavaScript进行用户数据的收集与分析,同时详细阐述如何将相关应用部署到Amazon Lightsail这一轻量级云托管平台上。 ## 2. 数据收集方法 ### 2.1 主动数据收集 - **二进制数据收集**:通过`ajax.php`、`binary.html`和`create.sql`等文件实现,利用jQuery库进行交互。示例代码如下: ```php // ajax.php部分代码 try

工业自动化功能安全实战:PLC与控制系统设计的8大关键要点(一线经验总结)

![工业自动化功能安全实战:PLC与控制系统设计的8大关键要点(一线经验总结)](https://toyoda.jtekt.co.jp/e/products/toyopuc/toyopuc-pcs-j/images/toyopuc_pcs_j4.jpg) # 摘要 工业自动化系统的快速发展对功能安全提出了更高要求。本文系统阐述了功能安全的基本概念及其在工业自动化中的核心重要性,分析了IEC 61508、IEC 62061等国际标准体系与安全完整性等级(SIL)的划分逻辑,并探讨了风险评估与安全需求分析的关键流程。文章重点介绍了在PLC系统设计中实现功能安全的技术路径,包括硬件选型、冗余设

模糊综合评价与多目标优化协同建模方法:复杂问题决策新思路,实战必看

![模糊综合评价与多目标优化协同建模方法:复杂问题决策新思路,实战必看](https://x0.ifengimg.com/res/2023/46902B1569CA5BA4AE0E0F8C5ED6641DBAB9BA74_size119_w1080_h363.png) # 摘要 本文系统探讨了模糊综合评价与多目标优化建模的基本理论、方法流程及其协同应用机制。首先,介绍了模糊集合理论、隶属函数构建及综合评价模型的步骤,并分析了其在实际应用中的局限性。随后,阐述了多目标优化的数学表达、经典求解算法及其评价与可视化手段。进一步地,提出了模糊综合评价与多目标优化的协同建模框架,明确了二者在建模流

汽车软件架构评估:ATAM方法解析

### 汽车软件架构评估:ATAM方法解析 #### 1. 可用性与可靠性场景 可用性和可靠性场景会对产品的外部质量产生影响,能让我们对因未满足性能要求(非功能需求)而产生的潜在缺陷进行分析。以下是相关场景介绍: - **场景12**:系统出现故障并通知用户,系统可能会以降级方式继续运行。需要探讨存在哪些优雅降级机制。 - **场景13**:检测集成到系统中的第三方或商用现货(COTS)软件中存在的软件错误,以进行安全分析。 #### 2. 性能场景 性能场景同样会影响产品的外部质量,可用于分析系统满足性能要求的能力。相关场景如下: - **场景14**:启动汽车,系统需在5秒内激活。 -

AdobeIllustrator图像处理与项目分享技巧

# Adobe Illustrator 图像处理与项目分享技巧 ## 一、图像操作基础 ### 1.1 创建和编辑不透明度蒙版 在处理图像时,不透明度蒙版是一个非常实用的工具。以下是创建和编辑不透明度蒙版的详细步骤: 1. **设置默认颜色**:按下 D 键,为新矩形设置默认描边(黑色,1 磅)和填充(白色),这样便于选择和移动矩形。 2. **选择对象**:选择选择工具,按住 Shift 键并点击海滩图像,同时选中该图像。 3. **创建蒙版**:点击属性面板标签以显示属性面板,点击“不透明度”打开透明度面板,然后点击“创建蒙版”按钮。点击该按钮后,它会变为“释放”,若再次点击,图像将不再

【MATLAB非线性效应仿真突破】:克尔效应与色散影响全图谱

![【MATLAB非线性效应仿真突破】:克尔效应与色散影响全图谱](https://d3i71xaburhd42.cloudfront.net/223cf2489c613e15103c9351ec8b636f5413f445/40-Figure4-1.png) # 摘要 本文系统探讨了MATLAB在非线性光学仿真中的关键应用,围绕非线性光学效应的理论基础、数值建模方法及仿真实验展开深入分析。首先介绍了非线性光学的基本概念与核心效应,重点剖析了克尔效应与色散效应的物理机制及其数学描述。随后,详细构建了基于非线性薛定谔方程的数值模型,并采用分步傅里叶法在MATLAB中实现仿真求解。通过典型仿

LNR互操作异常定位方法论:从信令跟踪到根因分析完整路径

![LNR互操作异常定位方法论:从信令跟踪到根因分析完整路径](https://www.telecomhall.net/uploads/db2683/optimized/3X/d/a/da592fb7aadc7208b25968ef013723929a381eed_2_1024x504.jpeg) # 摘要 LNR互操作异常是5G网络部署与演进过程中影响服务连续性与用户体验的关键问题。本文系统梳理了LNR(LTE-NR)互操作的基本原理与信令流程,深入解析了切换、重定向及重建等关键流程中的异常行为及其触发机制。结合多维度信令跟踪与数据采集方法,本文提出了异常识别与分类的技术路径,并构建了

动态目标成像中MUSIC算法性能评估与优化:实测数据对比(含Matlab仿真)

![MUSIC算法](https://rtklibexplorer.wordpress.com/wp-content/uploads/2021/11/image-1.png) # 摘要 MUSIC算法作为一种经典的高分辨率波达方向(DOA)估计方法,在动态目标成像中具有广泛应用。本文系统阐述了MUSIC算法的理论基础,包括信号模型、子空间分解与谱估计原理,并分析其在动态场景下的适应性。通过仿真与实测数据验证,评估了算法在不同快拍数、信噪比及多目标运动模型下的性能表现。研究进一步探讨了MUSIC算法的优化策略,涵盖子空间估计改进、压缩感知结合以及面向动态目标的自适应设计。最后,本文展望了深

【SMA UMAT开发进阶技巧】:隐式与显式求解差异全解析

![形状记忆合金](https://q5.itc.cn/images01/20240115/8c386c543afe4a5fab0069bc09138d23.jpeg) # 摘要 本文系统探讨了基于ABAQUS平台的形状记忆合金(SMA)用户材料子程序(UMAT)开发全过程。从SMA的本构关系理论基础出发,详细分析了其核心力学行为如马氏体相变、超弹性与形状记忆效应,并深入解析了UMAT在有限元分析中的实现机制与接口逻辑。文章对比研究了显式与隐式求解框架在SMA建模中的适用性与挑战,分别提出了相应的开发流程、调试策略与优化方法。结合具体工程应用案例,验证了所开发UMAT模型在热-力耦合分析