Docker Service 创建

Docker Swarm Mode
Docker Swarm 集群搭建
Docker Swarm 节点维护
Docker Service 创建

service 只能依附于 docker swarm 集群,所以 service 的创建前提是,swarm 集群搭建完毕。

1. 创建 service

docker service create 命令用于创建 service,需要在 manager 中运行。与创建容器的命令 docker run 非常类似

目前的节点状态如下:

在这里插入图片描述

在 swarm 中创建一个运行 tomcat:8.5.49 镜像的 service,服务名称为 toms,包含3 个副本 task,对外映射端口号为 9000。当一个 service 包含多个 task 时,对 service 的访问最终会通过 负载均衡 方式转发给各个 task 处理。这个负载均衡为轮询策略

docker service create --name toms --replicas 3 -p 9000:8080 tomcat:8.5.49

在这里插入图片描述

1.1 查看服务列表

docker service ls 命令用于查看当前 swarm 集群中正在运行的 service 列表信息。一个swarm 中可以运行多个 service。
在这里插入图片描述

1.2 查看服务详情

通过 docker service inspect [service name|service ID]命令可以查看指定 service 的详情。

在这里插入图片描述

1.3 用户访问服务

服务创建完毕后,该服务也就运行了起来。此时就可通过浏览器进行访问了

在这里插入图片描述

也可以直接通过ip访问,通过域名访问需要在本机C:\Windows\System32\drivers\etc\hosts文件中加入如下:

192.168.137.100 docker
192.168.137.101 docker2
192.168.137.102 docker3
192.168.137.103 docker4
192.168.137.104 docker5

1.4 查看 task 节点

docker service ps [service name|service ID]命令可以查看指定服务的各个 task 所分配的节点信息。

在这里插入图片描述

可以看到,toms 服务的 3 个 task 被分配到了 docker2、docker3、docker 三个主机。其中 ID 为task ID,NAME 为 task 的 name。task nameservice name 后添加从 1 开始的流水号形成的。

1.5 查看指定节点的 task

通过 docker node ps [node]可以查看指定节点中运行的 task 的信息。默认查看的是当前节点的task 信息。

在这里插入图片描述

1.6 查看服务日志

通过 docker service logs 命令可以查看指定 service 或 task 的日志。通过 docker service logs –f 命令可动态监听指定 service 或 task 的日志。

(1)查看 service 日志

通过 docker service logs [service name|service ID]命令可以查看指定 service 的日志。这些日志实际是所有 task 在节点容器中的运行日志。

# -f 实时进行显示,-t 日志要携带时间戳,-–tail 100 显示最新的100条数据 
docker logs -f -t --tail 200 <service name|service ID>

(2)查看 task 日志

通过 docker service logs [task ID]命令可以查看指定 task 的日志。注意,这里只能指定taskID,不能指定 task name(task name不唯一)。这些日志实际是指定 task 在节点容器中的运行日志。

docker service logs -f -t -n 5 <task ID>

在这里插入图片描述

有时候server启动失败,通过logs查看日志什么也没有,可以通过docker service ps --no-trunc <service>查看错误信息

1.7 查看节点容器

在 docker2、docker3、docker 三个主机中查看正在运行的容器列表,可以看到相应的tomcat 容器。

在这里插入图片描述

容器的 NAME 是由 task name 后添加 task ID 形成的。在 docker4、docker5 主机中是没有该服务的 task 容器的。

1.8 task伸缩

 根据访问量的变化,需要在不停止服务的前提下对服务的 task 进行扩容/缩容,即对服务进行伸缩变化。有两种实现方式:

(1)docker service update 方式

通过 docker service update --replicas 命令可以实现对指定服务的 task 数量进行变更。

docker service update --replicas 5 toms

在这里插入图片描述

(2)docker service scale 方式

通过 docker service scale 命令可以为指定的服务变更 task 数量。

# docker service scale SERVICE=REPLICAS
docker service scale toms=7
docker service scale toms=3

(3)暂停节点的 task 分配

