Docker 入门 (四 Swarms 集群)

本文详细介绍了如何使用Docker Swarm搭建集群,包括安装Docker Machine、VirtualBox,创建虚拟机,初始化Swarm Manager及添加Worker节点。并通过示例展示了如何在Swarm集群中部署应用。

上一篇: Docker 入门(三:Service 服务)

介绍

Docker 入门(三:Service 服务) 中你会利用到在Docker学习 二 构建Docker容器并上传 构建的镜像,并且将它转变为服务,扩大它的进程数量。

在这一章中,你会将这个APP部署集群,在多台机器上运行它。swarm能够做到这些.

理解Swarm clusters

Swarm是多台运行Docker的机器的集群。当你部署好后,你可以像之前一样执行Docker命令,但是它们运行在一个集群上通过swarm manager进行管理。在swarm中的机器可以是物理的或者虚拟机。当这些机器被假如swarm,它们被成为nodes。

Swarm Managers 能够使用多种策略来执行容器,例如“emptiest node”模式 – 尽量在更少的机器上使用容器.或者“global”模式 – 每个机器在特定的容器至少有一个实例。你可以在compose文件中指明具体使用那种策略。

你只可以在swarm manager这台机器上执行你的代码,或者添加其他的机器到Swarm作为Workers。 Workers只是负责提供容量,而没有权限做其他的事。

到目前为止,你已经使用Docker你的本地计算机执行单机模式。但是Docker 同样能够被切换到swarm(集群)模式。启用swarm模式是的当前机器作为swarm manager(集群管理器)。 至此,Docker会在你所管理的集群上面执行命令,而不是当前主机。

建立你的集群

一个集群由多个节点组成,这些节点可以是虚拟机或者物理机。最基本的概念非常简单:执行 docker swarm init 来使你的当前机器作为集群管理机,然后执行 docker swarm join 将其他的机器添加为集群的Workers。

1.安装Docker-machine
2.安装Virtual Box

3.利用VirtualBox Driver 安装 Docker Machine到虚拟机。
***如果不设置–virtualbox-boot2docker-url 会导致app部署好后无法访问。boot2docker v18.09.2有bug,所以我这里找到老版本的boot2docker ***

docker-machine create --driver virtualbox --virtualbox-boot2docker-url "https://github.com/boot2docker/boot2docker/releases/download/v18.06.1-ce/boot2docker.iso" myvm1
docker-machine create --driver virtualbox --virtualbox-boot2docker-url "https://github.com/boot2docker/boot2docker/releases/download/v18.06.1-ce/boot2docker.iso" myvm2

4.验证是否成功:

[hb@hb-desktop Bird2]$ docker-machine ls
NAME    ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER     ERRORS
myvm1   -        virtualbox   Running   tcp://192.168.99.100:2376           v18.09.2   
myvm2   -        virtualbox   Running   tcp://192.168.99.101:2376           v18.09.2   

5.初始化集群并添加节点
第一台机器作为管理员,它负责执行管理命令和添加Workers到集群中,第二台机器作为Worker。
我们可以发送命令给你的第一台虚拟机进行连接 docker-machine ssh. 利用 docker swarm init 命令使它成为管理员。
登陆虚拟机:
我一直很好奇docker engine的底层是什么?进去一看原来还是linux。

