了解Swarm集群

群集是一组运行Docker并加入群集的计算机。在此之后,继续运行使用的Docker命令,但现在它们由群集管理器在群集上执行。群中的机器可以是物理的或虚拟的。加入群组后,它们被称为节点。

Swarm管理器可以使用多种策略来运行容器,例如“最节点的节点” - 它使用容器填充利用率最低的机器。或“全局”,它确保每台机器只获得指定容器的一个实例。指示swarm管理器在Compose文件中使用这些策略,就像您已经使用的那样。

群集管理器是群中唯一可以执行命令的机器,或授权其他机器作为工作者加入群集。工人只是在那里提供能力,并且没有权力告诉任何其他机器它能做什么和不能做什么。

到目前为止,您一直在本地计算机上以单主机模式使用Docker。但是Docker也可以切换到swarm模式,这就是使用群集的能力。立即启用群集模式使当前计算机成为群集管理器。从那时起,Docker就会运行您在管理的swarm上执行的命令,而不仅仅是在当前机器上。

添加 :

创建群

在此过程结束时,所有三个Docker主机将连接到群集,并将使用名为的覆盖网络连接在一起ingress

  1. master。初始化群。如果主机只有一个网络接口,则该--advertise-addr标志是可选的。

    $ docker swarm init --advertise-addr=<IP-ADDRESS-OF-MANAGER>  //网卡地址

    记下打印的文本,因为它包含您将用于加入worker-1和使用worker-2swarm 的标记。将令牌存储在密码管理器中是个好主意。

  2. worker-1,加入群。如果主机只有一个网络接口,则该--advertise-addr标志是可选的。

    $ docker swarm --join --token <TOKEN> \
    --advertise-addr <IP-ADDRESS-OF-WORKER-1> \ //节点1网卡地址
    <IP-ADDRESS-OF-MANAGER>:2377 //master网卡地址
  3. worker-2,加入群。如果主机只有一个网络接口,则该--advertise-addr标志是可选的。

    $ docker swarm --join --token <TOKEN> \
    --advertise-addr <IP-ADDRESS-OF-WORKER-2> \ //节点2网卡地址
    <IP-ADDRESS-OF-MANAGER>:2377
  4. manager,列出所有的节点。此命令只能从经理完成。

    $ docker node ls
    
    ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS
    d68ace5iraw6whp7llvgjpu48 * ip-172-31-34-146 Ready Active Leader
    nvp5rwavvb8lhdggo8fcf7plg ip-172-31-35-151 Ready Active
    ouvx2l7qfcxisoyms8mtkgahw ip-172-31-36-89 Ready Active

    您还可以使用该--filter标志按角色进行过滤:

    $ docker node ls --filter role=manager
    
    ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS
    d68ace5iraw6whp7llvgjpu48 * ip-172-31-34-146 Ready Active Leader $ docker node ls --filter role=worker ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
    nvp5rwavvb8lhdggo8fcf7plg ip-172-31-35-151 Ready Active
    ouvx2l7qfcxisoyms8mtkgahw ip-172-31-36-89 Ready Active
  5. node1和node2列出Docker网络manager,并注意到它们现在都有一个名为的覆盖网络和一个名为的网桥。此处仅显示列表:worker-1worker-2ingressdocker_gwbridgemanager

    $ docker network ls
    
    NETWORK ID          NAME                DRIVER              SCOPE
    495c570066be bridge bridge local
    961c6cae9945 docker_gwbridge bridge local
    ff35ceda3643 host host local
    trtnl4tqnc3n ingress overlay swarm
    c8357deec9cb none null local

设置群

群由多个节点组成,可以是物理或虚拟机。基本概念很简单:

docker swarm init  以启用swarm模式并使当前计算机成为群集管理器

docker swarm join  在其他计算机上运行 以使它们作为工作者加入群组

1 .使用VM快速创建一个双机群集并将其转换为群集

您需要一个可以创建虚拟机(VM)的虚拟机管理程序,因此计算机操作系统安装Oracle VirtualBox

现在,docker-machine使用VirtualBox驱动程序创建几个VM :

docker-machine create --driver virtualbox myvm1
docker-machine create --driver virtualbox myvm2



列出虚拟机并获取其IP地址

docker-machine ls

