docker swarm

1.准备三台机器,分别安装docker,例如IP分别为:

        192.168.88.131,192.168.88.136,192.168.88.138

2.修改/etc/hostname 分别为:

        manger,node1,node2

3.分别修改/etc/hosts添加: 

        192.168.88.131  manger

        192.168.88.136  node1

        192.168.88.138  node2

创建swarm集群

初始化swarm

docker swarm init --advertise-addr 192.168.88.131

--advertise-addr参数表示其它swarm中的worker节点使用此ip地址与manager联系

Swarm initialized: current node (ixsi4v1hsb0w5pcg5u71s5dfh) is now a manager.To add a worker to this swarm, run the following command:# 这就是添加节点的方式docker swarm join --token SWMTKN-1-4xj9hgftxeu6nsqlxpk9k9b7fgh2urka9t80ofxorlzbyjrrvz-cgp4ie0h8jk15pcltzgljra0g 192.168.88.131:2377To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

注意:保存初始化后token,因为在节点加入时要使用token作为通讯的密钥

添加节点到swarm

在 192.168.88.136 与 192.168.88.139 上分别执行:

docker swarm join --token SWMTKN-1-4xj9hgftxeu6nsqlxpk9k9b7fgh2urka9t80ofxorlzbyjrrvz-cgp4ie0h8jk15pcltzgljra0g 192.168.88.131:2377

[root@node1]# docker swarm join --token SWMTKN-1-4xj9hgftxeu6nsqlxpk9k9b7fgh2urka9t80ofxorlzbyjrrvz-cgp4ie0h8jk15pcltzgljra0g 192.168.88.131:2377
This node joined a swarm as a worker.

注意:节点机器要能访问manger的2377端口

node 命令:

1.查看节点列表:docker node ls 
[root@manger]# docker node ls
ID                            HOSTNAME   STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
ixsi4v1hsb0w5pcg5u71s5dfh *   manger     Ready     Active         Leader           20.10.16
2tdqxnzgn57na71p3uk7soqap     node1      Ready     Active                          20.10.16
hnqkyddxdr7tlxcec5bqmbn3d     node2      Ready     Active                          20.10.16

node ID旁边那个*号表示现在连接到这个节点上

2.更改节点的availablity状态: docker node update --availability drain node1
[root@manger]# docker node update --availability drain node1
node1
[root@manger]# docker node ls
ID                            HOSTNAME   STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
ixsi4v1hsb0w5pcg5u71s5dfh *   manger     Ready     Active         Leader           20.10.16
2tdqxnzgn57na71p3uk7soqap     node1      Ready     Drain                           20.10.16
hnqkyddxdr7tlxcec5bqmbn3d     node2      Ready     Active                          20.10.16

swarm集群中node的availability状态可以为 active或者drain,其中:

active状态下,node可以接受来自manager节点的任务分派;

drain状态下,node节点会结束task,且不再接受来自manager节点的任务分派(也就是下线节点)

swarm中部署服务

这里案例是部署nginx服务,分别在三台机器上安装了相同版本的nginx镜像,也可以只在manger上安装镜像,其他节点会自动拉取镜像,但这需要有网络

创建网络

docker network create -d overlay nginx_net

  • -d 参数用于指定网络驱动程序
  • overlay 是一种网络驱动程序的类型,网络驱动程序是 Docker 中用于实现容器间通信和网络隔离的组件。overlay 驱动程序是一种跨多个 Docker 宿主机的网络驱动程序,它允许创建分布式应用程序,其中容器可以在不同的宿主机上运行,并且仍然可以通过网络进行通信。当使用 overlay 驱动程序创建网络时,可以在不同的 Docker 宿主机上运行容器,并且它们可以通过该网络进行通信,就好像它们在同一台宿主机上运行一样。这对于构建分布式应用程序、容器编排和负载均衡非常有用。

服务部署

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

