Docker Swarm集群搭建以及服务命令等操作

2023-10-27

前言:之前都是采用rancher可视化管理工具进行管理K8S进一步管理容器,但是每次机器宕机后rancher中集群特别容易挂掉,出现的问题五花八门,在网上很难搜到解决方案,所以准备采用docker官方集群管理平台Swarm管理容器。

一、docker swarm集群搭建

环境:
主节点manager192.168.1.88
从节点node192.168.1.99
实际上manager也是一个node,manager获取客户端请求,对从节点进行调度工作

1.创建主节点

docker swarm init --advertise-addr 192.168.1.88

执行完成会出现一个注册从节点的命令
在这里插入图片描述

2.注册从节点
将上述命令在192.168.1.99上注册

docker swarm join  --token SWMTKN-1-3mhx8nr3g3w1gc6uxyztzoys1v49e8lhqndj6pindvirhzlylk-2ebgshiazezm66cfxhyr6pjth 192.168.1.88:2377

显示注册成功
在这里插入图片描述

二、使用集群

在使用之前先看看docker集群swarm的一些命令,其实它的命令和docker的某些命令非常相似,只是多加了一个service
在这里插入图片描述
docker service [commond]

命令 用途
create 创建新服务
inspect 展示一个或多个服务的详细信息
logs 查看服务的日志
ls 列出服务
ps 根据名称列出服务
rm 删除一个或多个服务
ps 缩放一个或多个复制服务
update 更新服务

1.查看当前节点信息

docker node ls

2.查看当前网络信息

docker network ls

3.创建一个私有网络,供不同节点互通使用

docker network create -d overlay new_network

4.使用创建的网络部署服务
此处创建一个使用net_network网络且名为my_nginx的服务
–replicas 参数来指定此服务在工作节点上运行的任务数。此处表示一个

docker service create --replicas 1 --network new_network --name my_nginx -p 80:80 nginx:latest

5.查看运行的服务列表

docker service ls

在这里插入图片描述
6.查看服务在哪个节点运行

docker service ps my_nginx

在这里插入图片描述
7.动态扩容服务数量

docker service scale my_nginx=2
等同于命令docker service update --replicas 3 my_nginx

在这里插入图片描述
8.下线/上线节点
下线节点,下线后不参与任务分派,但是如果它原本有容器,那么这些容器会转移到其他可用节点上

docker node update --availability drain node2

在这里插入图片描述

上线节点

docker node update --availability active node2

9.移除任务,删除所有容器

docker rm  my_nginx

在这里插入图片描述
10.节点离开集群

docker swarm leave (在要离开的节点上运行,在主节点执行则是删除集群,主节点需要在后面加上--force参数)

三、服务和容器的区别

以mysql搭建为例,正常我们使用docker,搭建命令如下:

docker run -p 3306:3306 --name mysql -v /home/mysql/conf:/etc/mysql -v /home/mysql/logs:/var/log/mysql -v /home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

如果我们用服务创建,则命令如下:

docker service create --name=mysql -p 3306:3306 --mount type=bind,src=/home/mysql/logs,dst=/var/log/mysql --mount type=bind,src=/home/mysql/data,dst=/var/lib/mysql --mount type=bind,src=/home/mysql/conf,dst=/etc/mysql --env MYSQL_ROOT_PASSOWORD=123456 mysql:5.7

不难看出来,差别还是挺大的,对应命令下表:

docker swarm
docker run docker service create
-p -p
-v —mount type=bind,src=,dst=
-e –env

四、指定节点运行服务

mysql服务搭建好以后又来了一个问题,我部署服务的时候,它自动给我分配节点,可是我想要指定节点,就需要给每个节点打上标签,在运行服务的时候,指定标签。

1.打标签

docker node update --label-add func=node node1
#func=node是自己指定的键值对,也可以指定其他的,在调用的时候注意替换就好了,node1是我们集群中hostname的名称

2.使用标签指定主机
还是以mysql为例
加上–constraint ‘node.labels.func == node’