NAME   ACTIVE  DRIVER   STATE     URL          SWARM   DOCKER   ERRORS
default    -       virtualbox    Running   tcp://192.168.99.100:2376        v18.05.0-ce
myvm1    -      virtualbox   Running    tcp://192.168.99.101:2376        v18.05.0-ce
myvm2    -      virtualbox   Running    tcp://192.168.99.102:2376       v18.05.0-ce

补充:

docker-machine rm myvm1 --force  //强制删除节点

2. 初始化SWARM并添加节点

第一台机器充当管理器,执行管理命令并验证工作人员加入群,第二台是工作人员。

可以使用命令向VM发送命令docker-machine ssh。指示myvm1 成为一个swarm管理器docker swarm init并查找如下输出:

PS C:\Program Files\Docker Toolbox> docker-machine ssh myvm1 "docker swarm init --advertise-addr 192.168.99.103"

docker swarm join --token SWMTKN-1-1571g8tuo3h2cy8jz5h0ya1hc5okd1nlr9b8ksi61ctul1ykxz-4nlejv9ttye9lklx89a8b6clu 192.168.99.103:2377

myvm2 将新群组作为工作者加入:

PS C:\Program Files\Docker Toolbox> docker-machine ssh myvm2 "docker swarm join --token SWMTKN-1-1571g8tuo3h2cy8jz5h0ya1hc5okd1nlr9b8ksi61ctul1ykxz-4nlejv9ttye9lklx89a8b6clu 192.168.99.103:2377"

补充:

PS C:\Program Files\Docker Toolbox> docker swarm leave --force //强制推出群

注意:

端口2377和2376

始终运行docker swarm initdocker swarm join使用端口2377(群集管理端口),或根本没有端口,并使其采用默认值。

docker-machine ls包含端口2376 返回的计算机IP地址,即Docker守护程序端口。请勿使用此端口,否则 可能会遇到错误

使用SSH时遇到问题?试试--native-ssh标志

Docker Machine 可以使用自己系统的SSH,如果由于某种原因在向Swarm管理器发送命令时遇到问题。只需--native-ssh在调用ssh命令时指定 标志:

docker-machine --native-ssh ssh myvm1 ...

docker node ls在管理器上运行以查看此群中的节点:

PS C:\Program Files\Docker Toolbox> docker-machine ssh myvm1 "docker node ls"
ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
brtu9urxwfd5j0zrmkubhpkbd myvm2 Ready Active
rihwohkh3ph38fhillhhb84sk * myvm1 Ready Active Leader

如果要重新开始,可以docker swarm leave 从每个节点运行

3.在群集群集上部署应用程序

docker-machine为swarm管理器配置shell

windos10的SHELL环境:

PS C:\Program Files\Docker Toolbox> docker-machine env myvm1
$Env:DOCKER_TLS_VERIFY = "1"
$Env:DOCKER_HOST = "tcp://192.168.99.101:2376"
$Env:DOCKER_CERT_PATH = "C:\Users\Administrator\.docker\machine\machines\myvm1"
$Env:DOCKER_MACHINE_NAME = "myvm1"
$Env:COMPOSE_CONVERT_WINDOWS_PATHS = "true"
# Run this command to configure your shell:
# & "C:\Program Files\Docker Toolbox\docker-machine.exe" env myvm1 | Invoke-Expression

运行给定命令以配置要与之通信的shell myvm1:
PS C:\Program Files\Docker Toolbox> docker-machine.exe  env myvm1 | Invoke-Expression

MAC或LINUX上的DOCKER机器SHELL环境

运行docker-machine env myvm1以获取命令以配置要与之通信的shell myvm1

$ docker-machine env myvm1
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.99.100:2376"
export
DOCKER_CERT_PATH="/Users/sam/.docker/machine/machines/myvm1"
export
DOCKER_MACHINE_NAME="myvm1"
# Run this command to configure your
shell:
#
eval $(docker-machine env myvm1)

运行给定命令以配置要与之通信的shell myvm1

eval $(docker-machine env myvm1)

运行docker-machine ls以验证它myvm1现在是活动计算机,如旁边的星号所示。

$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
myvm1 * virtualbox Running tcp://192.168.99.100:2376 v17.06.2-ce
myvm2 - virtualbox Running tcp://192.168.99.101:2376 v17.06.2-ce

4. 在群集管理器上部署应用程序

运行以下命令以部署应用程序myvm1

docker stack deploy -c docker-compose.yml getstartedlab