在 Docker Swarm 模式下,docker service create 命令用于创建一个服务

  • --replicas 1:这指定了服务的副本数。在这个例子中,指定了 1 个副本,这意味着 Swarm 将确保始终有一个运行的容器实例来提供这项服务。

  • --network nginx_net:这指定了服务将连接到的网络。在这个例子中,服务使用的是名为 nginx_net 的网络,这是一个预先创建的网络,使用 overlay 驱动程序创建的,这允许跨多个 Docker 主机的容器通信。

注意:这里要指定镜像名和版本号

[root@manger]# docker service create --replicas 1 --network nginx_net --name my_nginx -p 80:80 nginx:latest
f1l9qk1myxhhecvkhmb880s7z
overall progress: 1 out of 1 tasks 
1/1: running   [==================================================>] 
verify: Service converged 

查看运行的服务

docker service ls

[root@manger]# docker service ls
ID             NAME       MODE         REPLICAS   IMAGE          PORTS
f1l9qk1myxhh   my_nginx   replicated   1/1        nginx:latest   *:80->80/tcp

查看服务运行在哪个节点

docker service ps my_nginx

[root@manger ~]# docker service ps my_nginx
ID             NAME         IMAGE          NODE      DESIRED STATE   CURRENT STATE           ERROR     PORTS
epy1sa80788b   my_nginx.1   nginx:latest   manger    Running         Running 2 minutes ago   

查询Swarm中服务的信息

docker service inspect --pretty my_nginx

在Swarm中动态扩展服务(scale)

docker service scale my_nginx=2

[root@manger ~]# docker service scale my_nginx=2
my_nginx scaled to 2
overall progress: 2 out of 2 tasks 
1/2: running   [==================================================>] 
2/2: running   [==================================================>] 
verify: Service converged 
[root@manger ~]# docker service ls
ID             NAME       MODE         REPLICAS   IMAGE          PORTS
f1l9qk1myxhh   my_nginx   replicated   2/2        nginx:latest   *:80->80/tcp
[root@manger ~]# docker service ps my_nginx
ID             NAME         IMAGE          NODE      DESIRED STATE   CURRENT STATE            ERROR     PORTS
epy1sa80788b   my_nginx.1   nginx:latest   manger    Running         Running 8 minutes ago              
epj01r396741   my_nginx.2   nginx:latest   node1     Running         Running 16 seconds ago # manger上
[root@manger ~]# docker ps 
CONTAINER ID   IMAGE                        COMMAND                  CREATED          STATUS          PORTS                                                                                            NAMES
1aa09354770e   nginx:latest                 "/docker-entrypoint.…"   10 minutes ago   Up 10 minutes   80/tcp                                                                                           my_nginx.1.epy1sa80788bdzd84kvabhwy7# node1上
[root@node1 ~]# docker ps
CONTAINER ID   IMAGE          COMMAND                  CREATED         STATUS         PORTS     NAMES
362a88f3ff9a   nginx:latest   "/docker-entrypoint.…"   3 minutes ago   Up 3 minutes   80/tcp    my_nginx.2.epj01r396741eu1tjq4prl4na

可以看到 replicas 为2, 当前2个服务运行在 manger,node1上

模拟宕机node节点,服务动态移动

如果一个节点宕机了(即该节点就会从swarm集群中被踢出),则Docker应该会将在该节点运行的容器,调度到其他节点,以满足指定数量的副本保持运行状态。

# node1 上
[root@node1 ~]# systemctl stop docker# manger 上
[root@manger ~]# docker node ls
ID                            HOSTNAME   STATUS    AVAILABILITY   MANAGER STATUS   ENGINE VERSION
ixsi4v1hsb0w5pcg5u71s5dfh *   manger     Ready     Active         Leader           20.10.16
2tdqxnzgn57na71p3uk7soqap     node1      Down      Active                          20.10.16
hnqkyddxdr7tlxcec5bqmbn3d     node2      Ready     Active                          20.10.16[root@manger ~]# docker service ps my_nginx
ID             NAME             IMAGE          NODE      DESIRED STATE   CURRENT STATE                    ERROR     PORTS
epy1sa80788b   my_nginx.1       nginx:latest   manger    Running         Running 14 minutes ago                     
9jb9uzkdx0uz   my_nginx.2       nginx:latest   node2     Running         Running less than a second ago             
epj01r396741    \_ my_nginx.2   nginx:latest   node1     Shutdown        Running 6 minutes ago   

