当前位置: 首页 > 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 语句告诉编译器到哪里去寻找这个类 。 语法格式 …...

江协STM32:点亮第一个LED灯和流水灯

很多单片机都是高电平弱驱动,低电平强驱动,所以这里是低电平有效 点亮一个LED灯 操作STM32的GPIO需要三个操作: 第一个使用RCC开启GPIO的时钟 第二步使用GPIO_Init函数初始化GPIO 第三步使用输出或输入函数控制GPIO 1.使用RCC开启GPIO的时…...

设计模式之建造者模式精讲

也叫生成器模式。将一个复杂的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 在建造者模式中,有如下4个角色: 抽象建造者(Builder):用于规范产品的各个组成部分,并进行抽象&…...

vue3源码解析——watch和watchEffect区别

watch和watchEffect是Vue 3.0中新增的两个响应式API,用于监听数据的变化。watch适用于需要获取新值和旧值,或者需要懒执行的场景,而watchEffect适用于需要监听多个数据源,并且需要立即执行的场景。它们之间的区别如下:…...

微服务(基础篇-006-Docker)

目录 初识Docker(1) Docker解决的问题(1.1) Docker与虚拟机(1.2) 镜像和容器(1.3) Docker和DockerHub(1.4) docker架构(1.5) 安…...

深度学习算法概念介绍

前言 深度学习算法是一类基于人工神经网络的机器学习方法,其核心思想是通过多层次的非线性变换,从数据中学习表示层次特征,从而实现对复杂模式的建模和学习。深度学习算法在图像识别、语音识别、自然语言处理等领域取得了巨大的成功&#xf…...

查找算法及查找常用数据结构总结

1.顺序表查找 基本方法: 设查找表以一维数组来存储,要求在此表中查找出关键字的值为x的元素的位置,若查找成功,则返回其位置(即下标),否则,返回一个表示元素不存在的下标&#xff0…...

大语言模型---强化学习

本文章参考,原文链接:https://blog.csdn.net/qq_35812205/article/details/133563158 SFT使用交叉熵损失函数,目标是调整参数使模型输出与标准答案一致,不能从整体把控output质量 RLHF(分为奖励模型训练、近端策略优化…...

前端三剑客 —— CSS (第二节)

目录 内容回顾: CSS选择器*** 属性选择器 伪类选择器 1):link 超链接点击之前 2):visited 超链接点击之后 3):hover 鼠标悬停在某个标签上时 4):active 鼠标点击某个标签时,但没有松开 5):fo…...

牛客NC31 第一个只出现一次的字符【simple map Java,Go,PHP】

题目 题目链接: https://www.nowcoder.com/practice/1c82e8cf713b4bbeb2a5b31cf5b0417c 核心 Map参考答案Java import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可*…...

软考系统架构设计师(摘抄)01

架构师承担的责任 系统架构师设计师是承担系统架构设计的核心角色,他不仅是连接用户需求和系统进一步设计与实现的桥梁,也是系统开发早期阶段质量保证的关键角色。系统架构师就是项目的总设计师,他是一个既需要掌控整体又需要洞悉局部瓶颈&a…...

网站建设为什么这么贵/优化系统的软件

在Linux下怎么确定哪个网卡对应哪个接口? 有个需求,公司一台CentOS 6.5需要连接外网和内网环境,所以额外安装一块千兆网卡,主板集成的一个,以及千兆网卡的两个,一共三个网卡接口。系统安装完成之后&#…...

想注册一个做网站的公司/seo博客推广

(跃迁之路)专栏 实验说明 从2017.10.6起,开启这个系列,目标只有一个:探索新的学习方法,实现跃迁式成长实验期2年(2017.10.06 - 2019.10.06)我将以自己为实验对象。我将开源我的学习方法,方法不断…...

平板上做网站的软件/上海网络seo公司

如果是开平方根可以使用函数 SQRT(number),返回数值的平方根 比如SQRT(9) 计算返回3如果是开立方根或者n次方根,可以进e68a847a64364行幂运算,POWER(number,power)函数表示返回number数值的power次乘幂,如POWER(5,2)表示5的2次方&…...

郑州响应式网站建设/百度小说风云榜

现在python学习可是潮流,相信很多小伙伴目前都在学习或者正准备学习python的路上。虽然说python语言相对比较简单,上手很容易,但是对于一些零基础的小白来说还是比较难的,在学习过程中会遇到各种各样的问题。小编今天跟大家分享的…...

好看的做地图分析图的网站/2022最新小学生新闻

我新注册的coder.cn域名怎么样? 呵呵。准备用来开发一些开发人员的东东。还可以开设一些二级域名的服务供大家使用,例如 http://blog.coder.cn http://domain.coder.cn http://bbs.coder.cn http://gbook.coder.cn http://dotnet.coder.cn http://java.c…...

做个网站跳转链接怎么做/排名推广网站

抛开高频套利交易模式不谈,致力于捕捉日内趋势的波段交易模式应作为日内交易系统的首选策略。对于趋势跟踪的方法,最为简单有效的策略仍应当是突破交易。 在大波动行情发生的必经之路守株待兔,是成功实现趋势跟踪的有效路径。其实&#xff0…...