宣传单网站/广告宣传费用一般多少
前言
我们知道Docker的“使命”
是为了快速完成应用的迁移和部署。为提升它的战斗能力,Docker官方携手发布了Docker Swarm
—— 一个快速完成Docker集群构建的利器。那么请先回忆一下本系列第八篇(重点compose)和第九篇(重点network),一个是为了完成在同一个Docker主机下多容器的编排和运行,另外一个是为Docker主机与容器之间或容器与容器之间进行通信而提供的基本网络类型。
而Docker Swarm
同样具备容器编排能力,其价值体现在跨主机集群式的容器管理和编排能力上。可以理解为Docker Swarm
是对compose
的能力的拓展和延伸,同时又依赖了一个新的网络类型overlay
——实现跨主机的容器通信。
今天博主带着各位继续玩转docker,开始集群化探索之旅,今天先聊聊Docker Swarm
是怎么回事,有哪些好玩的地方。
一. Docker Swarm简介
先来看看它的主要“功效”
:
Docker Swarm是Docker官方2014年提供的容器编排工具,旨在简化容器化应用程序的部署、管理和扩展。它允许构建多主机的容器集群,并支持统一管理所有主机上的容器。
它的Logo是“堆叠”
起来的Docker,挺有趣。博主最近很喜欢研究每一款“弄潮儿”
的Logo,尤其是Logo背后的含义,不由思绪飞扬:
Logo
一定程度体现了产品的价值或本质,一个Logo
的诞生,往往代表了创作者的学习、抽象、概述能力的水平。据此可见,凡成功者,皆离不开这些优秀的品质。
1. 网络基础(overlay)
在前文中博主提到了docker支持的网络类型,其中有一类网络类型,没有重点展开。这种网络,可以说是专为集群服务的,也就是overlay
——一个虚拟的通信网络。
2. 工作原理
这是一张来自官方的Docker Swarm
运行架构图,看起来非常“简洁”
,显然一个master-slave
架构模式。此刻你应该会想起点啥? (比如类似此架构的工具有哪些?)
3. 术语/名词解释
术语/名词 | 功能描述 |
---|---|
Manger node | Docker Swarm集群的管理节点,负责发号施令和选举,是整个集群的“大脑” 。 |
Worker node | Docker Swarm集群的工作节点,负责接收和执行任务,也就是“干活” 的。 |
Service | 一种集群服务,负责传递整个集群的工作命令 ,需指定具体的容器镜像。 |
Task | 在每个node上完成的任务,负责对容器进行各种操作。 |
下图是基于各单元模块的“极简工作流”
:
二. 创建Docker Swarm cluster
1. 准备cluster资源
本次博主的演示环境为centos7,当然你也可以使用更高的版本或者其他linux系统。
节点名称 | 用途 |
---|---|
docker-mananger | docker swarm集群的manager node ,IP为10.11.12.70 |
docker-worker1 | docker swarm集群的worker node ,IP为10.11.12.73 |
docker-worker2 | docker swarm集群的worker node ,IP为10.11.12.74 |
根据Raft协议,最好是奇数,所以准备3个节点,组建集群。
2. 安装 docker
在以上3个节点中,分别安装docker,可按如下“兵法”
出战:
2.1 替换yum源并安装
# 1. 替换yum源为aliyun
curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
# 2. 安装yum
yum -y install yum-utils
# 3. 清理yum缓存
yum clean all
# 4. 重新创建yum缓存
yum makecache
2.2 更新docker源
# 指定docker源
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-e/g' /etc/yum.repos.d/docker-ce.repo
yum makecache
2.3 安装docker-ce
# 1. 安装docker
yum install -y docker-ce
# 2. 更新加速器
vi /etc/docker/daemon.json
输入:{"registry-mirrors": ["https://docker.m.daocloud.io","https://dockerproxy.com","https://docker.mirrors.ustc.edu.cn","https://docker.nju.edu.cn"
]}
# 3. 重新加载配置
systemctl daemon-reload
# 4.重启docker
systemctl restart docker
如执行完毕,可通过docker -v
验证是否已完成:
3. 安装Docker Swarm集群
在集群构建前,我们可以通过docker info
看到:swarm : inactive,代表未启用。
接下来我们可以启用它,并让它开始干活吧。
3.1 创建manager node
创建集群,首先要create一个manager
,通过docker swarm init
命令完成:
docker swarm init --advertise-addr 10.11.12.70
执行后,会启用端口2377
,并返回join token:
此时,我们再通过docker info
看到:swarm : active,代表已启用swarm集群模式。
3.2 创建网络
创建一个overlay网络,用于集群内节点通信,通过docker network create
完成:
docker network create -d overlay service-nginx
结果如下:
3.3 创建worker node
如其他docker主机需加入swarm集群,可通过凭证(通过--token
指定)加入,通过docker swarm join
命令完成:
# 指定凭证参数--token,manager主机10.11.12.70:2377docker swarm join --token SWMTKN-1-56x847iatimmt3u2fj76abegf7474z481r0jx0j4yh8hv7k9je-67wubc6q6v0fis79ihbhsfm0a 10.11.12.70:2377
那么该命令需要在docker-worker1
和docker-worker2
节点分别完成:
3.4 查看cluster状态
通过docke node ls
,可观察到此时集群有1个manager(Status=Leader),2个worker节点,并均处于Active
状态:
三. 发布一个应用服务
集群创建完成后,我们开始愉快的让它干活吧。为便于举例,博主以常用的nginx
为例。
1. 获得一个镜像nginx
通过docker pull nginx
获取最新镜像。成功后,可执行docker images
查看:
提醒:每个节点均需执行pull镜像,否则可能遇到
No such image: nginx:latest
问题。
2. 发布一个Service
通过docker serivce create
向集群发布一个service:
# --replicas指定副本个数,--network指定运行网络,--name指定容器名,-p指定映射端口
docker service create --replicas 3 --network service-nginx --name my_nginx -p 8888:80 nginx
执行结果如下:
可见,当前有3个nginx
副本已经启动起来了,并且均为running
状态。
3. 查看Service执行情况
可通过docker service ls
命令查看该service状态,其中的REPLICAS代表已创建和已运行的副本数(3/3):
4. 查看Service执行节点
可通过docker service ps
命令,查看该service发布到了哪些节点上:
# 指定容器名称
docker service ps my_nginx
结果如下:
此时,你可以登录其中一个worker节点,通过docker ps
查看容器运行情况:
5. 验证nginx应用
如以上均执行完成,可通过浏览器打开以下地址,获得惊喜:
http://10.11.12.70:8888/
http://10.11.12.73:8888/
http://10.11.12.74:8888/
结语
Docker Swarm
以它简洁、高效、容错的机制,为我们的服务提供了一套完整的分布式部署和运维的解决方案,同时它以swarmkit
方式内嵌于docker引擎中。不管是对开发、运维还是其他爱好者,均有不错的使用体验。
作为一个集群爱好者,相信此文章会给带来不一样的体验,希望有助于你!
系列回顾
微服务实战系列之玩转Docker(九)
微服务实战系列之玩转Docker(八)
微服务实战系列之玩转Docker(七)
微服务实战系列之玩转Docker(六)
微服务实战系列之玩转Docker(五)
微服务实战系列之玩转Docker(四)
微服务实战系列之玩转Docker(三)
微服务实战系列之玩转Docker(二)
微服务实战系列之玩转Docker(一)
微服务实战系列之云原生
相关文章:

微服务实战系列之玩转Docker(十)
前言 我们知道Docker的“使命”是为了快速完成应用的迁移和部署。为提升它的战斗能力,Docker官方携手发布了Docker Swarm—— 一个快速完成Docker集群构建的利器。那么请先回忆一下本系列第八篇(重点compose)和第九篇(重点networ…...

Mysql(四)---增删查改(进阶)
文章目录 前言1.查询操作1.1.全列查询1.2.指定列查询1.3.列名为表达式查询1.4.查询中使用别名1.5.去重查询1.6.排序1.6.2.NULL 1.7.条件查询1.8.分页查询 2.修改3.删除 前言 上一篇博客,我们学习了一些主键的概念,并且分别创造了一些示例表,…...

SOAP @WebService WSDL
SOAP & WebService & WSDL SOAP(Simple Object Access Protocol)WebService(Web服务)WSDL(Web Services Description Language) SOAP(Simple Object Access Protocol) **是一…...

【Qt】QWidget的toolTip属性
QWidget的toolTip属性 如果一个GUI程序,界面比较复杂,按钮比较多,使用toolTip可以设置当鼠标悬停在控件上的时候,可以弹出一个提示。 API说明 setToolTip 设置 toolTip. ⿏标悬停在该 widget 上时会有提⽰说明. setToolTipDur…...

【操作系统】什么是进程?什么是线程?两者有什么区别(面试常考!!!)
什么是进程/任务(Process/Task) 当我们打开我们的电脑的任务管理器就可以看到我们的电脑正在执行的进程。 每个应用程序运行于现代操作系统之上时,操作系统会提供一种抽象,好像系统上只有这个程序在运行,所有的硬件资…...

AI -- Machine Learning
1. What is Machine Learning 1.1 Artificial Intelligence vs. Machine Learning 1.2 Relations to Other Disciplines 与其他学科的关系 1.3 Human Learning vs. Machine Learning 1.4 What is Skill in Machine Learning 什么是机器学习的技能 1.5 Two General Types of Le…...

了解交换机_1.交换机的技术发展
1.LAN的分段-单网线 最简单的网络是两台计算机通过一根网线相连: 一根网线它有很多限制,首先只能连接两台电脑,其次不能距离太远,主要因为: (1)单路网线太长会存在信号衰减;…...

ubuntu 24.04 安装 Nvidia 显卡驱动 + CUDA + cuDNN,配置 AI 深度学习训练环境,简单易懂,一看就会!
ubuntu 24.04 安装 Nvidia 显卡驱动 CUDA cuDNN,配置 AI 深度学习训练环境,简单易懂,一看就会! 1.查看本机显卡型号 lspci | grep -i nvidia输出如下: 01:00.0 3D controller: NVIDIA Corporation GM108M [GeForc…...

跟李沐学AI:目标检测的常用算法
区域神经网络R-CNN 使用启发式搜索算法来选择锚框 -> 使用预训练模型来对每个锚框抽取特征 -> 训练一个SVM对类别进行分类 -> 训练一个线性回归模型来预测边缘框偏移 锚框大小不一,如何将不同的锚框统一为一个batch? -> 兴趣区域池化层 兴趣区域(RoI…...

基于UE5和ROS2的激光雷达+深度RGBD相机小车的仿真指南(一)---UnrealCV获取深度+分割图像
前言 本系列教程旨在使用UE5配置一个具备激光雷达深度摄像机的仿真小车,并使用通过跨平台的方式进行ROS2和UE5仿真的通讯,达到小车自主导航的目的。本教程使用的环境: ubuntu 22.04 ros2 humblewindows11 UE5.4.3python8 本系列教程将涉及以…...

Java算法解析一:二分算法及其衍生出来的问题
这个算法的前提是,数组是升序排列的 算法描述: i和j是指针可以表示查找范围 m为中间值 当目标值targat比m大时,设置查找范围在m右边:i m-1 当目标值targat比m小时,设置查找范围在m左边:j m1 当targat的…...

数学建模预测类—【一元线性回归】
每日格言:行动是治愈恐惧的良药,而犹豫拖延将不断滋养恐惧. 目录 前言 一、什么是回归分析? 1.概念理解 2.分类和一般步骤 二、一元线性回归(Matlab算法) 1.利用regress函数 2、例题讲解 总结 前言 在具体讲述线性回归…...

配置更加美观的 Swagger UI
//注册Swagger服务 private static void AddSwaggerService(IServiceCollection services){services.AddSwaggerGen(opt >{opt.SwaggerDoc("Push", new OpenApiInfo{Version "v1",Title "Push API",Description "Push API 文档"…...

软件测试 - 基础(软件测试的生命周期、测试报告、bug的级别、与开发人员产生争执的调解方式)
一、软件测试的生命周期 测试贯穿软件的整个生命周期 软件测试的生命周期: 需求分析 →测试计划→ 测试设计、测试开发→ 测试执行→ 测试评估->上线->运行维护 需求分析:判断用户的需求是否合理,是否可实现 测试计划:计划项…...

RTX 4070 GDDR6显存曝光:性能与成本的平衡之选
近期,关于NVIDIA RTX 4070新显卡的信息曝光,这款显卡将配备较为缓慢的GDDR6显存,而非更高性能的GDDR6X。这一配置的选择引发了业内的广泛关注,特别是在性能与成本的平衡问题上。 新版RTX 4070 OC 2X的核心特点 **1.显存类型与带…...

canvas的基础使用
canvas的基础使用 一、画一条直线二、线的属性设置三、防止多次绘制的样式污染四、闭合五、快捷绘制矩形六、绘制圆形七、绘制文字八、绘制图片js版dom版图片截取 一、画一条直线 画一条直线需要用到三个方法:cxt.moveTo、cxt.lineTo、cxt.stroke <canvas id&qu…...

Windows 常用网络命令之 telnet(测试端口是否连通)
文章目录 1 概述1.1 启用 telnet 2 常用命令2.1 ping:测试网络是否连通2.2 telnet:测试端口是否连通 3 扩展3.1 进入 cmd 命令3.2 cls 清屏命令 1 概述 1.1 启用 telnet telnet ip:port // 格式 telnet 10.0.24.154:8001若出现上述提示&…...

x264 编码器像素运算系列:asd8函数
x264 编码器中像素间运算 在 x264 编码器中有多种像素间的运算,如下: sad 计算:SAD(Sum of Absolute Differences,绝对差值和)是一种在图像处理和视频编码中常用的度量,用于计算两个图像块之间的差异。SAD值越小,表示两个图像块越相似。hadamard_ac计算:用于计算Hadam…...

什么是AR、VR、MR、XR?
时代背景 近年来随着计算机图形学、显示技术等的发展,视觉虚拟化技术得到了广泛的发展,并且越来越普及化,慢慢的也走入人们的视野。目前市场上视觉虚拟化技术的主流分为这几种 VR、AR、MR、XR。这几项技术并不是最近才出现的,VR的…...

Epic Games 商店面向欧盟 iPhone 用户上线
Epic Games Store 终于在欧盟推出,为玩家提供了不通过 App Store 就能在 iPhone上访问游戏的途径。在经历了漫长而昂贵的关于支付和竞争对手应用程序店面的法律战,以及公证方面的麻烦之后,Epic Games 成功地为App Store 带来了一个数字店面。…...

【计算机毕设项目】2025级计算机专业小程序项目推荐 (小程序+后台管理)
以下项目选题适合计算机专业大部分专业,技术栈主要为:前端小程序,后端Java语言,数据库MySQL 后台免费获取源码,可提供远程调试、环境安装配置服务。(文末有联系方式) 以下是本次部分项目推荐1…...

Fast API + LangServe快速搭建 LLM 后台
如果快速搭建一个 LLM 后台 API,使前端可以快速接入 LLM API。LangChain 或者 LlamaIndex 架构都可以快速集成各种大语言模型,本文将讲述如何通过 Fast API LangServe 快速的搭建一个后台 Rest API 服务。LLM 这些框架现在主打一个就是快速,…...

CSS继承、盒子模型、float浮动、定位、diaplay
一、CSS继承 1.文字相关的样式会被子元素继承。 2.布局样式相关的不会被子元素继承。(用inherit可以强行继承) 实现效果: 二、盒子模型 每个标签都有一个盒子模型,有内容区、内边距、边框、外边距。 从内到外:cont…...

使用百度文心智能体创建AI旅游助手
百度文心智能体平台为你开启。百度文心智能体平台,创建属于自己的智能体应用。百度文心智能体平台是百度旗下的智能AI平台,集成了先进的自然语言处理技术和人工智能技术,可以用来创建属于自己的智能体应用,访问官网链接࿱…...

斗破C++编程入门系列之四:运算符和表达式
鸡啄米C 记住首页不迷路: http://www.jizhuomi.com/software/129.html 斗破观看顺序: https://v.haohuitao.cc/yhplay/336-1-2.html 第一季☞第二季前2集☞特别篇1☞第二季3~12集☞特别篇2沙之澜歌☞第三季☞第四季☞三年之约☞缘起☞年番…...

CVPR2024 | PromptAD: 仅使用正常样本进行小样本异常检测的学习提示
PromptAD: 仅使用正常样本进行小样本异常检测的学习提示 论文名称:PromptAD: Learning Prompts with only Normal Samples for Few-Shot Anomaly Detection 论文地址:https://arxiv.org/pdf/2404.05231 研究背景 异常检测(Anomaly Detecti…...

文件批量上传,oss使用时间戳解决同名问题 以及一些sql bug
1.文件批量上传 ApiOperation(value "文件批量上传")PostMapping("/multipleImageUpload")Transactional(rollbackFor Exception.class)public Result multipleImageUpload(ApiParam(name "files",value "文件",required true) R…...
机器学习——线性回归(sklearn)
目录 一、认识线性回归 1. 介绍 2. 多元线性回归的基本原理(LinearRegression) 二、多重共线性 1. 介绍 2. 多重共线性详细解释 三、岭回归(解决多重共线性问题) 1. 模型推导 2. 选取最佳的正则化参数取值 四、Lasso&am…...

Go 语言切片(Slice) 15
在 Go 语言中,切片(Slice)是一种可以容纳多个值的数据结构,它可以被视为一个可变的数组。切片是一个引用类型,它可以容纳任意类型的值,可以是整数、字符串、浮点数、结构体等。 切片的声明方式是使用 [] 语法,例如&am…...

嵌入式开发--STM32G030C8T6,写片上FLASH死机CFGBSY和写入出错
故障现象1 G0系列,写片上FLASH时,经常死机,而且按复位键都没用,属于不断电都救不回来的那种死法。这种情况一般是由硬件置位了某个标志导致,只有断电才能故障复原。 故障查找 检查FLASH的相关寄存器,发现…...