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

16、Docker swarm-3

Docker swarm-3

本章要点

参考文档:Docker Swarm 全面总结,dockerSwarm nfs挂载,Docker之Swarm详细讲解,Docker多主机环境中使用NFS共享存储,容器技术—docker stack,纳米ai,参数 接上章

docker stack概述

Docker Stack是Docker生态系统中基于Swarm集群的容器编排工具,用于在多台机器上部署和管理具有依赖关系的服务

  • 核心功能

    • Docker Stack通过单个声明文件(compose文件)定义服务依赖关系,支持应用的完整生命周期管理,包括初始化部署、健康检查、扩容、更新和回滚等操作。它基于Swarm集群实现服务编排,适用于生产环境和大规模部署。
  • 与swarm的关系

    • Stack是Swarm集群的扩展,依赖Swarm提供底层集群管理功能(如服务发现、负载均衡等),解决了 Compose 仅能单机使用、Docker Service 无法编排多服务的痛点。
    • 它允许用户通过单个 docker-compose.yml 文件定义复杂应用(如包含前端、数据库、缓存的完整系统),并一键部署到 Swarm 集群,自动处理服务调度、网络配置和生命周期管理
  • 特性比较

    特性Docker StackDocker ServiceDocker Compose
    部署范围多主机 Swarm 集群多主机 Swarm 集群单主机
    服务数量支持多服务编排(含依赖)仅单服务部署支持多服务编排
    配置文件基于 docker-compose.yml命令行参数或 YAML基于 docker-compose.yml
    核心功能部署、扩缩容、更新、回滚单服务启停、扩缩容单机多服务启停
  • 功能说明

    • Stack 能够在单个声明文件中定义复杂的多服务应用,还提供了简单的方式来部署应用并管理其完整的生命周期:初始化部署 -> 健康检查 -> 扩容 -> 更新 -> 回滚,以及其他功能!可以简单地理解为 Stack 是集群下的Compose。

    • 由于 build 关键字在 Stack 中不受支持,不能在编排的过程中构建镜像,docker stack 部署用到的镜像必须是已经构建发布好并且发布到 docker 仓库的,在服务编排过程中各个节点直接从 docker 仓库拉取。

参数说明

  • docker stack deploy :部署或更新堆栈(基于 Compose 文件)

    选项说明示例
    -c / --compose-file指定 Compose 文件路径docker stack deploy -c docker-compose.yml mystack
    --bundle-file使用 DAB 文件(分布式应用包)docker stack deploy --bundle-file app.dab mystack
    --prune删除未在 Compose 文件中定义的服务docker stack deploy -c docker-compose.yml --prune mystack
  • docker stack ls :列出所有运行中的堆栈

    选项说明示例
    显示基础信息docker stack ls
  • docker stack ps : 查看堆栈中所有任务的运行状态

    选项说明示例
    -f / --filter按条件过滤任务(如状态、节点)docker stack ps -f "desired-state=running" mystack
    --no-trunc显示完整输出(不截断)docker stack ps --no-trunc mystack
  • docker stack rm : 删除指定堆栈及其所有服务

    选项说明示例
    移除堆栈资源docker stack rm mystack
  • docker stack services :列出堆栈内的所有服务

    选项说明示例
    -q / --quiet仅显示服务 IDdocker stack services -q mystack
    --format自定义输出格式(Go 模板语法)docker stack services --format "{{.Name}}: {{.Replicas}}" mystack
  • docker stack down : 停止堆栈中的任务

swarm挂载nfs