注意:如果的映像存储在私有注册表而不是Docker Hub上,则需要使用登录docker login <your-registry>,然后需要将--with-registry-auth标志添加到上述命令中。例如:

docker login registry.example.com

docker stack deploy --with-registry-auth -c docker-compose.yml getstartedlab

这会使用加密的WAL日志将登录令牌从本地客户端传递到部署服务的swarm节点。有了这些信息,节点就可以登录注册表并提取图像。

$ docker stack ps getstartedlab

ID            NAME                  IMAGE                   NODE   DESIRED STATE
jq2g3qp8nzwx getstartedlab_web.1 gordon/get-started:part2 myvm1 Running
88wgshobzoxl getstartedlab_web.2 gordon/get-started:part2 myvm2 Running
vbb1qbkb0o2z getstartedlab_web.3 gordon/get-started:part2 myvm2 Running
ghii74p9budx getstartedlab_web.4 gordon/get-started:part2 myvm1 Running
0prmarhavs87 getstartedlab_web.5 gordon/get-started:part2 myvm2 Running

访问群集

你可以从IP地址来访问你的应用程序要么 myvm1myvm2

您创建的网络在它们之间共享并进行负载平衡。运行 docker-machine ls以获取VM的IP地址,并在浏览器上访问其中任何一个,点击刷新(或只是curl它们)。

有五种可能的容器ID都是随机循环的,这表明了负载平衡。

两个IP地址工作的原因是群中的节点参与入口路由网格。这可确保部署在swarm中某个端口的服务始终将该端口保留给自身,无论实际运行容器的是哪个节点。下面是一个图表,说明在三节点群上的my-web端口8080上发布的服务的路由网格如何显示:

请记住,要在群集中使用入口网络,需要在启用群集模式之前在群集节点之间打开以下端口:

  • 端口7946 TCP / UDP用于容器网络发现。
  • 端口4789 UDP用于容器入口网络。

迭代和扩展您的应用程序

通过更改docker-compose.yml文件来扩展应用程序。

通过编辑代码更改应用程序行为,然后重建并推送新图像。

在任何一种情况下,只需docker stack deploy再次运行即可部署这些更改。

可以使用docker swarm join您使用的相同命令将任何机器(物理或虚拟)加入此群myvm2,并将容量添加到群集中。只需在docker stack deploy之后运行,应用就可以利用新资源。

清理并重新启动

堆栈和群

你可以拆掉堆栈docker stack rm。例如:

docker stack rm getstartedlab

取消设置docker-machine shell变量设置

您可以docker-machine使用给定命令在当前shell中取消设置环境变量。

Linux上,命令是:

  eval $(docker-machine env -u)

在Windows上,命令是:

  PS C:\Program Files\Docker Toolbox> docker-machine.exe env -u | Invoke-Expression

重启Docker机器

如果关闭本地主机,Docker计算机将停止运行。

$ docker-machine ls
NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS
myvm1 - virtualbox Stopped Unknown
myvm2 - virtualbox Stopped Unknown

要重新启动已停止的计算机,请运行:

docker-machine start <machine-name>
 

