10. Docker Swarm(一)

news2024/10/7 6:45:34

目录

1、前言

2、Docker Swarm体系架构

2.1、简单介绍

2.2、体系架构

3、简单使用

3.1、环境准备

3.2、初始化master节点

3.3、建立worker节点

3.4、查看集群的节点信息

3.5、部署应用

3.5.1、创建Dockerfile文件

3.5.2、构建镜像

3.5.3、将镜像上传到Docker仓库

3.5.4、Swarm集群中部署应用

3.5.5、查看服务信息

3.5.6、访问地址

3.5.7、动态伸缩


1、前言

上篇文章中我们讲到了Docker Compose来作为服务编排的工具,而Docker Compose只是用于单个宿主机上创建多个容器而进行服务编排的工具;而实际大型集群项目中,会面临多个服务器或宿主机上创建容器,从而组成集群提供相应的服务,而这时候就需要另一个服务编排工具Docker Swarm。

2、Docker Swarm体系架构

2.1、简单介绍

Docker Swarm是Docker 官方提供的一款集群管理工具,其主要作用是把若干台 Docker 宿主机抽象为一个整体,并通过一个入口统一管理这些 Docker 宿主机上的各种 Docker 资源。

Docker Swarm和Kubernetes 比较类似,但是它更加轻量级,且有的功能较 Kubernetes 少一些。有了Docker Swarm 集群,便可以实现应用的负载均衡与失败迁移功能。

Dockere 1.12.0版本开始,已经将Docker Swarm集成了,因此要使用他无需单独安装。而Docker Swarm本身内置了服务发现功能,因此也无需进行服务发现配置。

2.2、体系架构

Docker Swarm 集群是一个主从架构。其中有一个Swarm Manager 节点用来管理集群中的容器资源。Swarm Manager 节点对外暴露操作的接口,外部的用户可以通过该接口来实现对集群的管理。用户也可以通过 Swarm Manager 节点向集群发出操作指令。对于较大规模的 Docker 集群,可以将 Swarm Manager 单独部署到一台服务器上,从而提高其性能。Swarm Node 节点从 Swarm Manager 节点接收命令,从而创建相应的容器来运行应用。但是,用户只能笼统地向集群发出指令,而不能具体分配某台服务器干什么(这是由Swarm Manager节点上的Scheduler调度器完成的)。

3、简单使用

3.1、环境准备

准备3台虚拟机:

  • Master:安装了Docker 1.13.1,IP地址为:192.168.74.132
  • Node1:安装了Docker 1.13.1,IP地址为:192.168.74.133
  • Node2:安装了Docker 1.13.1,IP地址为:192.168.74.134

3.2、初始化master节点

先在master节点上初始化集群:

docker swarm init --listen-addr 192.168.74.132:8888 --advertise-addr 192.168.74.132
  • --listen-addr:集群暴露给外部调用的Http API的socket地址。
  • --advertise-addr:当宿主机有多网卡时,该参数用于指定绑定的网卡地址。

启动成功后,如上图所示。如果已经启动成功的,可以通过命令查看这部分信息:

docker swarm join-token manager

3.3、建立worker节点

将Node1和Node2节点作为worker加入Swarm集群:

docker swarm join --token SWMTKN-1-44rfzzzo532rkk6s9oi1eipmbuqa6f5lcz6nif4y41ynbggnh4-095o1oqhivebg57dtuwim6mep 192.168.74.132:8888

这里需要用到master节点的token,IP地址,和端口。

建立过程中可能遇到的问题:

  1. 问题1、--cluster-store and --cluster-advertise daemon configurations are incompatible with swarm mode
[root@192 pengyaohuang]# docker swarm join --token SWMTKN-1-44rfzzzo532rkk6s9oi1eipmbuqa6f5lcz6nif4y41ynbggnh4-095o1oqhivebg57dtuwim6mep 192.168.74.132:8888
Error response from daemon: --cluster-store and --cluster-advertise daemon configurations are incompatible with swarm mode

解决办法:检查docker配置文件是否配置了远程访问或者注册中心等配置,删除即可。我这边是因为前面配置了zookeeper相关信息导致。

  1. 问题2、can't initialize raft node
[root@192 pengyaohuang]# docker swarm join --token SWMTKN-1-44rfzzzo532rkk6s9oi1eipmbuqa6f5lcz6nif4y41ynbggnh4-095o1oqhivebg57dtuwim6mep 192.168.74.132:8888
Error response from daemon: can't initialize raft node: rpc error: code = 2 desc = could not connect to prospective new cluster member using its advertised address: rpc error: code = 14 desc = grpc: the connection is unavailable

解决办法:查看防火墙是否开启。关闭防火墙即可:

systemctl stop firewalld

节点加入成功后的提示:

3.4、查看集群的节点信息

在master节点上查看集群节点信息:

docker node ls

可以看到分别有3个节点,2个节点为Reachable状态,一个为Leader状态。而Leader状态的节点ID后带了*号,这个表示该节点为master节点。

这里需要注意的是,master节点也作为worker节点。因此这里总共是有1个master节点,3个worker节点。

到此基本的集群环境就已经构建完成了。