nfs搭建,继续补充上节的

  • 创建docker-compose-nfs.yml

    mkdir /data/tomcat_stack_nfs
    vim docker-compose-nfs.yaml
    services:tomcat:image: tomcat:8.5.100container_name: t1ports:- "8088:8080"networks:- tomcat_nfsvolumes:- tomcat_data:/usr/local/tomcat/webappsdeploy:replicas: 3volumes:tomcat_data:driver: localdriver_opts:type: nfso: addr=10.4.50.139,rwdevice: ":/opt/volumetest/volume/"networks:tomcat_nfs:# 如果是swarm集群,则使用overlaydriver: overlay    
    
  • 运行

    tomcat_stack_nfs]# docker stack deploy -c docker-compose-nfs.yaml tnfs1
    Creating network tnfs1_tomcat_nfs
    Creating service tnfs1_tomcattomcat_stack_nfs]# curl  http://10.4.50.139:8088/index.jsp
    <div class="hostname">cc7d3b612e24</div>
    <div class="hostname">1d8ce96a35d2</div>
    <div class="hostname">f4d5910060cc</div>
    
  • 查看通过stack编排出来的网络与存储

    [root@node167 ~]# docker inspect tnfs1_tomcat_data
    [{"CreatedAt": "2025-10-31T13:41:13+08:00","Driver": "local","Labels": {"com.docker.stack.namespace": "tnfs1"},"Mountpoint": "/var/lib/docker/volumes/tnfs1_tomcat_data/_data","Name": "tnfs1_tomcat_data","Options": {"device": ":/opt/volumetest/volume/","o": "addr=10.4.50.139,rw","type": "nfs"},"Scope": "local"}
    ]# 查看对应网络
    [root@node167 ~]# docker network ls0n0gkryqsga4   tnfs1_tomcat_nfs   overlay   swarm[root@node167 ~]# docker network inspect tnfs1_tomcat_nfs
    [{"Name": "tnfs1_tomcat_nfs","Id": "0n0gkryqsga449luhzo1vt6jm","Created": "2025-10-31T13:42:23.597292224+08:00","Scope": "swarm","Driver": "overlay","IPAM": {"Driver": "default","Options": null,"Config": [{"Subnet": "10.0.3.0/24","Gateway": "10.0.3.1"}]},}
    ]
    

多服务 Swarm 集群部署

这里部署的服务有三个 (nginx服务,visualizer 服务,portainer 服务) 除了 nginx 服务作为示例之外,visualizer(官方地址)和 portainer(官方地址)都是集群 GUI 管理服务。

  • 示例

    • 先用加速下载visualizer与portainer

      ~]# docker pull docker.gh-proxy.com/dockersamples/visualizer
      ~]# docker tag docker.gh-proxy.com/dockersamples/visualizer:latest dockersamples/visualizer:latest~]# docker pull docker.gh-proxy.com/portainer/portainer
      ~]# docker tag docker.gh-proxy.com/portainer/portainer:latest portainer/portainer:latest
      
    • 编写 docker-compose.yml 文件

      ~]# mkdir swarmGUI
      ~]# cd swarmGUI
      ~]# cat docker-compose.ymlservices:visualizer:image: dockersamples/visualizerports:- "8080:8080"volumes:- "/var/run/docker.sock:/var/run/docker.sock"deploy:replicas: 1placement:constraints: [node.role == manager]portainer:image: portainer/portainerports:- "9000:9000"volumes:- "/var/run/docker.sock:/var/run/docker.sock"deploy:replicas: 1placement:constraints: [node.role == manager]
      
    • 部署服务

      [root@node139 swarmGUI]# docker stack deploy -c docker-compoe-portainer.yaml portain
      Creating network portain_default
      Creating service portain_visualizer
      Creating service portain_portainer[root@node139 swarmGUI]# docker stack ls
      NAME      SERVICES
      portain   2   <-- 这个是有两个服务
      tnfs1     1   <-- 上面的示例[root@node139 swarmGUI]# docker stack ps portain
      ID             NAME                   IMAGE                             NODE      DESIRED STATE   CURRENT STATE           ERROR     PORTS
      zmfb5aj09ujx   portain_portainer.1    portainer/portainer:latest        node139   Running         Running 2 minutes ago             
      6pyxrmmuats2   portain_visualizer.1   dockersamples/visualizer:latest   node139   Running         Running 2 minutes ago            
      
    • 访问并配置,设置密码

      请添加图片描述

      如果长时间不用,它会提示个安全问题, 去服务器上找到对应的容器id docker restart 容器id

      请添加图片描述

      请添加图片描述
      请添加图片描述

    • 访问 dockersamples/visualizer 8080的那个服务, 以页面形式展示每台节点,还是蛮不错的,按颜色分组

      请添加图片描述