可以看到 node1的状态Down, 当前2个服务运行在 manger,node2上

在swarm cluster集群中启动的容器,在worker node节点上删除或停用后,该容器会自动转移到其他的worker node节点上

Swarm 动态缩容服务(scale)

  • docker service scale my_nginx=1
[root@manger ~]# docker service scale my_nginx=1
my_nginx scaled to 1
overall progress: 1 out of 1 tasks 
1/1:   
verify: Service converged 
[root@manger ~]# docker service ls
ID             NAME       MODE         REPLICAS   IMAGE          PORTS
f1l9qk1myxhh   my_nginx   replicated   1/1        nginx:latest   *:80->80/tcp
[root@manger ~]# docker service ps my_nginx
ID             NAME             IMAGE          NODE      DESIRED STATE   CURRENT STATE            ERROR     PORTS
epy1sa80788b   my_nginx.1       nginx:latest   manger    Running         Running 25 minutes ago             
9jb9uzkdx0uz   my_nginx.2       nginx:latest   node2     Shutdown        Complete 3 minutes ago             
epj01r396741    \_ my_nginx.2   nginx:latest   node1     Shutdown        Shutdown 3 minutes ago 

可以看到 replicas 为1, 当前1个服务运行在 manger上

  • docker service update --replicas 1 my_nginx
[root@manger ~]# docker service update --replicas 1 my_nginx
my_nginx
overall progress: 1 out of 1 tasks 
1/1: running   [==================================================>] 
verify: Service converged 
[root@manger ~]# docker service ps my_nginx
ID             NAME         IMAGE          NODE      DESIRED STATE   CURRENT STATE            ERROR     PORTS
epy1sa80788b   my_nginx.1   nginx:latest   manger    Running         Running 27 minutes ago             
[root@manger ~]# 

使用 --replicas 缩容服务会清除掉停止的服务记录

重建节点服务

docker service update --force my_nginx

重启或者在不同的节点上重建特定的服务副本

删除swarm服务

docker service rm my_nginx

[root@manger ~]# docker service rm my_nginx
my_nginx
[root@manger ~]# docker service ls
ID        NAME      MODE      REPLICAS   IMAGE     PORTS
[root@manger ~]# docker service ps my_nginx
no such service: my_nginx

swarm + docker-compose 

vim docker-compose.yml

version: "3"
services:nginx:image: nginx:latestports:- 8888:80deploy:mode: replicatedreplicas: 3visualizer:image: dockersamples/visualizer:latestports:- "8080:8080"volumes:- /var/run/docker.sock:/var/run/docker.sockdeploy:replicas: 1placement:constraints: [node.role == manager]portainer:image: portainer/portainer:latestports:- "9000:9000"volumes:- /var/run/docker.sock:/var/run/docker.sockdeploy:replicas: 1placement:constraints: [node.role == manager]

deploy:

  • mode: replicated: 指定部署模式为复制模式,这是 Swarm 服务的默认模式,意味着服务会在多个节点上复制运行。
  • replicas: 3: 指定启动 nginx 服务的副本数为 3。Swarm 会确保有三个 nginx 容器在集群中运行。
  • replicas: 1: 该服务只有一个副本。
  • placement: constraints: [node.role == manager]: 限制该服务只能部署在manger节点上。