3.5、部署应用

集群环境构建完成后,我们开始部署应用。

3.5.1、创建Dockerfile文件

[root@192 docker_swarm]# vim Dockerfile 
FROM nginx
RUN echo '<h1> My first Swarm demo, version: 1</h1>' > /usr/share/nginx/html/index.html

3.5.2、构建镜像

# 1表示我们的版本号
# 等下要上传到我们的docker hub上,因此这里镜像加上我们的仓库名
docker build -t pengyaohuang/swarm_nginx_demo:1 .

3.5.3、将镜像上传到Docker仓库

登录Docker Hub。

docker login

输入账号密码后,就提示登录成功。

将镜像上传到仓库中。

docker push pengyaohuang/swarm_nginx_demo:1

这样,就上传成功啦。

而仓库上也有了我们刚推上去的镜像。

3.5.4、Swarm集群中部署应用

docker service create -p 8080:80 --replicas 3 --name swarm_demo pengyaohuang/swarm_nginx_demo:1

这里参数表示:

  • -p: 端口映射,这里将容器80端口映射到宿主机8080端口
  • --replicas:副本数量,即启动的容器数量,这里启动3个
  • --name:容器名称

3.5.5、查看服务信息

# 查看部署的服务列表
docker service ls

# 查看服务的详细信息
docker service ps

由于我这里集群错误了一个节点,因此这里只能看到2个副本。具体失败原因,还有待查看。

3.5.6、访问地址

浏览器访问地址:http://192.168.74.192:8080,查看效果:

可以看到,就算我们的Node2节点部署失败了,我们整个项目依然是可以正常访问。这也就说明了集群的高可用。

3.5.7、动态伸缩

使用docker swarm我们还可以动态的对我们的服务进行扩容和缩容。如以下命令,我需要将当前容器的副本改为5:

docker service scale swarm_demo=5

也可以减少为1:

docker service scale swarm_demo=1

还是很方便的。

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

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

相关文章

crypto-js中AES的加解密封装

在项目中安装依赖&#xff1a; npm i crypto-js在使用的页面引入&#xff1a; import CryptoJS from crypto-jscrypto-js中AES的加解密简单的封装了一下&#xff1a; //加密const KEY 000102030405060708090a0b0c0d0e0f // 秘钥 这两个需要和后端统一const IV 8a8c8fd8fe3…

栈和队列OJ题讲解

&#x1f493;博主个人主页:不是笨小孩&#x1f440; ⏩专栏分类:数据结构与算法&#x1f440; 刷题专栏&#x1f440; C语言&#x1f440; &#x1f69a;代码仓库:笨小孩的代码库&#x1f440; ⏩社区&#xff1a;不是笨小孩&#x1f440; &#x1f339;欢迎大家三连关注&…

mysql事务隔离级别详细讲解

mysql事务讲解 MySQL事务处理&#xff08;TransAction&#xff09; 大家好&#xff0c;我是一名热爱研究技术并且喜欢自己亲手实践的博主。 工作这么多年&#xff0c;一直没有深入理解MySQL的事务&#xff0c;因为最近也在面试&#xff0c;准备复习mysql的相关知识&#xff0…

verilog 实现异步fifo

理论知识参考 异步FIFO_Verilog实现_verilog实现异步fifo_Crazzy_M的博客-CSDN博客 代码 /* 位宽8bit, 位深8 */ module async_fifo#(parameter FIFO_DEPTH 8,parameter FIFO_WIDTH 8 ) (input rst_n,input wr_clk,input wr_en,input [FIFO_WIDTH - 1:0…

数据结构之红黑树

二叉搜索树对于某个节点而言&#xff0c;其左子树的节点关键值都小于该节点关键值&#xff0c;右子树的所有节点关键值都大于该节点关键值。二叉搜索树作为一种数据结构&#xff0c;其查找、插入和删除操作的时间复杂度都为O(logn),底数为2。但是我们说这个时间复杂度是在平衡的…

C#小轮子 Debug,Release,发布模式如何运行不同的代码

文章目录 前言C#运行模式运行模式介绍三种模式区分代码 前言 编译模式和发布模式的代码不一样是非常正常的。比较常见的是数据库不一样。编译测试数据库和发布真实的数据库地址不一样。 C#运行模式 运行模式介绍 运行模式有三种&#xff1a; Debug 不进行优化&#xff0c;…

逆向破解学习-经典贪吃蛇大作战_1.00

