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

Docker Stack(堆栈) 部署多服务集群,多服务编排

1、Docker Stack简介

Docker Stack(堆栈) 是在 Swarm 上管理服务堆栈的工具。而在以前文章docker swarm集群搭建
介绍的 Docker Swarm 只能实现对单个服务的简单部署,于是就引出了Docker Stack。

上面我们介绍到

  • docker-compose:可以在一台机器上使用docker-compose.yml轻松部署多个服务(如nginx,php,mysql)
  • docker swarm:将一个服务部署至多台机器(如nginx,部署到机器1,机器2,机器3)

那Docker Stack(堆栈) 是将docker-compose和docker swarm结合起来,在多台服务器集群,部署多个服务。Docker Stack 使用与 Docker Compose 相同的 YAML 文件格式来定义服务堆栈。

2、Docker Stack部署应用

同样以部署nginx为例子,用YAML文件格式编排来部署应用。

2.1、编写YAML文件

创建文件夹,在此文件夹进行工作

mkdir stack-web
cd stack-web

编辑docker-compose.yml

vim docker-compose.yml

内容如下:

version: '3.6'
services:nginx:image: nginx:latestenvironment:- TZ=Asia/Shanghaideploy:replicas: 2restart_policy:condition: on-failureupdate_config: parallelism: 2delay: 10smonitor: 30smax_failure_ratio: 0.1order: start-firstports:- 80:80- 443:443networks:- nginx_netnetworks:nginx_net:external: true

在 Swarm 中,你可以使用相同的 Compose 文件来部署这个应用。但有些参数是 Swarm 特有的配置,比如副本数量和部署模式,如deploy标签下是针对堆栈我们在原有 Compose 文件里增加的内容。

上面关于deploy的参数说明:

  • restart_policy

配置容器的重新启动,代替 restart

condition:值可以为 none 、on-failure 以及 any(默认)

delay:尝试重启的等待时间,默认为 0

max_attempts:在放弃之前尝试重新启动容器次数(默认:从不放弃)。如果重新启动在配置中没有成功 window,则此尝试不计入配置 max_attempts 值。例如,如果 max_attempts 值为 2,并且第一次尝试重新启动失败,则可能会尝试重新启动两次以上。windows:在决定重新启动是否成功之前的等时间,指定为持续时间(默认值:立即决定)。

  • update_config

配置更新服务,用于无缝更新应用(rolling update)

parallelism:一次性更新的容器数量

delay:更新一组容器之间的等待时间。

failure_action:如果更新失败,可以执行的的是 continue、rollback 或 pause (默认)

monitor:每次任务更新后监视失败的时间(ns|us|ms|s|m|h)(默认为 0)

max_failure_ratio:在更新期间能接受的失败率

order:更新次序设置,top-first(旧的任务在开始新任务之前停止)、start-first(新的任务首先启动,并且正在运行的任务短暂重叠)(默认 stop-first)

2.2、部署堆栈

接下来用以下命令运行部署堆栈

sudo docker stack deploy -c docker-compose.yml nginx-stack

这个命令会创建一个名为 nginx-stack 的堆栈,并根据 Compose 文件中的定义创建服务。
参数说明:
–bundle-file:【实验阶段】分布式应用程序包文件的路径
-c --compose-file :Stack File 路径
–prune:删除不再被引用的服务
–resolve-image: 查询 Registry 以解决​​镜像摘要和支持的平台可选值:always(默认)、changed、never
–with-registry-auth:向 Swarm 代理发送 Registry 认证详细信息

部署完成后可以用docker stack ls 和 docker stack ps 查看服务节点。
也可以用上面的swarm命令查看服务,docker service ls 和docker service ps。

运行结果如下显示,部署完成。