[root@manger docker-swarm]# docker service ls
ID             NAME                       MODE         REPLICAS   IMAGE                             PORTS
yatq3t8u6wn5   deploy_deamon_nginx        replicated   3/3        nginx:latest                      *:8888->80/tcp
47wbd3gxdm72   deploy_deamon_portainer    replicated   1/1        portainer/portainer:latest        *:9000->9000/tcp
b3o2nhue4eb3   deploy_deamon_visualizer   replicated   1/1        dockersamples/visualizer:latest   *:8080->8080/tcp[root@manger docker-swarm]# docker service ps deploy_deamon_nginx
ID             NAME                    IMAGE          NODE      DESIRED STATE   CURRENT STATE               ERROR     PORTS
rc6zyh66ywte   deploy_deamon_nginx.1   nginx:latest   manger    Running         Running about an hour ago             
0lcd8qs5vvhy   deploy_deamon_nginx.2   nginx:latest   node1     Running         Running about an hour ago             
ic824cfmnyg9   deploy_deamon_nginx.3   nginx:latest   node2     Running         Running about an hour ago             [root@manger docker-swarm]# docker service ps deploy_deamon_portainer
ID             NAME                        IMAGE                        NODE      DESIRED STATE   CURRENT STATE               ERROR     PORTS
opp4pwveq35q   deploy_deamon_portainer.1   portainer/portainer:latest   manger    Running         Running about an hour ago             [root@manger docker-swarm]# docker service ps deploy_deamon_visualizer
ID             NAME                         IMAGE                             NODE      DESIRED STATE   CURRENT STATE               ERROR     PORTS
dljxa28dx9fh   deploy_deamon_visualizer.1   dockersamples/visualizer:latest   manger    Running         Running about an hour ago    

注意:

在 Docker Swarm 模式下,当使用 docker stack deploy 来部署一个应用栈时,不能再使用 docker-compose 命令来管理这些服务。这是因为 docker-compose 主要用于单机部署,而 docker stack 是为了与 Docker Swarm 一起工作而设计的。对于在 Swarm 集群中部署的服务,需要使用 docker service 命令来管理它们。

下面是一些常见的 docker-compose 命令及其在 Docker Swarm 模式下的替代命令:

  1. 查看服务状态(docker-compose ps 替代)

    使用 docker service ls 查看所有服务,或者使用 docker service ps <service_name> 查看特定服务的任务(容器)。

    # 查看所有服务 docker service ls 
    # 查看特定服务的任务状态 例如,对于 "nginx" 服务
    docker service ps deploy_deamon_nginx 
  2. 重启服务(docker-compose restart 替代)

    Docker Swarm 没有直接的重启命令,但你可以通过更新服务来达到类似的效果。更新服务时,可以更改服务的配置或者保持不变,Swarm 都会重新启动服务的任务。

    docker service update --force <service_name>
  3. 查看日志(docker-compose logs 替代)

    使用 docker service logs 查看服务的日志。

    docker service logs <service_name>
  4. 扩展或缩小服务(docker-compose scale 替代)

    使用 docker service scale 调整服务的副本数。

    docker service scale <service_name>=<number_of_replicas>
  5. 停止并移除服务(docker-compose down 替代)

    使用 docker stack rm 停止并移除整个应用栈,或者使用 docker service rm 移除特定服务。

    # 移除整个应用栈 
    docker stack rm deploy_deamon # 移除特定服务 
    docker service rm deploy_deamon_nginx
  6. 更新服务配置(docker-compose up -d 替代)

    当你更改了 docker-compose.yml 文件并希望应用这些变更时,可以重新执行 docker stack deploy

    docker stack deploy -c docker-compose.yml deploy_deamon

参考 :https://www.cnblogs.com/zhujingzhi/p/9792432.html#_label0

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

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

相关文章

支持534种语言,开源大语言模型MaLA-500

无论是开源的LLaMA 2还是闭源的GPT系列模型&#xff0c;功能虽然很强大&#xff0c;但对语言的支持和扩展比较差&#xff0c;例如&#xff0c;二者都是以英语为主的大模型。 为了提升大模型语言的多元化&#xff0c;慕尼黑大学、赫尔辛基大学等研究人员联合开源了&#xff0c;…

