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

第十四篇:《Docker Swarm 生产实践:堆栈部署与配置管理》

上一篇文章介绍了 Swarm 的基础命令。但在生产环境中,我们更希望用声明式的方式定义整个应用栈(多个服务、网络、卷、密钥等)。Docker Stack 允许你使用熟悉的 docker-compose.yml 文件(版本 3 或更高)部署到 Swarm 集群。同时,Swarm 提供了 Secret 和 Config 来管理敏感数据和配置文件。本文将带你完成一个生产级应用的堆栈部署。

一、Docker Stack 概述
docker stack 命令是 Swarm 模式下对 Compose 文件的部署工具。它兼容 Compose 文件格式的 version 3 子集,并将整个应用栈作为一个整体进行管理。

对比:

docker-compose up:适用于单机开发环境。

docker stack deploy:适用于 Swarm 集群,支持多副本、滚动更新、secret/config 等。

二、编写 stack.yml(生产版 Compose)
以下是一个完整的 WordPress + MySQL 堆栈文件,包含 secret、网络、持久卷。

version:'3.8'services:wordpress:image:wordpress:latestports:-"80:80"networks:-frontendenvironment:WORDPRESS_DB_HOST:mysql:3306WORDPRESS_DB_USER:wordpressWORDPRESS_DB_PASSWORD_FILE:/run/secrets/db_passwordWORDPRESS_DB_NAME:wordpresssecrets:-db_passworddeploy:replicas:2update_config:parallelism:1delay:10srestart_policy:condition:on-failureresources:limits:cpus:'0.5'memory:512M
image: mysql:8.0networks:-backend environment: MYSQL_ROOT_PASSWORD_FILE:/run/secrets/db_root_password MYSQL_DATABASE: wordpress MYSQL_USER: wordpress MYSQL_PASSWORD_FILE:/run/secrets/db_password secrets:-db_root_password-db_password volumes:-mysql-data:/var/lib/mysql deploy: placement: constraints:[node.role==manager]# 可以约束到 manager 节点resources: limits: cpus:'1'memory:1G networks: frontend: driver: overlay backend: driver: overlay internal:true# 禁止外部访问volumes: mysql-data: driver:localsecrets: db_root_password: external:false# 使用外部 secret 或自动创建db_password: external:false

三、管理 Secrets
Secret 用于存储敏感数据(密码、TLS 证书)。在 Swarm 中,secret 在创建时存储在集群的 Raft 存储中,并被加密传输。只有被授权的服务才能以文件形式挂载到容器内(/run/secrets/<secret_name>)。

3.1 从文件创建 secret

echo"rootpass123"|dockersecret create db_root_password -echo"wordpresspass"|dockersecret create db_password -

3.2 列出 secret

dockersecretls

3.3 在 stack.yml 中引用
如上所示,在 service 的 secrets 字段列出需要使用的 secret 名称,并在 environment 中使用 _FILE 后缀变量(WordPress、MySQL 官方镜像支持读取密码文件)。

3.4 外部 secret
如果 secret 已在 Swarm 中创建,可以设置 external: true:

secrets:db_root_password:external:trueexternal_name:my-db-root-pass

四、管理 Configs
Config 用于非敏感配置信息(如 Nginx 配置文件、环境变量配置)。与 secret 类似,但不加密(更适合 git 管理)。

4.1 创建 config

dockerconfig create nginx-conf ./nginx.conf

4.2 在 stack 中使用

services:nginx:image:nginxconfigs:-source:nginx-conftarget:/etc/nginx/conf.d/default.confmode:0440configs:nginx-conf:external:true

五、部署堆栈

dockerstack deploy-cstack.yml myapp

myapp 是堆栈名称,资源会以 myapp_ 为前缀。

查看堆栈和服务:

dockerstacklsdockerstackpsmyappdockerservicels--filterlabel=com.docker.stack.namespace=myapp

六、更新堆栈
修改 stack.yml 后,再次执行 docker stack deploy 会触发滚动更新。Swarm 会按照 update_config 策略更新服务。

七、服务约束与标签
可以利用节点标签约束服务部署位置。

# 给节点打标签dockernodeupdate --label-addstorage=ssd worker1# 在服务中约束deploy: placement: constraints: - node.labels.storage==ssd - node.role==worker

八、滚动更新与健康检查
在服务定义中加入健康检查:

services:wordpress:image:wordpresshealthcheck:test:["CMD","curl","-f","http://localhost"]interval:30stimeout:3sretries:3

配合 update_config 的 monitor 参数,Swarm 可以监控新实例的健康状态,如果失败则停止更新。