ubuntu@ubuntu:~/stack-web$ sudo docker stack deploy -c docker-compose.yml nginx-stack
Since --detach=false was not specified, tasks will be created in the background.
In a future release, --detach=false will become the default.
Creating service nginx-stack_nginxubuntu@ubuntu:~/stack-web$ sudo docker stack ls
NAME          SERVICES
nginx-stack   1ubuntu@ubuntu:~/stack-web$ sudo docker stack ps nginx-stack
ID             NAME                  IMAGE          NODE      DESIRED STATE   CURRENT STATE           ERROR     PORTS
wexhzl04qrr0   nginx-stack_nginx.1   nginx:latest   ubuntu    Running         Running 7 minutes ago             
wxt7ovydh38t   nginx-stack_nginx.2   nginx:latest   ubuntu    Running         Running 7 minutes ago             ubuntu@ubuntu:~/stack-web$ sudo docker service ls
ID             NAME                MODE         REPLICAS   IMAGE          PORTS
qme9n3kq0zxu   nginx-stack_nginx   replicated   2/2        nginx:latest   *:80->80/tcp, *:443->443/tcpubuntu@ubuntu:~/stack-web$ sudo docker service ps nginx-stack_nginx
ID             NAME                  IMAGE          NODE      DESIRED STATE   CURRENT STATE            ERROR     PORTS
wexhzl04qrr0   nginx-stack_nginx.1   nginx:latest   ubuntu    Running         Running 31 seconds ago             
wxt7ovydh38t   nginx-stack_nginx.2   nginx:latest   ubuntu    Running         Running 31 seconds ago             

浏览器输入IP访问测试,部署完成。
在这里插入图片描述
常用命令:

docker stack deploy	部署新的堆栈或更新现有堆栈
docker stack ls	列出现有堆栈
docker stack ps	列出堆栈中的任务
docker stack rm	删除一个或多个堆栈
docker stack services	列出堆栈中的服务

docker stack和docker service 命令有点类似,实际上,Docker Stack是建立在Docker Service之上的一种更高级的抽象。

使用Docker Service时,可以单独管理每个服务,并对其进行伸缩、更新和删除。而使用Docker Stack时,可以将一组相关的服务捆绑在一起,并通过编排文件定义它们之间的关系和依赖性,方便一次性部署和管理整个应用程序。根据您的需求选择合适的工具,单个服务使用Docker Service,复杂应用程序使用Docker Stack。

3、Docker Stack部署多服务应用

上面我们部署了单服务nginx应用,有点简单,为了实现stack更大的左右,我们可以同时部署多服务应用。

示例,同时部署wordpress和mysql服务

编辑YAML文件

vim docker-compose.yml

内容如下

version: '3.8'services:wordpress:image: wordpress:latestports:- "80:80"environment:WORDPRESS_DB_HOST: dbWORDPRESS_DB_NAME: wordpressWORDPRESS_DB_USER: wordpressWORDPRESS_DB_PASSWORD: qwe12345networks:- web-networkdeploy:replicas: 2restart_policy:condition: on-failuredelay: 5smax_attempts: 3update_config:parallelism: 1delay: 10sdb:image: mysql:latestenvironment:MYSQL_ROOT_PASSWORD: exampleMYSQL_DATABASE: wordpressMYSQL_USER: wordpressMYSQL_PASSWORD: qwe12345volumes:- ./mysql-data:/var/lib/mysql#设置网络networks:- web-networkdeploy:#当前容器的扩展类型  replicated可扩展,global不可扩展mode: globalplacement:constraints:# 指定容器部署节点manager- node.role == managernetworks:web-network:driver: overlay

以上mysql的deploy有所不同,因为这里考虑mysql只需要一个就行,不需要多个服务器,所以部署在管理节点即可,根据使用情况调整。

由于上面mysql挂载了文件夹存储数据,所以在当前创建文件夹,否则会因找不到文件夹mysql启动失败。

mkdir mysql-data

启动部署编排

sudo docker stack deploy -c docker-compose.yml wordpress-stack

用docker stack ls 和docker stack ps wordpress-stack查看启动服务信息

ubuntu@ubuntu:~/stack-web$ sudo docker stack ls
NAME              SERVICES
wordpress-stack   2ubuntu@ubuntu:~/stack-web$ sudo docker stack ps wordpress-stack
ID             NAME                                           IMAGE              NODE      DESIRED STATE   CURRENT STATE            ERROR     PORTS
9e8ustjfy021   wordpress-stack_db.xcpn4el8vvs2hymojpbay8m6q   mysql:latest       ubuntu    Running         Running 7 seconds ago              
pzxcwpxoupmw   wordpress-stack_wordpress.1                    wordpress:latest   ubuntu    Running         Running 12 seconds ago             
jjdn4s2a53e8   wordpress-stack_wordpress.2                    wordpress:latest   ubuntu    Running         Running 12 seconds ago             