[hb@hb-desktop Bird2]$ docker-machine ssh myvm1
   ( '>')
  /) TC (\   Core is distributed with ABSOLUTELY NO WARRANTY.
 (/-_--_-\)           www.tinycorelinux.net

初始化myvm1为Swarm Manager:

[hb@hb-desktop Bird2]$ docker-machine ssh myvm1 "docker swarm init --advertise-addr 192.168.99.100"
Swarm initialized: current node (5ym4ku4ivabckwwk3c4hy4rth) is now a manager.

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

    docker swarm join --token SWMTKN-1-4advaoijhew68d1gegjv7imeuofszckjko8rjv0zeuppus7c34-aj1zu1immyzbozija8octunzh 192.168.99.100:2377

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

** 添加Worker到集群:**

docker-machine ssh myvm2 " docker swarm join --token SWMTKN-1-4advaoijhew68d1gegjv7imeuofszckjko8rjv0zeuppus7c34-aj1zu1immyzbozija8octunzh 192.168.99.100:2377"

** 查看集群状态:**

[hb@hb-desktop ~]$ docker-machine ssh myvm1 "docker node ls"
ID                            HOSTNAME            STATUS              AVAILABILITY        MANAGER STATUS      ENGINE VERSION
5ym4ku4ivabckwwk3c4hy4rth *   myvm1               Ready               Active              Leader              18.09.2
d9enq1m223sp8t922bnm6zi6e     myvm2               Ready               Active                                  18.09.2

部署你的app到集群

艰难的部分结束了。 现在,您只需重复第3部分 Docker 入门(三:Service 服务) 中使用的过程即可部署到新的swarm上。 请记住,只有像myvm1这样的群体管理器才能执行Docker命令; 工人只是为了能力。

docker-machine shell配置为swarm管理器

到目前为止,您一直在Docker-machine ssh中包装Docker命令以与VM通信。 另一种选择是运行docker-machine env 来获取并运行一个命令,该命令将当前shell配置为与VM上的Docker守护进程通信。 此方法适用于下一步,因为它允许您使用本地docker-compose.yml文件“远程”部署应用程序,而无需将其复制到任何位置。

键入docker-machine env myvm1,然后复制粘贴并运行作为输出的最后一行提供的命令,将shell配置为与myvm1(swarm管理器)通信。

配置shell的命令因Mac,Linux或Windows而异,因此每个示例都显示在下面的选项卡上。

配置Mac或Linux上的Docker机器shell环境

配置你的shell和myvm1通信:

[hb@hb-desktop ~]$ docker-machine env myvm1
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.99.100:2376"
export DOCKER_CERT_PATH="/home/hb/.docker/machine/machines/myvm1"
export DOCKER_MACHINE_NAME="myvm1"
# Run this command to configure your shell: 
# eval $(docker-machine env myvm1)
[hb@hb-desktop ~]$ eval $(docker-machine env myvm1)

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

[hb@hb-desktop ~]$ docker-machine ls
NAME    ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER     ERRORS
myvm1   *        virtualbox   Running   tcp://192.168.99.100:2376           v18.09.2   
myvm2   -        virtualbox   Running   tcp://192.168.99.101:2376           v18.09.2   

部署APP到集群管理器

现在您已经拥有了myvm1,您可以使用其作为群集管理器的功能,通过使用您在第3部分Docker 入门(三:Service 服务) 中使用的相同docker stack deploy命令到myvm1以及您的本地副本docker-compose.yml来部署您的应用程序。此命令可能 需要几秒钟才能完成,部署需要一些时间才能完成。 在群集管理器上使用docker service ps <service_name>命令验证是否已重新部署所有服务。

您通过docker-machine shell配置连接到myvm1,您仍然可以访问本地主机上的文件。 确保您与以前位于同一目录中,其中包括您在第3部分Docker 入门(三:Service 服务) 中创建的docker-compose.yml文件。

与以前一样,运行以下命令在myvm1上部署应用程序:

   [hb@hb-desktop Bird2]$ docker stack deploy -c docker-compose.yml getstartedlab
Creating network getstartedlab_webnet
Creating service getstartedlab_web

与第三部分一场查看Task:

[hb@hb-desktop Bird2]$ docker stack ps getstartedlab
ID                  NAME                  IMAGE                      NODE                DESIRED STATE       CURRENT STATE             ERROR               PORTS
7jbqbpqzdx9z        getstartedlab_web.1   hebiao/get-started:part1   myvm2               Running             Preparing 6 minutes ago                       
x2yf64j1zpeg        getstartedlab_web.2   hebiao/get-started:part1   myvm1               Running             Preparing 6 minutes ago                       
73oaak3ennuz        getstartedlab_web.3   hebiao/get-started:part1   myvm2               Running             Preparing 6 minutes ago                       
hytu05233k50        getstartedlab_web.4   hebiao/get-started:part1   myvm2               Running             Preparing 6 minutes ago                       
zfq4iiaqpx1c        getstartedlab_web.5   hebiao/get-started:part1   myvm1               Running             Preparing 6 minutes ago        

访问你集群中的APP

使用集群中任意一台机器的ip访问:

[hb@hb-desktop Bird2]$ curl 192.168.99.100:4000
curl: (7) Failed connect to 192.168.99.100:4000; Connection refused

出现问题:
按照 这篇帖子 可以解决该问题。
在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值