【Docker】swarm stack部署多service应用

news2024/11/23 3:09:28

前面我们已经学习过了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-demo
    environment:
      - REDIS_HOST=redis-server
      - REDIS_PASS=ABC
    networks:
      - demo-network
    ports:
      - 8080:5000

  redis-server:
    image: redis:latest
    command: redis-server --requirepass ABC
    networks:
     - demo-network

networks:
  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 help

Usage:  docker stack COMMAND

Manage Swarm stacks

Commands:
  config      Outputs the final config file, after doing merges and interpolations
  deploy      Deploy a new stack or update an existing stack
  ls          List stacks
  ps          List the tasks in the stack
  rm          Remove one or more stacks
  services    List the services in the stack

Run '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.coloradmin.cn/o/1307150.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SOLIDWORKS CSWE认证考试报名

​ SOLIDWORKS CSWE是高级别的SOLIDWORKS认证,是一项充满挑战性的艰巨任务。CSWE测试不是简单注册就可以的,是要有一定资格才能参加考试,您首先需要获得CSWP证书,然后还得通过5个CSWPA系列主题考试中的至少4个主题(钣金…

基于UDP的套接字通信

基于UDP的套接字通信 1、通信流程1.1 服务端1.2 客户端 2、通信函数3、通信代码3.1 服务端代码3.2 客户端代码 原文链接 udp是一个面向无连接的,不安全的,报式传输层协议,udp的通信过程默认也是阻塞的。 UDP通信不需要建立连接 ,…

【ZYNQ】AXI4总线接口协议学习

建议翻看着底部的参考文档资料和本文一起辅助阅读 本文带你详细的了解AXI总线协议,并且基于官方手册,能够提高你的手册阅读能力。 什么是AXI AXI 的英文全称是 Advanced eXtensible Interface,即高级可扩展接口,它是 ARM 公司所提…

数据探索和模型建构

数据探索:观察数据之间的关系 分别判断 性别(sex)、船舱等级(Pclass)、年龄(Age)、有无父母子女(Parch)、有无兄弟姐妹(SibSp)、票价(Fare) 和 港口(Embarked)等因素和 存活(Survived)之间的关系 In [27]: sex_survived_cor train_data[[Sex,Survived]] sex_sur…

安科瑞出席宁波市建筑电气2023年年会-安科瑞 蒋静

12月1日,宁波市建筑电气2023年年会在宁波市海曙天港禧悦酒店成功举办。作为推动宁波市建筑电气行业技术发展的专业交流会,吸引了建筑电气行业领导、专家、设计师、厂家等300多名代表参会。期间,安科瑞电气股份有限公司携智能楼宇、智慧校园、…

HTML中表格的语法及使用(详解)

Hi i,m JinXiang ⭐ 前言 ⭐ 本篇文章主要介绍HTML中表格的语法及详细使用以及部分理论知识 🍉欢迎点赞 👍 收藏 ⭐留言评论 📝私信必回哟😁 🍉博主收将持续更新学习记录获,友友们有任何问题可以在评论区留…

骨传导耳机十大品牌排行榜,骨传导耳机品牌排名哪个好

骨传导蓝牙耳机的使用越来越广泛,无论是在户外运动还是在办公室工作,它都能为你带来自由的音乐体验。在本文中,我们将为你介绍十款TOP级骨传导蓝牙耳机,这些品牌在市场上拥有良好的口碑和广泛的使用者。通过本下面的选购指南&…

Buck电路 (PWM实现与闭环反馈) 电力系统仿真

Buck电路 (PWM实现与闭环反馈) Buck电路是降压型的DC-DC变换器。 三角波: 闭环控制怎么实现呢? 比例积分微分控制(proportional-integral-derivative control),简称PID控制,是最早…

祝贺!2023美丽汉字小达人市级比赛和区级自由报名获奖名单发布

昨天,汉字小达人的主办方《中文自修》杂志社在官网发布了两个公示:《“中文自修杯”第十届上海市小学生“美丽汉字小达人”市级活动获奖名单公示》、《“中文自修杯”第十届上海市小学生“美丽汉字小达人”区级活动“自由报名”获奖名单公示》。 这两份名…

mybatis查询结果resultMap映射vo源码分析

概述 mybatis是一个常用的持久层框架;通常搭配mysql使用; 在将查询结果映射成一个复杂vo的时候,通常会用到resultMap,在其中嵌套association和collection等操作;将一个复杂查询拆分成简单查询; 在vo中的变…

「玩转 TableAgent 数据智能分析」实战数据分析演练

文章目录 前言TableAgent 功能亮点人人都是数据分析师融合创新应用的新成果 TableAgent 使用介绍登陆功能介绍申请认证 实战数据集分析一导入 CSV 文件数据发起提问TableAgent 应答结果贴切的服务推荐问题提问 实战数据集分析二分析结果分析哪个城市的未来人口最多 总结 TableA…

proteus元件合集(一)

LCD LM018L​​ 绿色的LCD寻找方法: 直流电压源 直流电压源寻找方法: 滑动变阻器 滑动变阻器寻找方法: 注意:它出来之后会自动出现那两个红色的。那是电源。

C#基础面试题集

C#基础 1. 简述值类型和引用类型有什么区别2. C# String类型比 stringBuilder 类型的优势是什么?3.面向对象的三大特点4.请简述private,public,protected,internal的区别5.结构体和类6.请描述Interface与抽象类之间的不同7.在类的构造函数前…

虚幻学习笔记9—C++代码变量与蓝图的通信

一、前言 C代码中通过关键字“UPROPERTY”来讲所需要的变量、方法或枚举反射暴露给蓝图,实现C和蓝图之间的通信。所有实现的变量都在一个名为“MyPawn1”类中,同时提到的蓝图是根据这个类创建的。同时这个Pawn类为场景中的默认Pawa类。 图1.1.1 文中提到…

L1-039:古风排版

题目描述 中国的古人写文字&#xff0c;是从右向左竖向排版的。本题就请你编写程序&#xff0c;把一段文字按古风排版。 输入格式&#xff1a; 输入在第一行给出一个正整数N&#xff08;<100&#xff09;&#xff0c;是每一列的字符数。第二行给出一个长度不超过1000的非空字…

量化交易与人工智能:技术的交叉引发金融市场的变革

量化交易&#xff08;Quantitative Trading&#xff09;是利用数学模型和统计分析来进行投资决策的一种交易策略。而人工智能技术的快速发展为量化交易带来了全新的机遇和挑战。本文将探讨人工智能在量化交易领域的应用及其对金融市场的变革。 在传统的投资交易中&#xff0c;决…

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

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

C语言学习day02:数据结构、变量和常量、标识符

数据类型&#xff1a; 常量和变量以及宏文件注意、占位符拓展&#xff1a; #include<stdio.h> 宏定义常量 没有和; #define PI 3.14159圆的面积 spi * r * r 圆的周长 lpi * 2 * r int main() {常量piconst数据类型 常量名值const float pi 3.14159;在定义局部变量可以…

Kyligence 荣登甲子光年 2023 AIGC 技术应用领域最具商业潜力榜

近日&#xff0c;「2023甲子引力年终盛典致追风赶月的你」在北京成功举办。作为中国科技产业智库&#xff0c;「甲子光年」在年终盛典现场颁布多项榜单&#xff0c;旨在表彰2023年度在科技产业各细分赛道上拥有核心技术实力&#xff0c;并在商业化上取得卓越成绩的优秀科技企业…

亚马逊云科技:大语言模型的前沿探索与应用革新

导言&#xff1a; 近年来&#xff0c;随着科技的飞速发展&#xff0c;大语言模型成为人工智能领域的一颗璀璨明珠。在这个信息爆炸的时代&#xff0c;大语言模型以其强大的自学习能力和广泛的应用领域引起了广泛关注。作为亚马逊云科技的前沿技术之一&#xff0c;本文将深入探…