docker service create --name=mysql -p 3306:3306 --constraint 'node.labels.func == node'
 --mount type=bind,src=/home/mysql/logs,dst=/var/log/mysql --mount type=bind,src=/home/mysql/data,dst=/var/lib/mysql --mount type=bind,src=/home/mysql/conf,dst=/etc/mysql --env MYSQL_ROOT_PASSOWORD=123456 mysql:5.7

五、portainer可视化管理Swarm

到这一步集群搭建完成,用portainer容器管理集群更加方便
安装Portainer版本: portainer-ce:2.0.1

汉化地址:https://github.com/eysp/public/releases
采用docker部署:

docker volume create portainer_data
docker run -d -p 8000:8000 -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data portainer/portainer-ce:2.0.1

portainer安装参考自:Docker集群可视化管理平台(Portainer)
如果你觉得,我都搭建好了集群,想把portainer加入集群,创建服务用如下命令(如果要指定节点请参考第四章,不指定则默认主节点):

docker service create --name=portainer -p 8000:8000 -p 9000:9000  --mount type=bind,src=//var/run/docker.sock,dst=/var/run/docker.sock --mount type=bind,src=/data/portainer/data,dst=/data --mount type=bind,src=/data/portainer/public,dst=/public portainer/portainer-ce:2.0.1

安装好以后访问IP:9000,输入新密码,进入后它会自动识别主机节点,识别集群的服务和容器
在这里插入图片描述
如果还想要添加从节点信息或者其它的docker集群等进行管理,进行配置其它节点或者环境。以下通过agent方式添加
1.进入http://ip:9000/#!/wizard/endpoints
在这里插入图片描述
2.在从节点上运行
容器:

docker run --name=portainer_agent -d --restart=unless-stopped \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v portainer_agent:/data/docker/volumes/ \
  -p 9001:9001 \
  portainer/agent:latest

服务:

docker service create --name portainer_agent --mode global --mount type=bind,src=//var/run/docker.sock,dst=/var/run/docker.sock --mount type=bind,src=//var/lib/docker/volumes,dst=/var/lib/docker/volumes portainer/agent

然后再页面输入ip:9001,点击添加完成,页面会出现绿色提示成功并刷新集群
在这里插入图片描述
如果你打算用服务来管理所有程序,个人觉得一般情况下不用再把从节点注册进来,因为就算注册了,在portainer里面也只有主节点可以看到所有服务。当然,把从从节点注册进去以后可以直接通过界面对从节点的容器和镜像以及存储卷等信息进行管理。更多用法正在完善中。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Docker Swarm集群搭建以及服务命令等操作 的相关文章