生产环境下,可能由于某主机性能不高,在进行 task 扩容时,不想再为该主机再分配更多的 task,此时可通过 pause 暂停该主机节点的可用性来达到此目的。

docker node update --availability pause <nodeID>

在这里插入图片描述

更新前有3个task,分别在docker、docker2、docker3节点上,更新副本数为10后,docker2 上边还是只有一个task

(4)清空 task

由于某节点出现了性能问题,需要停止服务进行维修,此时最好是将该节点上的task 清空,以不影响 service 的整体性能。

通过 docker node update –availability drain 命令可以清空指定节点中的所有 task。

docker node update --availability drain <nodeId>

在这里插入图片描述

清空前每个节点有一个task,将dcoker3、docker4清空后,docker3、docker4两个节点上没有task了,但是总的toms服务的task总量没有减少。全部都分配到了docker、docker2、docker5三个节点上了,这个结果是由编排器与分发器共同维护的。

1.9 task 容错

当某个 task 所在的主机或容器出现了问题时,manager 的编排器会自动再创建出新的task,然后分发器会再选择出一台 available node 可用节点,并将该节点分配给新的 task。

# 在docker5中
docker ps
docker stop <containerID># 在manager节点重新查看服务的task节点信息
docker service ps toms

在这里插入图片描述

在docker5中停掉容器后,再查看服务的task节点信息可以看到,原来docker5中的task已经是Shutdown状态了,又新增了一个新的toms.5的task

2. 服务删除

通过 docker service rm [service name|service ID]可以删除指定的一个或多个 service。

删除后,该 service 消失,当然,该 service 的所有 task 也全部删除,task 相关的节点容器全部消失。

3. 滚动更新

当一个 service 的 task 较多时,为了不影响对外提供的服务,在对 service 进行更新时可采用滚动更新方式。

需求:将原本镜像为 tomcat:8.5.49 的 service 的镜像滚动更新为tomcat:8.5.39

  1. 创建一个包含 10 个副本 task 的服务,该服务使用的镜像为 tomcat:8.5.49。
docker service create \
--name toms \
--replicas 10 \
--update-parallelism 2 \
--update-delay 3s \
--update-max-failure-ratio 0.2 \
--update-failure-action rollback \
--rollback-parallelism 2 \
--rollback-delay 3s \
--rollback-max-failure-ratio 0.2 \
--rollback-failure-action continue \
-p 9000:8080 \
tomcat:8.5.49
  1. 将 service 使用的镜像由 tomcat:8.5.49 更新为 tomcat:8.5.39。

在这里插入图片描述

  1. 观察更新和创建的过程
docker service ps toms

会发现这个更新的过程就是前面在创建服务时指定的那样,每次更新 2 个 task,更新间隔为 3 秒。

3.1 更新回滚

在更新过程中如果更新失败,则会按照设置的回滚策略进行回滚,回滚到更新前的状态。但也可通过命令方式手工回滚。

# 按照前面设置的每次回滚 2 个 task,每次回滚间隔 3 秒进行回滚
docker service update --rollback toms

在这里插入图片描述

需要注意,task name 保持未变,但 task ID 与原来的 task ID 也是不同的,并不是恢复到了更新之前的 task ID。即编排器新创建了 task,并由分发器重新为其分配了 node。

4. service 全局部署模式

docker service create 命令中通过--mode 选项可以指定要使用的 service 部署模式,默认为 replicated 模式。

docker service create --name toms --mode global -p 9000:8080 tomcat:8.5.49

该模式会在每个节点上分配一个 task。

4.1 task 伸缩

对于 global 模式来说,若要实现对 service 的 task 数量的变更,必须通过改变该 servicve所依附的 swarm 集群的节点数量来改变。节点增加,则 task 会 自动增加;节点减少,则 task会自动减少

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

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

相关文章

【C++项目】高并发内存池第二讲中心缓存CentralCache框架+核心实现