香港优才VS高才计划对比哪个好?详解申请条件、优缺点、续签转永居!

香港优才和高才计划对比哪个好&#xff1f;详解申请条件、优缺点、续签转永居&#xff01; 香港优才计划和香港高才通计划&#xff0c;都是热门的香港人才引进项目&#xff0c;在2023年&#xff0c;这两个项目为香港引进了超6万的优秀人才和高端人才&#xff0c;为香港经济发展…

CSRF:跨站请求伪造攻击

目录 什么是CSRF&#xff1f; DVWA中的CSRF low medium hight impossible 防御CSRF 1、验证码 2、referer校验 3、cookie的Samesite属性 4、Anti-CSRF-Token 什么是CSRF&#xff1f; CSRF全称为跨站请求伪造&#xff08;Cross-site request forgery&#xff09;&…

【Linux】静态库和动态库

动静态库 一、静态库1. 静态库概念2. 制作静态库&#xff08;1&#xff09;朴素方法 --- 不打包&#xff08;2&#xff09;对静态库打包 3. 使用静态库&#xff08;1&#xff09;朴素方法 --- 直接使用&#xff08;2&#xff09;使用打包好的静态库 二、动态库1. 动态库概念2. …

傅里叶变换在图像处理中的应用

傅里叶变换在图像处理中有着广泛的应用&#xff0c;因为它能将图像从空间域转换到频率域&#xff0c;使我们能够分析图像中的频率成分。以下是一些傅里叶变换在图像处理中的典型应用&#xff1a; 图像压缩&#xff1a;通过傅里叶变换&#xff0c;我们可以识别并去除图像数据中不…

jenkins 发布远程服务器并部署项目

安装参考另一个文章 配置maven 和 jdk 和 git 注意jdk的安装目录&#xff0c;是jenkins 安装所在服务器的jdk目录 注意maven的目录 是jenkins 安装所在服务器的maven目录 注意git的目录 是jenkins 安装所在服务器的 git 目录 安装 Publish Over SSH 插件 配置远程服务器 创…

不会Git也能玩Github吗?

不会Git也能玩Github吗&#xff1f; 前言使用Github的准备步骤使用一种访问外网资源的方法&#xff08;这一步才是新手最难的一步&#xff09;注册账号 创建一个自己的仓库创建完仓库后的界面 搜索你想要的代码类型以搜索坦克大战为例以下载烟花代码为例 总结 前言 说到Github&…

计算机自顶向下 Wireshark labs——DNS

如本文第2.4节所述&#xff0c;域名系统(DNS)将主机名转换为IP地址&#xff0c;在互联网基础设施中发挥着关键作用。在本实验中&#xff0c;我们将仔细研究DNS的客户端。回想一下&#xff0c;客户端在DNS中的角色相对简单—客户端向其本地DNS服务器发送查询&#xff0c;并收到响…

2023年06月CCF-GESP编程能力等级认证Python编程四级真题解析

Python等级认证GESP(1~6级)全部真题・点这里 一、单选题(共15题,共30分) 第1题 高级语言编写的程序需要经过以下( )操作,可以生成在计算机上运行的可执行代码。 A:编辑 B:保存 C:调试 D:编译 答案:D 第2题 排序算法是稳定的(Stable Sorting),就是指排序算…

Android Jetpack Compose之底部导航栏的实现

目录 1.概述2. 效果展示3. 代码实现3.1 定义底部导航栏的tab项3.2 整体页面架构搭建3.3 底部导航栏的实现3.4 所有代码 4.总结 1.概述 写过一段Android jetpack compose 界面的小伙伴应该都用过Compose的脚手架Scaffold&#xff0c;利用它我们可以很快的实现一个现代APP的主流…

Ubuntu使用Docker部署Nginx并结合内网穿透实现公网远程访问