也可以用swarm的命令 service,查看每个服务对于的node节点信息,如下显示。
wordpress已经分配2个副本,db按要求只有一个节点。

ubuntu@ubuntu:~/stack-web$ sudo docker service ls
ID             NAME                        MODE         REPLICAS   IMAGE              PORTS
ubgozw57txda   wordpress-stack_db          global       1/1        mysql:latest       
060g92r8f8ys   wordpress-stack_wordpress   replicated   2/2        wordpress:latest   *:80->80/tcp
ubuntu@ubuntu:~/stack-web$ sudo docker service ps 060g92r8f8ys
ID             NAME                          IMAGE              NODE      DESIRED STATE   CURRENT STATE           ERROR     PORTS
pzxcwpxoupmw   wordpress-stack_wordpress.1   wordpress:latest   ubuntu    Running         Running 8 minutes ago             
jjdn4s2a53e8   wordpress-stack_wordpress.2   wordpress:latest   ubuntu    Running         Running 8 minutes ago             ubuntu@ubuntu:~/stack-web$ sudo docker service ps ubgozw57txda
ID             NAME                                           IMAGE          NODE      DESIRED STATE   CURRENT STATE           ERROR     PORTS
9e8ustjfy021   wordpress-stack_db.xcpn4el8vvs2hymojpbay8m6q   mysql:latest   ubuntu    Running         Running 8 minutes ago  

浏览器IP访问测试,两个IP都可以正常访问。
在这里插入图片描述
这里集群多服务部署就完成了。

相关文章:

Docker Stack(堆栈) 部署多服务集群,多服务编排

1、Docker Stack简介 Docker Stack(堆栈) 是在 Swarm 上管理服务堆栈的工具。而在以前文章docker swarm集群搭建 介绍的 Docker Swarm 只能实现对单个服务的简单部署,于是就引出了Docker Stack。 上面我们介绍到 docker-compose:可以在一台机器上使用…...

全国青少年软件编程(Scratch)等级考试二级考试真题2023年12月——持续更新.....