CentralCache 1.框架介绍2.核心功能3.核心函数实现介绍3.1SpanSpanList介绍3.2CentralCache.h3.3CentralCache.cpp3.4TreadCache申请内存函数介绍3.5慢反馈算法 1.框架介绍 回顾一下ThreadCache的设计&#xff1a; 如图所示&#xff0c;ThreadCache设计是一个哈希桶结构&…

前端领域的插件式设计

插件&#xff0c;是一个常见的概念。 例如&#xff0c;当我们需要把我们前端代码中的 css 样式提取打包&#xff0c;我们可以用 webpack 的 mini-css-extract-plugin&#xff0c;或者你如果用 rollup 的话&#xff0c;可以选择 rollup-plugin-postcss。 再比如我们可以给 bab…

RDB.js:适用于 Node.js 和 Typescript 的终极对象关系映射器

RDB.js 是适用于 Node.js 和 Typescript 的终极对象关系映射器&#xff0c;可与 Postgres、MS SQL、MySQL、Sybase SAP 和 SQLite 等流行数据库无缝集成。无论您是使用 TypeScript 还是 JavaScript&#xff08;包括 CommonJS 和 ECMAScript&#xff09;构建应用程序&#xff0c…

X32位汇编和X64位区别无参函数分析(一)

前言 一、X32汇编函数无参无返回分析 二、X64汇编函数无参无返回分析 总结 前言 提示&#xff1a;以下是个人学习总结&#xff1a;如有错误请大神指出来&#xff0c;只供学习参考&#xff0c;本内容使用使用VS2017开发工具&#xff1a;语言是C&#xff0c;需要一些常见的汇编指…

MySQL1——喵喵期末不挂科

宝宝&#xff0c;你不点个赞吗&#xff1f;不评个论吗&#xff1f;不收个藏吗&#xff1f; 最后的最后&#xff0c;关注我&#xff0c;关注我&#xff0c;关注我&#xff0c;你会看到更多有趣的博客哦&#xff01;&#xff01;&#xff01; 喵喵喵&#xff0c;你对我真的很重要…

阶段六-Day04-MyBatis2

一、别名 Alias 1. 为什么使用别名 一般映射文件中会包含大量<select>标签, 每个<select>中都需要配置resultType"com.bjsxt.pojo.People"&#xff0c;MyBatis提供了别名机制可以对某个类起别名或给某个包下所有类起别名&#xff0c;简化resultType取值…

sklearn-6算法链与管道

思想类似于pipeline&#xff0c;将多个处理步骤连接起来。 看个例子&#xff0c;如果用MinMaxScaler和训练模型&#xff0c;需要反复执行fit和tranform方法&#xff0c;很繁琐&#xff0c;然后还要网格搜索&#xff0c;交叉验证 1 预处理进行参数选择 对于放缩的数据&#x…

性能测试 —— Jmeter 命令行详细

我们在启动Jmeter时 会看见&#xff1a;Don’t use GUI mode for load testing !, only for Test creation and Test debugging.For load testing, use CLI Mode (was NON GUI) 这句话的意思就是说&#xff0c;不要使用gui模式进行负载测试&#xff0c;gui模式仅仅是创建脚本…

Unity 通过jar包形式接入讯飞星火SDK

最近工作上遇到了要接入gpt相关内容的需求&#xff0c;简单实现了一个安卓端接入讯飞星火的UnitySDK。 或者也可以接入WebSocket接口的。本文只讲安卓实现 我使用的Unity版本为2021.3.27f1c2 Android版本为4.2.2 1.下载SDK 登陆讯飞开放平台下载如图所示SDK 2.新建安卓工程…

【广州华锐互动】关于物理力学的3D实验实操平台

在科学的广阔领域中&#xff0c;物理力学是一个至关重要的分支&#xff0c;它探索了物体在力作用下的运动规律。然而&#xff0c;传统的物理实验往往需要复杂的设备和大量的操作&#xff0c;这对于学生来说是一项巨大的挑战。为了解决这个问题&#xff0c;广州华锐互动开发了物…