九、删除堆栈

dockerstackrmmyapp

这会删除所有相关服务、网络,但不会删除 volumes 和 secrets(需手动清理)。

十、生产环境最佳实践
Manager 节点数量:奇数,推荐 3 或 5。

持久存储:使用 NFS、Rex-Ray 等共享存储插件,保证 Pod 迁移后数据不丢失。

日志管理:使用 logging 驱动(如 syslog、fluentd)集中收集。

监控:部署 Prometheus + Grafana 监控 Swarm 集群(可通过 docker service 部署)。

CI/CD:在流水线中执行 docker stack deploy,实现蓝绿或金丝雀发布。

网络安全:overlay 网络默认加密(可启用 --opt encrypted)。

备份:定期备份 Raft 存储(/var/lib/docker/swarm)。

十一、与 Kubernetes 的对比

十二、小结
通过 Docker Stack,你可以将多服务应用以声明式方式部署到 Swarm 集群,并享受滚动更新、secret、config 等生产级特性。Swarm 是中小团队尝试容器编排的绝佳入口。

http://www.rkmt.cn/news/1446307.html

相关文章:

  • 生物识别:从身份验证到操作系统,便利与风险并存的技术演进
  • MATLAB版带拉格朗日修正的SQP约束优化求解工具包
  • 别再翻老黄历了!我整理了这份‘现代活动择日’避坑指南(含实用工具推荐)
  • OptiScaler终极指南:如何免费解锁所有显卡超采样技术,打造完美游戏画质
  • 2026年母婴店进销存选型指南:奶粉纸尿裤多规格如何精准管理 - 奔跑123
  • OBS Studio画质增强实战:从模糊到清晰的魔法工具箱
  • PrismLauncher-Cracked:重新定义离线游戏自由的Minecraft启动器
  • 告别环境配置烦恼:用VSCode插件一键搞定ESP32开发环境(基于ESP-IDF 5.2.1)
  • MATLAB版自然场景文字定位工具包:含SWT核心算法、19张实测图与全流程可视化模块
  • Llama 2 7B-hf部署教程:从本地服务器到云端的3种部署方案
  • SilentPatch:让经典GTA游戏在现代系统上完美运行的终极修复方案
  • 三步实现专业级黑苹果EFI配置:OpCore-Simplify智能自动化工具详解
  • 抖音视频怎么保存到相册全场景操作方法与异常问题解决方案 - 科技热点发布
  • 3步终极指南:用OpenCore Legacy Patcher让老旧Mac焕发新生
  • 公共卫生干预优化:基于数据与模型的疫苗接种策略动态调整
  • Kronos金融大模型实战指南:构建专业级市场预测系统的10个核心技术方案
  • 别再满世界找ChromeDriver了!一个国内镜像站搞定所有版本下载与配置(Win/Mac通用)
  • 深耕本地多年:2026 北京翡翠回收商家筛选,添价收实体老店估价更公允 - 薛定谔的梨花猫
  • 玻璃钢储罐咨询全攻略:从准备到落地的避坑指南 - 资讯速览
  • 告别ChatGPT‘假死’:Mac/Win双系统下,Chrome/Edge/Safari浏览器语言设置避坑指南
  • 名表回收北京 2026 选购窍门:实地走访连锁门店,添价收鉴定报价双靠谱 - 薛定谔的梨花猫
  • 如何利用MiniCPM-V-4.6-gguf实现高效图像理解:完整教程指南
  • ProteinNet:蛋白质结构预测的标准化机器学习数据集
  • 2026年塑料托盘厂家推荐榜单:吹塑塑料托盘/围板箱塑料托盘/物流塑料托盘/仓储塑料托盘/川字塑料托盘/网格塑料托盘品牌精选 - 企业推荐官【官方】
  • 告别双系统!在Win11的WSL2里无痛搭建Ubuntu 18.04 + ROS Melodic开发环境
  • 2026年6月武汉拍摄视频宣传片公司TOP5权威排行榜,不容错过! 武汉广告片/武汉宣传片/武汉宣传片制作公司/武汉广告片拍摄公司 - 企业推荐官
  • 2000-2026.3上市公司违规处罚最新统计数据
  • 屋面地下室防水工程公司推荐,杭州宏德防水实地案例多 - 玖叁鹿
  • 郑州市 油烟机维修、油烟机清洗 上门服务|维小达 油烟机顶吸、油烟机侧吸、油烟机中式、油烟机欧式、油烟机商用大吸力一站式维保清洗服务 - 维小达科技
  • KBG穿线管厂家(天津服务区) - 速递信息