试玩游戏 有支付取消关键字 找静态代码 找到关键字 ![在这里插入图片描述](https://img-blog.csdnimg.cn/5d9f3cc57d18477794197ea5fae8c5ba.png Hook代码 import de.robv.android.xposed.XC_MethodHook; import de.robv.android.xposed.XC_MethodReplacement; import de.r…

MyBatis操作数据库常用用法总结1

文章目录 1.单表查询1.1返回所有的表记录1.2根据id查找结果1.3根据名字查找结果 2.单表修改2.1修改密码 3.单表删除3.1根据id删除信息 4.单表增加&#xff08;根据业务情况返回&#xff09;4.1添加返回影响的行数4.2添加返回影响行数和id 5.多表查询&#xff08;多&#xff09;…

网易云信回声消除量化评估方法

背景 随着现代通信技术的发展&#xff0c;语音通信成为了人们生活中不可或缺的一部分。然而&#xff0c;环境噪声和回声等因素对语音通信质量产生了不良影响&#xff0c;降低了通信效率和用户体验&#xff0c;声学回声消除技术的应用变得越来越重要。如何评估回声消除的效果也变…

详解如何计算字符中的字节数

文章目录 字符概念转义 进制的表示前缀区分后缀区分 什么是ASCII产生表述局限性字节计算 什么是Unicode编码方式UCS-2UCS-4 实现方式UTF的字节序和BOM字节计算 JavaScript中使用字符字符使用缺陷规避字符使用缺陷 MIME 编码Base64编码字节计算QP(Quote-Printable) 总结 字符概念…

进阶-LayUI的基本必知入门教程使用3-layui-laydate选择的值怎么获取?苟日新一刻钟总结反观:

1 效果镇楼&#xff1a; 对于layui框架的刚接触没几天&#xff0c;但是您的年轻同事为啥能搞出来功能啊&#xff01;&#xff1f; 到您就不行了呢&#xff1f; 这就是您对您饭碗的态度了吗&#xff01; 但是&#xff0c;是您尽力了&#xff0c;还能说明啥子问题&#xff1f; 就…

SOLIDWORKS自动标注插件

在设计工作中&#xff0c;三维模型设计好之后&#xff0c;还要创建二维工程图&#xff0c;用来指导加工生产。二维图出图的过程是一个非常枯燥的过程&#xff0c;而且还需要根据公司规范来进行尺寸标注、公差标注等&#xff0c;所以有时候&#xff0c;可能建模只用了几分钟&…

在UOS系统中管理ORACLE数据库

在明确了“数字中国”建设战略后。自主创新与国产化已成为我国实现科技强国、经济强国的发展趋势与行业共识。 即信息技术应用创新产业&#xff0c;简称“信创”。 而现有的国产操作系统&#xff0c;虽然已日趋成熟&#xff0c;但因为很多应用软件由国外垄断&#xff0c;因此…

一键获取数百张免费商用人脸!AI人脸生成器来袭

随着科技的发展&#xff0c;人工智能正在渗透到生活的各个角落&#xff0c;设计行业也不例外。在网页、APP、PPT 等界面设计中&#xff0c;设计师经常需要插入真实的人脸素材&#xff0c;以增强作品的真实感和场景化。但是获取素材既不容易&#xff0c;质量和价格也难免成为设计…

PK Nounique CASCADE DROP INDEX keep index

Explicit Control Over Indexes when Creating, Disabling, or Dropping PK/Unique Constraints (Doc ID 139666.1)​编辑To Bottom PURPOSEIn Oracle 9i, the DBA has an explicit control over how indexes are affectedwhile creating, disabling, or dropping Primary Ke…

【网络基础实战之路】基于BGP协议连接三个AS区域的实战详解

系列文章传送门&#xff1a; 【网络基础实战之路】设计网络划分的实战详解 【网络基础实战之路】一文弄懂TCP的三次握手与四次断开 【网络基础实战之路】基于MGRE多点协议的实战详解 【网络基础实战之路】基于OSPF协议建立两个MGRE网络的实验详解 【网络基础实战之路】基于…

网页版的微信客户管理系统是怎样的?

登录账号密码&#xff1a; 微信扫码登录到系统上&#xff1a; 支持多个微信号登录到系统&#xff0c;聚合管理聊天&#xff0c;可以快速查看客服号的聊天记录 群发助手&#xff1a;群发可突破200 朋友圈功能&#xff1a;定时发圈&#xff0c;支持多个微信账号同步发圈、跟圈和一…

恒运资本:投资前瞻:储能产业迎政策密集支持 AIGC有望进入加速状态

昨日&#xff0c;沪指、深成指盘中弱势下探&#xff0c;创业板指冲高回落。到收盘&#xff0c;沪指跌0.49%报3244.49点&#xff0c;深成指跌0.53%报11039.45点&#xff0c;创业板指微跌0.01%报2228.73点&#xff0c;科创50指数跌0.85%&#xff1b;两市合计成交7366亿元&#xf…

STM32 F103C8T6学习笔记4:时钟树、滴答计时器、定时器定时中断

今日理解一下STM32F103 C8T6的时钟与时钟系统、滴答计时器、定时器计时中断的配置&#xff0c;文章提供原理&#xff0c;代码&#xff0c;测试工程下载。 目录 时钟树与时钟系统&#xff1a; 滴答计时器&#xff1a; 定时器计时中断&#xff1a; 测试结果&#xff1a; 测…

echarts3d柱状图

//画立方体三个面 const CubeLeft echarts.graphic.extendShape({shape: {x: 0,y: 0,width: 9.5, //柱状图宽zWidth: 4, //阴影折角宽zHeight: 3, //阴影折角高},buildPath: function (ctx, shape) {const api shape.api;const xAxisPoint api.coord([shape.xValue, 0]);con…