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都可以正常访问。
在这里插入图片描述
这里集群多服务部署就完成了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/287812.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

代码随想录算法训练营 DAY 21 | 230.二叉搜索树的最小绝对差 501.二叉搜索树中的众数 236.二叉树的最近公共祖先

230.二叉搜索树的最小绝对差 二叉搜索树,用中序遍历 用一个全局变量result存储最小绝对差,prev指针存储 在中的逻辑里去更新result(保证prev不为空),然后更新prevcur。 牢记谦虚遍历的顺序!pre紧跟在cu…

多层陶瓷电容器(MLCC)的基本结构与特点

多层陶瓷电容器(MLCC)是一种电子元件,用于存储电荷和调节电路中的电容值。它们由多个陶瓷层组成,每个层之间夹有金属电极,然后堆叠在一起,并在两端连接上导体引线,形成一个整体结构。在外部通常…

QML | JavaScript作用域和命名解析2

QML | JavaScript作用域和命名解析3.绑定的作用域对象 属性绑定是QML中最常见的JavaScript应用。属性绑定关联了一个JavaScript表达式的结果和对象的一个属性,该属性所归属的对象被称为绑定的作用域对象。在下面的代码中,Item对象就是一个绑定的作用域对象: ​ 绑定可以…

本地运行环境工具UPUPWANK(win)和Navicat数据库管理工具

UPUPWANK安装地址:https://www.upupw.net 1.进入UPUPWANK后点击一键开启 2.新增项目 这里请千万注意80端口,如果80端口被占用了,请记住去任务管理器关闭占用80端口的进程。不然就不会成功显示。(笔者含泪警告,一晚上的…

PostgreSQL技术大讲堂 - 第48讲:PG高可用实现keepalived

PostgreSQL从小白到专家,是从入门逐渐能力提升的一个系列教程,内容包括对PG基础的认知、包括安装使用、包括角色权限、包括维护管理、、等内容,希望对热爱PG、学习PG的同学们有帮助,欢迎持续关注CUUG PG技术大讲堂。 第48讲&#…

javaSSM公司招聘管理系统IDEA开发mysql数据库web结构计算机java编程maven项目

一、源码特点 IDEA开发SSM公司招聘管理系统是一套完善的完整企业内部系统,结合SSM框架和bootstrap完成本系统,对理解JSP java编程开发语言有帮助系统采用SSM框架(MVC模式开发)MAVEN方式加 载,系统具有完整的源代码和…

设计模式深度解析:深入浅出的揭秘游标尺模式与迭代器模式的神秘面纱 ✨

​🌈 个人主页:danci_ 🔥 系列专栏:《设计模式》 💪🏻 制定明确可量化的目标,坚持默默的做事。 深入浅出的揭秘游标尺模式与迭代器模式的神秘面纱 开篇: 欢迎来到设计模式的神秘…

最小割问题合集,最大权闭合图,最大密度子图,最小权点覆盖,最大权独立子图,OJ练习,代码详解

文章目录 零、回顾1、流网络的割2、最小割问题 一、最小割的应用1.1POJ1966 -- Cable TV Network1.1.1原题链接1.1.2思路分析1.1.3AC代码 1.2ZOJ 2676 Network Wars1.2.1原题链接1.2.2思路分析1.2.3AC代码 1.3OPTM - Optimal Marks1.3.1原题链接1.3.2思路分析1.3.3AC代码 二、最…

ApiPost设置多人协作

有时候一个项目会有多个人一起编写,每个人都有自己的接口,ApiPost提供了一个多人协作功能,可以在一个项目里加入多个成员,每个人新增的接口都可以在项目中看到,从而提高开发效率。 我这边用的是ApiPost7,首…

深入探讨iOS开发:从创建第一个iOS程序到纯代码实现全面解析

