介绍
在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
出现问题:
按照 这篇帖子 可以解决该问题。

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

被折叠的 条评论
为什么被折叠?