docker练习-群的更多相关文章

  1. [经验交流] Apache Mesos Docker集群初探

    前言 因工作需要,我对基于Apache Mesos 的 Docker 集群作了一点研究,并搭建了一套环境,以下是资料分享. 1. Apache Mesos概述 Apache Mesos是一款开源群集管 ...

  2. Docker系列之(二):使用Mesos管理Docker集群(Mesos + Marathon + Chronos + Docker)

    1. Mesos简介 1.1 Mesos Apache Mesos 是一个分布式系统的管理软件,对集群的资源进行分配和管理. Mesos主要由以下几部分组成: Master: 管理各Slave节点 S ...

  3. 使用Docker构建持续集成与自动部署的Docker集群

    为什么使用Docker " 从我个人使用的角度讲的话  部署来的更方便 只要构建过一次环境 推送到镜像仓库 迁移起来也是分分钟的事情 虚拟化让集群的管理和控制部署都更方便 hub.docke ...

  4. Docker集群实验环境布署--swarm【1 架构说明】

    在读完<Docker技术入门与实践>这本书后,基本上已对Docker了有一些入门的理解,以及我们为什么要使用Docker 答:我们发现在实际工作中,通过openstack一旦把一个VM创建 ...

  5. Docker 集群环境实现方式

    Docker 集群环境实现的新方式 近几年来,Docker 作为一个开源的应用容器引擎,深受广大开发者的欢迎.随着 Docker 生态圈的不断建设,应用领域越来越广.云计算,大数据,移动技术的快速发展 ...

  6. Docker 集群环境实现的新方式

    近几年来,Docker 作为一个开源的应用容器引擎,深受广大开发者的欢迎.随着 Docker 生态圈的不断建设,应用领域越来越广.云计算,大数据,移动技术的快速发展,加之企业业务需求的不断变化,紧随技 ...

  7. Docker 集群

    1.  理解swarm swarm(译:集群) 一个swarm是一组运行着Docker的机器,它们一起加入到一个集群.swarm中的机器既可以是物理机,也可以是虚拟机.在加入到一个swarm后,每台机 ...

  8. Docker Swarm搭建多服务器下Docker集群

    对于有多台服务器来讲,如果每一台都去手动操控,那将会是一件非常浪费时间的事情,毕竟时间这东西,于我们而言,十分宝贵,或许在开始搭建环境的时候耗费点时间,感觉是正常的,我也如此,花费大堆时间在采坑和填坑 ...

  9. 05 Docker集群/基础设施 - DevOps之路

    05 Docker集群/基础设施 - DevOps之路 文章Github地址,欢迎start:https://github.com/li-keli/DevOps-WiKi Docker的集群目前主流的 ...

  10. k8s docker集群搭建

    一.Kubernetes系列之介绍篇   •Kubernetes介绍 1.背景介绍 云计算飞速发展 - IaaS - PaaS - SaaS Docker技术突飞猛进 - 一次构建,到处运行 - 容器 ...

随机推荐

  1. js判断浏览设备是 手机端,电脑端还是平板端

    console.log(navigator.userAgent); var os = function() { var ua = navigator.userAgent, isWindowsPhone ...

  2. Laravel 之搜索引擎elasticsearch扩展Scout

    简介 Laravel Scout 是针对Eloquent 模型开发的一个简单的,基于驱动的全文检索系统.Scout 使用模型观察者时会自动保持你的检索索引与你的 Eloquent 记录同步. 目前,S ...

  3. [转][ASP.NET Core 3框架揭秘] 跨平台开发体验: Windows [下篇]

    由于ASP.NET Core框架在本质上就是由服务器和中间件构建的消息处理管道,所以在它上面构建的应用开发框架都是建立在某种类型的中间件上,整个ASP.NET Core MVC开发框架就是建立在用来实 ...

  4. Java 对象序列化机制详解

    对象序列化的目标:将对象保存到磁盘中,或允许在网络中直接传输对象. 对象序列化机制允许把内存中的Java对象转换成平台无关的二进制流,从而允许把这种二进制流持久的保存在磁盘上,通过网络将这种二进制流传 ...

  5. python 动态生成变量名以及动态获取变量的变量名

    前言需求: 必须现在需要动态创建16个list,每个list的名字不一样,但是是有规律可循,比如第一个list的名字叫: arriage_list_0=[],第二个叫arriage_list_1=[] ...

  6. -Bash: Unzip: Command Not Found解决方法 安装unzip

    利用unzip命令解压缩的时候,出现-bash: unzip: command not found的错误. unzip——命令没有找到,其原因肯定是没有安装unzip.利用一句命令就可以解决了. 命令 ...

  7. 手机web页面调用手机QQ实现在线聊天的效果

    html代码如下: <a href="javascript:;" onclick="chatQQ()">QQ咨询</a> js代码如下: ...

  8. [转]【转】大型高性能ASP.NET系统架构设计

    大型高性能ASP.NET系统架构设计 大型动态应用系统平台主要是针对于大流量.高并发网站建立的底层系统架构.大型网站的运行需要一个可靠.安全.可扩展.易维护的应用系统平台做为支撑,以保证网站应用的平稳 ...

  9. vue-learning:5-template-v-for

    5 列表渲染的指令v-for v-for on Array / Object / String / Number v-for on template v-for on expression v-for ...

  10. Recall(召回率);Precision(准确率);F1-Meature(综合评价指标);true positives;false positives;false negatives..

    转自:http://blog.csdn.net/t710smgtwoshima/article/details/8215037   Recall(召回率);Precision(准确率);F1-Meat ...