青少年软件编程(图形化)等级考试试卷(二级) 分数:100 题数:37 一、单选题(共25题,共50分) 1.在制作推箱子游戏时,地图是用数字形式储存在电脑里的,下图是一个推箱子地图,地图表示如下: 第一行(111111) 第二行(132231) 第三行(126621) 第四行( ) 第五行(152…...

python基础——异常捕获【try-except、else、finally】

📝前言: 这篇文章主要介绍一下python基础中的异常处理: 1,异常 2,异常的捕获 3,finally语句 🎬个人简介:努力学习ing 📋个人专栏:C语言入门基础以及python入门…...

JAVA面试大全之JVM和调优篇

目录 1、类加载机制 1.1、类加载的生命周期? 1.2、类加载器的层次? 1.3、Class.forName()和ClassLoader.loadClass()区别?...

数据可视化-ECharts Html项目实战(8)

在之前的文章中,我们学习了如何设置散点图涟漪效果与仪表盘动态指针效果。想了解的朋友可以查看这篇文章。同时,希望我的文章能帮助到你,如果觉得我的文章写的不错,请留下你宝贵的点赞,谢谢 今天的文章,会…...

JavaSE:继承和多态(下篇)

目录 一、前言 二、多态 (一)多态的概念 (二)多态实现条件 (三)多态的优缺点 三、重写 (一)重写的概念 (二)重写的规则 (三)重…...

springboot+mybatis项目集成p6spy输出格式化sql日志

本文背景:公司项目框架是基于springboot+mybatis的web项目,由于鄙人在使用过程中发现打印的mybatis日志每次都要粘贴出来,然后再用在线工具的格式化填充参数,很不方便,最近发现那个在线的工具打不开了,更不方便了,因此想有没有直接可以输出的填充好参数的sql语句,当然i…...

yarn安装和使用及与npm的区别

一、yarn安装和使用 要安装和使用yarn,您可以按照以下步骤进行操作: 安装Node.js:首先,您需要在您的计算机上安装Node.js。您可以从Node.js的官方网站(https://nodejs.org/en/download/)下载并安装适用于您…...

【3D-GS】Gaussian Splatting SLAM——基于3D Gaussian Splatting的全网最详细的解析

【3D-GS】Gaussian Splatting SLAM——基于3D Gaussian Splatting的定SLAM 3D-GS 与 Nerf 和 Gaussian Splatting1. 开山之作 Nerf2. 扛鼎之作 3D Gaussian Splatting2.1 什么是3D高斯?高斯由1D推广到3D的数学推导2.2 什么是光栅化?2.3 什么是Splatting?2.4 什么是交叉优化?…...

推荐多样性 - 华为OD统一考试(C卷)

OD统一考试(C卷) 分值: 200分 题解: Java / Python / C++ 题目描述 推荐多样性需要从多个列表中选择元素,一次性要返回N屏数据(窗口数量),每屏展示K个元素(窗口大小),选择策略: 各个列表元素需要做穿插处理,即先从第一个列表中为每屏选择一个元素,再从第二个列表…...

vue基础教程(4)——十分钟吃透vue路由router

同学们可以私信我加入学习群! 正文开始 前言一、路由概念二、路由使用三、创建路由对应的组件四、给整个项目一个入口总结 前言 前面的文章运行成功后,页面显示如下: 在这个页面中,点击Home和About都会切换右面的页面内容&#…...

使用OpenSSL指令测试椭圆曲线签名算法ECDSA

文章目录 小结问题及解决获取secp256r1的公钥和私钥DER格式使用OpenSSL及secp256r1算法获得签名使用OpenSSL及secp256r1算法对签名进行认证 参考 小结 本文记录了使用OpenSSL指令测试椭圆曲线签名算法ECDSA,进行了以下操作:生成椭圆曲线secp256r1 公私密…...

ubuntu之搭建samba文件服务器

1. 在服务器端安装samba程序 sudo apt-get install samba sudo apt-get install smbclient 2.配置samba服务 sudo gedit /etc/samba/smb.conf 在文件末尾追加入以下配置 [develop_share] valid users ancy path /home/ancy public yes writable y…...

P10—P11:Java程序的编译和运行

编译阶段(P10) Java程序的运行包括两个阶段:编译阶段、运行阶段编译阶段主要任务:对Java源程序(以.java为后缀的文件),进行检查其是否符合Java的语法规则。如果符合,则生成字节码文…...

【Docker】Windows中打包dockerfile镜像导入到Linux

【Docker】Windows中打包dockerfile镜像导入到Linux 大家好 我是寸铁👊 总结了一篇【Docker】Windows中打包dockerfile镜像导入到Linux✨ 喜欢的小伙伴可以点点关注 💝 前言 今天遇到一个新需求,如何将Windows中打包好的dockerfile镜像给迁移…...

数据结构之单链表实现(JAVA语言+C语言)

一、理论 1 单链表结构 2 增、删、查 、改思路 (增)直接添加放到最后即可。按顺序添加:找到要修改的节点的前一个节点,插入新节点()。(改)要修改的节点修改内容即可。(…...

docker 安装Sentinel

1.拉取镜像:docker pull bladex/sentinel-dashboard 2.运行镜像:docker run --name sentinel -d -p 8858:8858 -d bladex/sentinel-dashboard 3. 访问地址: 本地地址:http://localhost:8858 (默认端口为8080) 远程地址&#xf…...

通过内网穿透、域名解析实现本地服务部署到公网的架构设计方案

本文主要是总结这些年自己在家玩互联网服务的心得收获, 同时随着年龄增大, 发现脑子确实越来越不好用, 只有记录到笔记中才是真正有意义的。 学生时期做了一些实验, 比如给实验室做日报系统、管理10多台服务器,当时学习了很多架构设计的知识,比如集群化…...

语音陪玩交友软件系统程序-app小程序H5三端源码交付,支持二开!

电竞行业的发展带动其周边产业的发展,绘制着游戏人物图画的抱枕、鼠标垫、海报销量极大,电竞游戏直播、游戏教程短视频也备受人们喜爱,自然,像游戏陪练、代练行业也随之生长起来,本文就来讲讲,从软件开发角…...

import关键字的使用

- import : 导入 - import语句来显式引入指定包下所需要的类。相当于import语句告诉编译器到哪里去寻找这个类。为了使用定义在其它包中的 Java 类,需用 import 语句来显式引入指定包下所需要的类。相当于 import 语句告诉编译器到哪里去寻找这个类 。 语法格式 …...

vue3 字体颜色设置的多种方式

在Vue 3中设置字体颜色可以通过多种方式实现&#xff0c;这取决于你是想在组件内部直接设置&#xff0c;还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法&#xff1a; 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...

代理篇12|深入理解 Vite中的Proxy接口代理配置

在前端开发中,常常会遇到 跨域请求接口 的情况。为了解决这个问题,Vite 和 Webpack 都提供了 proxy 代理功能,用于将本地开发请求转发到后端服务器。 什么是代理(proxy)? 代理是在开发过程中,前端项目通过开发服务器,将指定的请求“转发”到真实的后端服务器,从而绕…...

视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)

前言&#xff1a; 最近在做行为检测相关的模型&#xff0c;用的是时空图卷积网络&#xff08;STGCN&#xff09;&#xff0c;但原有kinetic-400数据集数据质量较低&#xff0c;需要进行细粒度的标注&#xff0c;同时粗略搜了下已有开源工具基本都集中于图像分割这块&#xff0c…...

接口自动化测试:HttpRunner基础

相关文档 HttpRunner V3.x中文文档 HttpRunner 用户指南 使用HttpRunner 3.x实现接口自动化测试 HttpRunner介绍 HttpRunner 是一个开源的 API 测试工具&#xff0c;支持 HTTP(S)/HTTP2/WebSocket/RPC 等网络协议&#xff0c;涵盖接口测试、性能测试、数字体验监测等测试类型…...

GO协程(Goroutine)问题总结

在使用Go语言来编写代码时&#xff0c;遇到的一些问题总结一下 [参考文档]&#xff1a;https://www.topgoer.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/goroutine.html 1. main()函数默认的Goroutine 场景再现&#xff1a; 今天在看到这个教程的时候&#xff0c;在自己的电…...

省略号和可变参数模板

本文主要介绍如何展开可变参数的参数包 1.C语言的va_list展开可变参数 #include <iostream> #include <cstdarg>void printNumbers(int count, ...) {// 声明va_list类型的变量va_list args;// 使用va_start将可变参数写入变量argsva_start(args, count);for (in…...

STM32---外部32.768K晶振(LSE)无法起振问题

晶振是否起振主要就检查两个1、晶振与MCU是否兼容&#xff1b;2、晶振的负载电容是否匹配 目录 一、判断晶振与MCU是否兼容 二、判断负载电容是否匹配 1. 晶振负载电容&#xff08;CL&#xff09;与匹配电容&#xff08;CL1、CL2&#xff09;的关系 2. 如何选择 CL1 和 CL…...

LangFlow技术架构分析

&#x1f527; LangFlow 的可视化技术栈 前端节点编辑器 底层框架&#xff1a;基于 &#xff08;一个现代化的 React 节点绘图库&#xff09; 功能&#xff1a; 拖拽式构建 LangGraph 状态机 实时连线定义节点依赖关系 可视化调试循环和分支逻辑 与 LangGraph 的深…...

全面解析数据库:从基础概念到前沿应用​

在数字化时代&#xff0c;数据已成为企业和社会发展的核心资产&#xff0c;而数据库作为存储、管理和处理数据的关键工具&#xff0c;在各个领域发挥着举足轻重的作用。从电商平台的商品信息管理&#xff0c;到社交网络的用户数据存储&#xff0c;再到金融行业的交易记录处理&a…...

【Linux】使用1Panel 面板让服务器定时自动执行任务

服务器就是一台24小时开机的主机&#xff0c;相比自己家中不定时开关机的主机更适合完成定时任务&#xff0c;例如下载资源、备份上传&#xff0c;或者登录某个网站执行一些操作&#xff0c;只需要编写 脚本&#xff0c;然后让服务器定时来执行这个脚本就可以。 有很多方法实现…...