随机推荐

  • 第九届蓝桥杯,赛后感!!含泪写完。

    对于这一次的蓝桥杯我先说一下我的心情 说好的暴力破解 说好的DFS尼都没有我靠 这届的题目很变态 早上我起床是被拉肚子叫醒的 唉 早上9正开考 今年我们是在本学校考试 我吃完早饭去的考场 这里我要说明一下 本来蓝桥杯是提供早餐的 但是老师说
  • Unity 烘焙贴图后再拖成预设体后场景光照信息丢失

    场景中对预设体进行烘焙贴图后 然后删掉场景中的预设体 接着再通过代码实例化这个预设体或者直接拖一个预设体进入一个场景 都会发现场景光照信息丢失 光照信息丢失的主要原因是 解决这个问题的办法如下 先准备一个场景 如下 上面的红色物体全部勾选为
  • 如何给Python轻应用添加新的组件:Python轻应用扩展适配介绍

    AliOS Things 3 3 0新版本中 其中非常中的一个特点 就是支持Python轻应用 也就是可以直接使用Python代码来写物联网程序 并且控制软件设备 这是HaaS物联网设备云端一体Low Code开发框架的核心之一 那本文讲介
  • C++ 惯用法之 copy and swap

    背景 STL 中提供了 swap 算法 用于交换两个对象的值 对于资源管理类 我们可以提供自定义的高效 swap 以仅交换指针 通常包含资源 指针 的类需要提供自定义的拷贝及移动相关操作函数 资源管理类 概述 通常包含资源 指针 的类需要提
  • Talib技术因子详解(十)

    talib安装方式 pip install Ta lib Tushare数据获取请参考 金融量化分析基础环境搭建 数据获取代码请参考 Talib技术因子详解 一 101 CDLPIERCING名称 Piercing Pattern 刺透形态
  • JS中获取URL中参数的4种方法

    方法一 正则 function getQueryString name var reg new RegExp name i var r window location search substr 1 match reg if r null
  • 如何在 JavaScript 中将数组转为对象

    首先 我们需要明白对象具有键和值 const object key value 如果我们想把某个东西转换成一个对象 我们需要传递具有这两个要求的东西 键和值 满足这些要求的参数有两种类型 具有嵌套键值对的数组 Map 对象 数组 这是一个带
  • C语言常见的陷阱与缺陷

    1 不等同于 在刚接触c语言的时候 这属于是初学者常见的错误 是赋值符 是关系运算符 当我们在使用if判断语句的时候 初学者很容易犯的一个错误 就是把if x 1 写成if x 1 这样写时编译器并不会报错 因为后者会被解析为把1赋值给x
  • vue中ECharts使用

    第一步 下载echarts 并导入 npm install echarts save import echarts from echarts 导入echarts import from lodash 导入数据合并 第二部 在绘图前我们需要为
  • 现场!李飞飞斯坦福对话基因编辑发明人杜德纳:两大科技的伦理和创新走向何方?...

    热点追踪 深度探讨 实地探访 商务合作 本文来源微信公众号 硅谷洞察 ID guigudiyixian 硅谷洞察 链接硅谷资源的第一入口 本文由硅谷洞察原创 首发于腾讯科技 未经硅谷洞察或腾讯科技授权 请勿转载 人工智能和基因编辑无疑是两大
  • win11使用wsl2安装Linux子系统

    WSL Windows subsystem for Linux 顾名思义 就是在Windows中使用的Linux子系统 使开发者能够在window中无障碍使用Linux系统 下面介绍一下怎么在win11环境中搭建wsl2 1 开启子系统功能
  • Docker容器中Mysql数据的导入/导出详解

    前言 Mysql数据的导入导出我们都知道一个mysqldump命令就能够解决 但如果是运行在docker环境下的mysql呢 解决办法其实还是用mysqldump命令 但是我们需要进入docker的mysql容器内去执行它 并且通过配置vo
  • 《软件建模与设计》学习笔记(一)——引言

    软件建模与设计 学习笔记 一 引言 引言 1 在用例建模中 系统的功能性需求按照用例和参与者进行定义 静态建模 提供了系统的结构化视图 类按照七属性以及与其他类的关系进行定义 动态建模提供了系统的行为视图 用例是通过对象之间的交互来实现的
  • windows自定义命令

    用习惯了ls 用dir不习惯 mac一直是使用ins命令编译 不想再敲那么长的命令 找个目录 写文件 例如 C Users Administrator Documents 然后将这个目录加入到环境变量里面 我的电脑 右击 属性 高级系统设置
  • 工具类GlobalCache

    package com neo config import org springframework stereotype Component import java util Map import java util concurrent
  • 解决Hololens2配置MRTK2.7版本官方教程中的一个问题

    具体的配置可以参考官方的MRTK2 7配置教程 https docs microsoft com en us windows mixed reality develop unity tutorials mr learning base 02
  • 配置qnx6.6中screen 环境变量

    锋影 e mail 174176320 qq com 配置qnx6 6 中 screen 环境变量 根据 Screen Graphics Subsystem Developer s Guide 总结 停止 screen 进程 slay sc
  • plsql developer 通过ip链接数据库

    数据库 ip 1521 sid 或 ip sid
  • oracle因为日志错误无法打开

    今天在启动我得数据库时 发现数据库只能mounted 无法打开 提示错误 今天在启动我得数据库时 发现数据库只能mounted 无法打开 提示错误 SQL gt select open mode from v database OPEN M
  • Docker Swarm集群搭建以及服务命令等操作

    前言 之前都是采用rancher可视化管理工具进行管理K8S进一步管理容器 但是每次机器宕机后rancher中集群特别容易挂掉 出现的问题五花八门 在网上很难搜到解决方案 所以准备采用docker官方集群管理平台Swarm管理容器 一 do