Docker Swarm 网络管理

  • Swarm 集群产生两种不同类型的流量

    • 控制和管理层面:包括 Swarm 消息管理等,例如请求加入或离开Swarm,这种类型的流量总是被加密的。(涉及到集群内部的hostname、ip-address、subnet、gateway等)
    • 应用数据层面:包括容器与客户端的通信等。(涉及到防火墙、端口映射、网口映射、VIP等)
  • 在 Swarm Service 中有三个重要的网络概念

    • Overlay networks :覆盖物网络,顾名思义是附着在主机底层网络之上的网络, 这个网络保证了不同主机之间容器通信,手动创建

    • ingress network:进入网络,顾名思义是外部客户端访问服务时,服务节点间负载均衡(节点在开放端口上收到请求,上交给IPVS,选择容器),是一种特殊的overlay网络创建集群的时候自动创建
      初始化或加入 Swarm 集群时会自动创建 ingress 网络,大多数情况下,用户不需要自定义配置,但是 docker 17.05 和更高版本可以自定义网络

    • docker_gwbridge是一种桥接网络,将 overlay 网络(包括 ingress 网络)连接到一个单独的 Docker 守护进程的物理网络。默认情况下,服务正在运行的每个容器都连接到本地 Docker 守护进程主机的 docker_gwbridge 网络。

    • docker_gwbridge 网络在初始化或加入 Swarm 时自动创建。大多数情况下,用户不需要自定义配置,但是 Docker 允许自定义。

      • 在初始化或刚加入 Swarm 集群时,会创建一个 Ingress 和 docker-gwbridge 网络

        ~]# docker network ls
        NETWORK ID     NAME               DRIVER    SCOPE
        df4690d294a7   docker_gwbridge    bridge    local
        ntuv8sh1figk   ingress            overlay   swarm
        

总结一下

组件作用范围核心能力依赖关系
Dockerfile开发环境构建单镜像
Docker Compose单机/开发编排多容器应用依赖本地镜像
Docker Swarm多主机集群集群资源调度与容器编排需初始化Swarm模式
Docker StackSwarm集群部署Compose定义的多服务依赖Swarm与Compose文件
http://www.dtcms.com/a/564796.html

相关文章:

  • A模块 系统与网络安全 第四门课 弹性交换网络-4
  • Jenkins 在构建 Java 项目并操作 Docker 时 CPU 会突然飙高
  • IP冲突排查方法
  • 爱漫画-只做精品的韩漫网站企业首次建设网站方案流程
  • Fiddler配置方法与使用教程:HTTP/HTTPS抓包分析、代理设置与调试技巧详解(开发者实战指南)
  • UML建模工具Enterprise Architect如何通过威胁建模保障系统安全
  • Android + Flutter打包出来的APK体积太大
  • risc-v vector.S解析
  • QT Quick QML项目音乐播放器15----设置全局背景与颜色、播放页面背景切换
  • 嵌入式系统与RISC-V:开源架构驱动的下一代创新
  • 【Android】Drawable 基础
  • Android和h5页面相互传参
  • 直接做的视频网站怎么用网站模板
  • 通信人C++自学
  • Azure OpenAI 资源监控与成本分析实战指南
  • Notepad++ 安装 json格式化 插件
  • CSS实现居中的8中方法
  • 在阿里云做的网站怎么进后台国际营销信息系统
  • (undone) CFD 学习 (5) 阅读简单求解器理解非结构网格 + 更复杂的 FVM
  • 福州网站建设机构东莞网站推广行者seo08
  • 唐山教育平台网站建设推广的软件有哪些
  • 算法24.0
  • 算法沉淀第十一天(序列异或)
  • 算法微调之代码助手模型实战
  • C++ 分治 归并排序解决问题 力扣 493. 反转对 题解 每日一题
  • 算法:从特殊到一般——拆解两两交换链表节点的递归解法
  • 代码随想录打卡day23:435.无重叠区间
  • 算法 day 42
  • VMware虚拟机安装CentOs系统与网络服务设置
  • 深入理解 Java 反射机制:原理、实践与风险防控​