iOS开发作为移动应用开发的重要领域之一,对于开发人员具有重要意义。本文将深入探讨iOS开发的各个方面,从创建第一个iOS程序到纯代码实现iOS开发,带领读者全面了解iOS应用程序的开发流程和技术要点。 📱 第一个iOS程序 在创建第…

【蓝桥杯】tarjan算法

一.概述 Tarjan 算法是基于DFS的算法,用于求解图的连通性问题。 Tarjan 算法可以在线性时间内求出: 无向图: 割点与桥双连通分量 有向图: 强连通分量必经点与必经边 1.割点: 若从图中删除节点 x 以及所有与 x 关联的…

【c++】类和对象(四)深入了解拷贝构造函数

🔥个人主页:Quitecoder 🔥专栏:c笔记仓 朋友们大家好啊,本篇内容带大家深入了解拷贝构造函数 目录 1.拷贝构造函数1.1传值调用的无限调用1.2浅拷贝1.3深拷贝1.4深拷贝的实现 1.拷贝构造函数 拷贝构造函数是一种特殊的…

Java版企业电子招标采购系统源码——鸿鹄电子招投标系统的技术特点

在数字化时代,采购管理也正经历着前所未有的变革。全过程数字化采购管理成为了企业追求高效、透明和规范的关键。该系统通过Spring Cloud、Spring Boot2、Mybatis等先进技术,打造了从供应商管理到采购招投标、采购合同、采购执行的全过程数字化管理。通过…

【Java面试题】计算机网络

文章目录 1.计算机网络基础1.1网络分层模型/OSI七层模型是什么?1.2TCP/IP四层模型是什么?每一层的作用?1.2.1TCP四层模型?1.2.2为什么网络要分层? 1.2常见网络协议1.2.1应用层常见的协议1.2.2网络层常见的协议 2.HTTP2…

解决华为云服务器宝塔面板无法访问显示“此站点的连接不安全”问题

已经配置好安全组以及初始化宝塔面板,还是无法访问镜像管理页面,提示此站点的连接不安全。 解决方案 将地址https改为http即可进入。 成功登录后,开启面板SSL即可。

js实现拖放效果

dataTransfer对象 说明:dataTransfer对象用于从被拖动元素向放置目标传递字符串数据。因为这个对象是 event 的属性,所以在拖放事件的事件处理程序外部无法访问 dataTransfer。在事件处理程序内部,可以使用这个对象的属性和方法实现拖放功能…

科学认识并正确运用人工智能技术赋能国际传播

以下文章来源:学习时报 加强国际传播能力建设,全面提升国际传播效能,形成同我国综合国力和国际地位相匹配的话语权,已成为实现中国式现代化需要解决好的一个重大问题。文生视频模型Sora,是继ChatGPT之后又一推动传播智…

鉴源论坛丨形式化工程方法之需求建模(下)

作者 | 杨坤 上海控安可信软件创新研究院系统建模组 版块 | 鉴源论坛 观模 引言:需求建模是一种从源头确保软件质量的重要手段。需求建模可分为需求规约和需求确认两个部分,前者通过严格设计的形式化语言精确地将需求文档转换为了形式化规约&#xff0…

手撕LRU 最近最少使用缓存淘汰策略 + LinkedHashMap

LRU 最近最少使用缓存淘汰策略 1 LRU 算法就是一种缓存淘汰策略2 手撕LRU3 LinkedHashMap 常见面试题 1 LRU 算法就是一种缓存淘汰策略 计算机的缓存容量有限,如果缓存满了就要删除一些内容,给新内容腾位置。但问题是,删除哪些内容呢&#x…

“Kimi概念”降温,长文本“担不起”大模型的下一步

Kimi火了…… 这是这波AI浪潮中,国内创业公司第一次真正“破圈”。最明显的标志是,在二级市场中,Kimi已被市场作为一个概念板块来对待,它们被称之为“Kimi概念股”。在之前爆炒的板块中,可能有华为产业链、苹果产业链&…