【Docker】swarm stack部署多service应用

前面我们已经学习过了Docker Compose,它可以用来进行一个完整的应用程序相互依赖的多个容器的编排的,但是缺点是只能在单机模式使用,不能在分布式多机器上使用;前面我们也学习了Docker swarm,它可以将单个服务部署为多个容器,并运行在不同集群节点上,构成服务集群,缺点是只能部署单个服务,不能同时编排多个服务。

但是在实际的生产开发中,我们一个完整的应用需要的服务往往不止一个,通过docker service命令来部署的话会很麻烦,那么能不能结合Docker Compose+Docker swarm的优点呢?这就是Docker Stack。

Docker Stack用于向swarm集群部署完整的应用程序堆栈,可以在分布式多机器上同时编排多个有依赖关系的服务。能够在单个声明文件中定义复杂的多服务应用,还提供了简单的方式来部署应用并管理其完整的生命周期:初始化部署 -> 健康检查 -> 扩容 -> 更新 -> 回滚,以及其他功能!可以简单地理解为Docker Stack是集群下的Docker Compose。
在这里插入图片描述

Docker Compose中的不支持项

Docker Stack编排依赖于声明文件,其实也就是Docker Compse文件,不过Docker Stack对于Docker Compose文件有一个要求,文件的规范版本(顶层关键字version)必须是“3.0”或以上,而且一些Docker Compse文件中的关键字不受支持,如:

  • build
  • cgroup_parent
  • container_name
  • devices
  • tmpfs
  • external_links
  • links
  • network_mode
  • restart
  • security_opt
  • userns_mode

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

先构建镜像:

$ sudo docker image build -t flask-demo .

登陆远程镜像仓库:

$ sudo docker login --username=xxx@xxxx.com registry.cn-hangzhou.aliyuncs.com

这里使用的是阿里云的免费镜像仓库:https://cr.console.aliyun.com/cn-hangzhou/instances

再修改镜像的tag:

$ sudo docker image tag flask-demo:latest registry.cn-hangzhou.aliyuncs.com/morris131/flask-demo:latest

最后将镜像推送至远程仓库:

$ sudo docker push  registry.cn-hangzhou.aliyuncs.com/morris131/flask-demo:latest

手动部署多service

先创建一个overlay网络:

$ sudo docker network create -d overlay mynet
kunkv8prss5gihgz5deowhdfw

然后部署redis service:

$ sudo docker service create --name redis --network mynet redis:latest redis-server --requirepass ABC
bn507bk9aaggf1lhhpnask9kq
overall progress: 1 out of 1 tasks
1/1: running   [==================================================>]
verify: Service converged

部署flask-demo service

$ sudo docker service create --name flask-demo --network mynet --env REDIS_HOST=REDIS --env REDIS_PASS=ABC -p 8080:5000 flask-demo:latest
image flask-demo:latest could not be accessed on a registry to record
its digest. Each node will access flask-demo:latest independently,
possibly leading to different nodes running different
versions of the image.xx9chfrx2ro3j8cnvab5vp0pm
overall progress: 1 out of 1 tasks
1/1: running   [==================================================>]
verify: Service converged

查看服务,可以看到flask-demo和redis都已经部署成功:

$ sudo docker service ls
ID             NAME         MODE         REPLICAS   IMAGE               PORTS
7yr3lamfse5k   flask-demo   replicated   1/1        flask-demo:latest   *:8080->5000/tcp
bn507bk9aagg   redis        replicated   1/1        redis:latest

访问flask-demo服务:

$ curl 172.20.160.13:8080
Hello Container World! I have been seen 3 times and my hostname is bf03f59d3bab.

Docker Stack部署多service

前面可以看到通过docker service手动部署多个service非常繁琐,需要一个一个service部署。

接下来使用Docker Stack来部署多service的服务。

编写docker-compose.yml:

version: "3.3"services:flask-demo:image: registry.cn-hangzhou.aliyuncs.com/morris131/flask-demoenvironment:- REDIS_HOST=redis-server- REDIS_PASS=ABCnetworks:- demo-networkports:- 8080:5000redis-server:image: redis:latestcommand: redis-server --requirepass ABCnetworks:- demo-networknetworks:demo-network:

启动服务:

$ sudo docker stack deploy --compose-file docker-compose.yml flask
Creating network flask_demo-network
Creating service flask_redis-server
Creating service flask_flask-demo

访问服务:

$ curl 172.20.160.13:8080
Hello Container World! I have been seen 1 times and my hostname is 4a88aad138e7.

Stack基本命令的使用

Docker stack命令用于swam集群中对应用堆栈涉及到的多个服务进行编排部署和全生命周期管理。

常用的命令如下,可用help命令查看详细说明:

$ sudo docker stack helpUsage:  docker stack COMMANDManage Swarm stacksCommands:config      Outputs the final config file, after doing merges and interpolationsdeploy      Deploy a new stack or update an existing stackls          List stacksps          List the tasks in the stackrm          Remove one or more stacksservices    List the services in the stackRun 'docker stack COMMAND --help' for more information on a command.

docker stack deploy

docker stack deploy [OPTIONS] STACK

根据Stack文件(通常是 docker-compose.yml)部署和更新Stack服务的命令,常用选项如下:

  • -c:指定compose文件路径
  • –with-registry-auth:服务创建的时候,各个工作节点同步管理节点的私有仓库登录凭证,从而各个节点可用拉取私有仓库镜像

docker stack ls

docker stack ls

列出Swarm集群中的全部Stack,包括每个Stack拥有多少服务。

例如:

$ sudo docker stack ls
NAME      SERVICES
flask     2

docker stack ps

docker stack ps [OPTIONS] STACK

列出某个已经部署的Stack相关详情。该命令支持Stack名称作为其主要参数。

在服务启动失败时,docker stack ps命令是首选的问题定位方式。该命令展示了Stack中每个服务的概况,包括服务副本所在节点、当前状态、期望状态以及异常信息,再配合docker service logs查看某个具体服务或任务的详细信息。

$ sudo docker stack ps flask
ID             NAME                   IMAGE                                                           NODE      DESIRED STATE   CURRENT STATE           ERROR     PORTS
oaq79y2xpvz0   flask_flask-demo.1     registry.cn-hangzhou.aliyuncs.com/morris131/flask-demo:latest   node1     Running         Running 6 minutes ago
03j987pc0yyn   flask_redis-server.1   redis:latest                                                    node2     Running         Running 5 minutes ago

docker stack services

docker stack services [OPTIONS] STACK

列出某个已经部署的Stack的服务,包括服务的模式,使用的镜像,端口映射等。

$ sudo docker stack services flask
ID             NAME                 MODE         REPLICAS   IMAGE                                                           PORTS
yoynkqh2mh9n   flask_flask-demo     replicated   1/1        registry.cn-hangzhou.aliyuncs.com/morris131/flask-demo:latest   *:8080->5000/tcp
yrg986m18pps   flask_redis-server   replicated   1/1        redis:latest

docker stack rm

docker stack rm [OPTIONS] STACK [STACK...]

从Swarm集群中移除一个或多个Stack。移除操作执行前并不会进行二次确认。

$ sudo docker stack rm flask
Removing service flask_flask-demo
Removing service flask_redis-server
Removing network flask_demo-network

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

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

相关文章

每日一题,杨辉三角

给定一个非负整数 numRows,生成「杨辉三角」的前 numRows 行。 示例 1: 输入: numRows 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]] 示例 2: 输入: numRows 1 输出: [[1]]

EarCMS 前台任意文件上传漏洞复现

0x01 产品简介 EarCMS是一个APP内测分发系统的平台。 0x02 漏洞概述 EarCMS前台put_upload.php中,存在pw参数硬编码问题,同时sql语句pdo使用错误,没有有效过滤sql语句,可以控制文件名和后缀,导致可以任意文件上传。 0x03 复现环境 FOFA:app="EearCMS" 0x0…

关系型数据库和非关系型数据库有什么区别?

一、什么是数据库? 数据库是一个结构化的数据集合,用于存储、管理和组织数据。它是一个电子化的文件柜,可以存储大量的数据,并提供了一种高效地检索、更新和管理数据的方法。数据库可以用于存储各种类型的数据,例如文…

CNN发展史脉络 概述图整理

CNN发展史脉络概述图整理,学习心得,供参考,错误请批评指正。 相关论文: LeNet:Handwritten Digit Recognition with a Back-Propagation Network; Gradient-Based Learning Applied to Document Recogniti…

前端面试——CSS面经(持续更新)

1. CSS选择器及其优先级 !important > 行内样式 > id选择器 > 类/伪类/属性选择器 > 标签/伪元素选择器 > 子/后台选择器 > *通配符 2. 重排和重绘是什么?浏览器的渲染机制是什么? 重排(回流):当增加或删除dom节点&…

【STM32】STM32学习笔记-LED闪烁 LED流水灯 蜂鸣器(06-2)

00. 目录 文章目录 00. 目录01. GPIO之LED电路图02. GPIO之LED接线图03. LED闪烁程序示例04. LED闪烁程序下载05. LED流水灯接线图06. LED流水灯程序示例07. 蜂鸣器接线图08. 蜂鸣器程序示例09. 下载10. 附录 01. GPIO之LED电路图 电路图示例1 电路图示例2 02. GPIO之LED接线图…

【unity】【WebRTC】从0开始创建一个Unity远程媒体流app-设置输入设备