文章目录 1. 安装Docker2. 使用Docker拉取Nginx镜像3. 创建并启动Nginx容器4. 本地连接测试5. 公网远程访问本地Nginx5.1 内网穿透工具安装5.2 创建远程连接公网地址5.3 使用固定公网地址远程访问 在开发人员的工作中&#xff0c;公网远程访问内网是其必备的技术需求之一。对于…

为什么要进行网站内容监测?内容监测包括哪些方面?(国科云)

随着信息化的普及&#xff0c;网站已经成为企业和组织传递信息、与公众互动的重要平台。网站内容监测对于维护品牌形象&#xff0c;提升用户体验、防止不良信息传播等具有非常重要的作用。本文国科云简单介绍下进行内容监测的必要性以及内容监测包括哪些方面。 为什么要进行网…

基于YOLOv8的足球赛环境下足球目标检测系统(Python源码+Pyqt6界面+数据集)

博主简介 AI小怪兽&#xff0c;YOLO骨灰级玩家&#xff0c;1&#xff09;YOLOv5、v7、v8优化创新&#xff0c;轻松涨点和模型轻量化&#xff1b;2&#xff09;目标检测、语义分割、OCR、分类等技术孵化&#xff0c;赋能智能制造&#xff0c;工业项目落地经验丰富&#xff1b; …

五、医学影像云平台 - 医共体

原创不易&#xff0c;多谢关注&#xff01;谢谢&#xff01; 1. 医学大影像设备市场现状 目前影像设备&#xff0c;可以说低端产品同质化越来越严重&#xff0c;利润越来越薄&#xff0c;而高端超高端设备&#xff0c;整体销售额却在增长&#xff0c;利润空间也比低端的要高的…

Netty入门使用

为什么会有Netty? NIO 的类库和 API 繁杂&#xff0c;使用起来比较麻烦&#xff0c;需要熟练掌握 Selector、ServerSocketChannel、SocketChannel、ByteBuffer 等。开发工作量和难度都非常大&#xff0c;例如客户端面临断线重连、网络闪断、心跳处理、半包读写、网络拥塞和异…

【240121】桂林电子科技大学—调剂信息

桂林电子科技大学 学校层级&#xff1a;双非 调剂专业&#xff1a;081000 信息与通信工程 发布时间&#xff1a;2024.1.21 发布来源&#xff1a;网络发布 背景&#xff1a;欢迎广大08工学专业考生调剂进我的课题组&#xff0c;电子信息专业&#xff0c;也欢迎往届同学调剂…

MongoDB系列:管道操作:聚合阶段操作符(二)

MongoDB系列&#xff1a;管道操作&#xff1a;聚合阶段操作符&#xff08;二&#xff09; 聚合阶段操作符介绍 本节只编写了个人认为可能用到的操作符&#xff0c;详细更多的操作符以及使用注意事项请前往MongoDB官网。 $match 过滤匹配数据。 // 插入数据 db.orders.inse…

从欧盟《网络弹性法案》看供应链安全管理

文章目录 前言一、为何欧盟如此关注供应链安全?二、欧盟《网络弹性法案》立法脉络如何?三、制造商的核心义务包括哪些?(一)网络安全基本要求(二)漏洞管理要求(三)报告义务四、小结前言 当前,全球化、数字化、智能化深入推进,以SolarWinds攻击为代表的供应链安全事件…

SpringMVC-组件解析

一、引子 我们在上一篇文章Spring MVC-基本概念中&#xff0c;为读者解释了如何使用SpringMVC框架&#xff0c;将承接客户端请求的工作从原生的Servlet转移到我们熟知的Controller中。那么我们不禁会好奇&#xff0c;SpringMVC框架到底做了什么&#xff0c;是怎么把请求分发给…

sqlserver alwayson部署文档手册

1、ALWAYSON概述 详细介绍参照官网详细文档,我就不在这里赘述了&#xff1a; https://learn.microsoft.com/zh-cn/sql/database-engine/availability-groups/windows/overview-of-always-on-availability-groups-sql-server?viewsql-server-ver16 下图显示的是一个包含一个…