django 商品及购物车逻辑实现

基于类视图模式实现商品分类菜单接口开发 创建菜单子应用 python manage.py startapp menu测试 apps/menu/views from django.http import HttpResponse from django.views import Viewclass GoodsMainMenu(View):def get(self,request):print("get请求")return …

二叉搜索树进阶--AVL树详细实现过程

目录 AVL树概念AVL树实现AVL树基础结构插入插入&#xff1a;左旋实现插入&#xff1a;右旋实现 AVL树完整实现代码&#xff1a; 之前学习到的二叉搜索树虽可以缩短查找的效率&#xff0c;但如果数据有序或接近有序二叉搜索树将退化为单支树&#xff0c;查找元素相当于在顺序表中…

实现Traefik工具Dashboard远程访问:搭建便捷的远程管理平台

文章目录 前言1. Docker 部署 Trfɪk2. 本地访问traefik测试3. Linux 安装cpolar4. 配置Traefik公网访问地址5. 公网远程访问Traefik6. 固定Traefik公网地址 前言 Trfɪk 是一个云原生的新型的 HTTP 反向代理、负载均衡软件&#xff0c;能轻易的部署微服务。它支持多种后端 (D…

HTML笔记-狂神

1. 初识HTML 什么是HTML&#xff1f; Hyper Text Markup Language : 超文本标记语言 超文本包括&#xff1a;文字、图片、音频、视频、动画等 目前使用的是HTML5&#xff0c;使用 W3C标准 W3C标准包括&#xff1a; 结构化标准语言&#xff08;HTML、XML&#xff09; 表现标…

大二第三周总结(算法+生活)

算法&#xff1a; 题目&#xff1a;有效的括号 这个题目也是做过很多回了。主要就是数据结构中”栈“的应用&#xff0c;先进后出。 解题思路&#xff1a; 1.创建 Map 哈希表形成键值对映射 2.进行遍历字符串 在遍历过程中 如果 遍历到的字符c 是左括号&#xff0c;则入栈 pu…

大小端字节序存储

大小端字节序存储&#xff1a;是以字节为单位讨论它在内存中的存储顺序&#xff0c;而不是更小的二进制位 例如&#xff1a; int main() {int a 0x11223344;return 0; }a在内存中的存储16进制为44 33 22 11&#xff0c;两个16进制为一个单位进行存储&#xff0c;而两个十六进…

Leetcode—260.只出现一次的数字III【中等】

2023每日刷题&#xff08;三&#xff09; Leetcode—260.只出现一次的数字III 借助lowbit的解题思想 参考的灵茶山艾府大神的题解 实现代码 /*** Note: The returned array must be malloced, assume caller calls free().*/ int* singleNumber(int* nums, int numsSize, in…

git rebase 和 git merge的区别?

一、是什么 在使用 git 进行版本管理的项目中&#xff0c;当完成一个特性的开发并将其合并到 master 分支时&#xff0c;会有两种方式&#xff1a; git mergegit rebase git rebase 与 git merge都有相同的作用&#xff0c;都是将一个分支的提交合并到另一分支上&#xff0c…

谈谈你对spring boot 3.0的理解

谈谈你对spring boot 3.0的理解 一&#xff0c;Spring Boot 3.0 的兼容性 Spring Boot 3.0 在兼容性方面做出了很大的努力&#xff0c;以支持存量项目和老项目。尽管如此&#xff0c;仍需注意以下几点&#xff1a; Java 版本要求&#xff1a;Spring Boot 3.0 要求使用 Java 1…

Web前端—Flex布局:标准流、浮动、Flex布局、综合案例(短视频首页解决方案)

版本说明 当前版本号[20231024]。 20231024初版 目录 文章目录 版本说明目录Flex布局01-标准流02-浮动基本使用产品区域布局HTML标签CSS样式 清除浮动场景搭建额外标签法单伪元素法双伪元素法overfow法 03-Flex布局Flex组成主轴对齐方式侧轴对齐方式修改主轴方向弹性伸缩比弹…