【项目源码】 包括本篇需要的脚本都打包在项目源码中,可以通过下面链接下载: 【背景】 目前我们能投射到远端浏览器(或者任何其它Peer)的媒体流只有默认的MainCamera画面,其实我们还可以通过配置输入来传输操作输入信息,比如键鼠等。 【追加input processing组件】 …

C++刷题 -- 哈希表

C刷题 – 哈希表 文章目录 C刷题 -- 哈希表1.两数之和2.四数相加II3.三数之和(重点) 当我们需要查询一个元素是否出现过,或者一个元素是否在集合里的时候,就要第一时间想到哈希法; 1.两数之和 https://leetcode.cn/problems/two…

Node.js黑马时钟案例

先上没有使用node.js之前的html部分代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title></title><style>* {margin: 0;padding: 0;}html,body {height: 100%;overflow: hidden;backgrou…

Linux 常用命令汇总

1 linux定时任务 查看定时任务&#xff1a;crontab -l 每晚一点半执行定时任务&#xff1a; 30 1 * * * sh /var/lib/pgsql/pg_db_backup.sh >> /var/lib/pgsql/pg_db_backup.log 2>&1 配置定时任务&#xff1a;crontab -e 2 linux 内核版本查询 cat /etc/r…

Kafka-快速实战

Kafka介绍 ChatGPT对于Apache Kafka的介绍&#xff1a; Apache Kafka是一个分布式流处理平台&#xff0c;最初由LinkedIn开发并于2011年开源。它主要用于解决大规模数据的实时流式处理和数据管道问题。 Kafka是一个分布式的发布-订阅消息系统&#xff0c;可以快速地处理高吞吐…

JavaScript——基本语法

1.定义变量&#xff1a; 变量类型 变量名 变量值 var关键字声明变量 es6版本以上 var 可写可不写 <script>// 定义变量&#xff1a;变量类型 变量名 变量值 var关键字声明变量 es6版本以上 var 可写可不写var num 2;</script>2.条件控制 <script>var …

Java连接数据库的各种细节错误(细节篇)

目录 前后端联调&#xff08;传输文件&#xff09; ClassNotFoundException: SQLException: SQL语法错误: 数据库连接问题: 驱动问题: 资源泄露: 并发问题: 超时问题: 其他库冲突: 配置问题: 网络问题: SSL/TLS问题: 数据库权限问题: 驱动不兼容: 其他未知错误…

SIEM 解决方案的不同部署方式,如何选择SIEM 解决方案

安全信息和事件管理&#xff08;SIEM&#xff09;作为一种网络安全解决方案&#xff0c;是多种技术的融合&#xff0c;这些技术结合了包括安全信息管理和安全事件管理在内的流程。简单来说&#xff0c;SIEM 解决方案是一种重要的安全工具&#xff0c;它收集、存储和分析来自整个…

Impala4.x源码阅读笔记(二)——Impala如何高效读取Iceberg表

前言 本文为笔者个人阅读Apache Impala源码时的笔记&#xff0c;仅代表我个人对代码的理解&#xff0c;个人水平有限&#xff0c;文章可能存在理解错误、遗漏或者过时之处。如果有任何错误或者有更好的见解&#xff0c;欢迎指正。 Iceberg表是一种用于存储大规模结构化数据的…

Redis 环境搭建2

文章目录 第2关&#xff1a;使用 Redis 第2关&#xff1a;使用 Redis 本文是接着上篇文章写的第二关代码&#xff0c;部分人再进入第二关时不会保留第一关的配置的环境&#xff0c;可以通过下面一句代码进行检验。 redis-cli -p 7001 -c如果进入到了redis界面就是有环境&…

【开源】基于Vue+SpringBoot的教学资源共享平台

文末获取源码&#xff0c;项目编号&#xff1a; S 068 。 \color{red}{文末获取源码&#xff0c;项目编号&#xff1a;S068。} 文末获取源码&#xff0c;项目编号&#xff1a;S068。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 课程档案模块2.3 课…

矩母函数,概率生成函数, 随机变量的变换方法

这个标题真帅 Thanks Ni Zihan. 随机变量的变换方法总结概率生成函数 (probability-generating function, PGF)矩母函数&#xff08;Moment Generating Function &#xff0c; MGF&#xff09;矩母函数详细介绍 特征函数 Thanks Ni Zihan. 随机变量的变换方法总结 &#xff0…

网络安全——Iptables防DDoS攻击实验

一、实验目的要求&#xff1a; 二、实验设备与环境&#xff1a; 三、实验原理&#xff1a; 四、实验步骤&#xff1a; 五、实验现象、结果记录及整理&#xff1a; 六、分析讨论与思考题解答&#xff1a; 一、实验目的要求&#xff1a; 1、掌握常见DDoS攻击SYN Flood的攻击…