Docker 入门 -- Swarm

Docker 入门 – Swarm

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

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

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

到目前为止,您已经在本地机器上以单主机模式使用Docker。但是Docker也可以切换到swarm模式。立即启用swarm模式使当前的机器成为swarm管理器。从此,Docker将运行您在您管理的群集上执行的命令,而不仅仅是在当前机器上执行。

一个swarm由多个节点组成,可以是物理机器或虚拟机器。 基本的概念很简单:运行docker swarm init来启用swarm模式,并让你的当前机器成为swarm manager,然后在其他机器上运行docker swarm join使它们作为工作者加入swarm。

创建集群

创建虚拟机

此处,通过docker-machine创建虚拟机,docker-machine需要另行安装,安装地址见docker-machine安装地址

通过virtualbox创建两个虚拟机myvm1和myvm2

此处注意,如果linux是安装在虚拟机(需要是vmware,virtualbox不支持双重虚拟机)上的话,需要勾选“虚拟化Intel VT-x/EPT 或AMD-V/RVI(V)”(虚拟机设置>处理器>虚拟化引擎)

$ docker-machine create --driver virtualbox myvm1
$ docker-machine create --driver virtualbox myvm1
$ docker-machine ls
NAME    ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER        ERRORS
myvm1   -        virtualbox   Running   tcp://192.168.99.100:2376           v18.05.0-ce   
myvm2   -        virtualbox   Running   tcp://192.168.99.101:2376           v18.05.0-ce  

初始化swarm manager 和 nodes

首先,在myvm1中初始化swarm,通过ssh发送指令到myvm1中

$ docker-machine ssh myvm1 "docker swarm init --advertise-addr 192.168.99.100"
Swarm initialized: current node <node ID> is now a manager.

To add a worker to this swarm, run the following command:

  docker swarm join \
  --token <token> \
  <myvm ip>:<port>

To add a manager to this swarm, run 'docker swarm join-token manager' and follow the instructions.

然后,获取添加worker的token

$ docker-machine ssh myvm1 "docker swarm join-token manager"
To add a worker to this swarm, run the following command:

    docker swarm join --token SWMTKN-1-4v99cxtky5e50qbhvzk49iv5klno4nkzp1uj0suu8rqr8q8lv9-99kxs942b57l2vycj0fo0l0ui 192.168.99.100:2377

最后添加,myvm2作为worker

$ docker-machine ssh myvm2 "docker swarm join --token SWMTKN-1-4v99cxtky5e50qbhvzk49iv5klno4nkzp1uj0suu8rqr8q8lv9-99kxs942b57l2vycj0fo0l0ui 192.168.99.100:2377"

查看节点

$ docker-machine ssh myvm1 "docker node ls"
ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
u3x0kow1bdhqbt4286dp8nec5 *   myvm1               Ready               Active              Leader              18.05.0-ce
crvietan6kfmeb23yqpkltue6     myvm2               Ready               Active                                  18.05.0-ce

在集群上部署应用程序

因为myvm1是manager,所以只有myvm1才有执行Dcoker 命令的权利,也就是说部署应用应该在myvm1上面,myvm2作为一个worker,其实就是一个扩展容量、提供资源的角色。要在myvm1上执行部署命令,可以像上面一样通过ssh发送命令到myvm1,但是每次都这样还是很麻烦的。因此采用另外一种方式,将当前shell配置成与myvm1上的docker deamon直接通信,这样就相当于切换到了myvm1,直接执行docker命令就可以,如下所示:

$ eval $(docker-machine env myvm1)
$ docker stack deploy -c docker-compose.yml hellolfg
Creating network hellolfg_webnet
Creating service hellolfg_web
$ docker service ps hellolfg_web
ID                  NAME                IMAGE                             NODE                DESIRED STATE       CURRENT STATE                ERROR               PORTS
jlg0nranfgov        hellolfg_web.1      yangguangqishimi/testdemo:1.0.1   myvm1               Running             Running about a minute ago                       
ehia6z3syect        hellolfg_web.2      yangguangqishimi/testdemo:1.0.1   myvm2               Running             Running about a minute ago                       
6nmn2yzusul0        hellolfg_web.3      yangguangqishimi/testdemo:1.0.1   myvm1               Running             Running about a minute ago                       
m112x94dpj2d        hellolfg_web.4      yangguangqishimi/testdemo:1.0.1   myvm1               Running             Running about a minute ago                       
oh2u03bg84cf        hellolfg_web.5      yangguangqishimi/testdemo:1.0.1   myvm2               Running             Running about a minute ago 

这样就部署好了,5个任务随机分配在两个node上面,有web请求时,swarm load balancer会随机分配到两个节点,实现了负载均衡。

请记住,要使用群集中的入口网络,在启用群集模式之前,需要在群集节点之间打开以下端口:用于容器网络发现的端口7946 TCP/UDP,端口4789 UDP,用于容器入口网络。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值