docker之群(swarm)


官网文档

一、学习前提

参考学习前提,重要的是安装docker machine,参考官网

二、说明

docker之服务 中,我们将应用转换为一个可提供服务的产品。而本部分我们将此应用程序部署到群上,在多台计算机上运行它(一个叫做的"dockerized"簇使该操作成为可能)

三、理解集群

参考 官网
(swarm)是一个运行了docker并加入到簇(cluster)的设备集合。在集群之后,我们任然可以像以前那样执行docker命令,只不过现在命令的执行交个群管理器(swarm manager)来执行。刚才我们提到的设备可以是实际存在的物理机也可以是虚拟机,此时每个设备我们称为节点(node)。

群管理器(swarm manager)使用了一些策略来运行我们的容器。

在我们的(swarm)中,只有群管理器(swarm manager)可以执行我们的docker命令和授权其它设备作为工作设备(worker)。而工作设备(worker)只提供空间(capacity),而不能权限去指挥其它设备能敢什么和不能干什么。

之前我们是在单主机模式(single-host mode)下使用docker的。然而docker也支持群模式( swarm mode)。从让你的机器成为群管理器(swarm manager)时,docker执行命令时,是不仅仅在当前设备上,而是在整个(swarm)上。

四、设置集群

  • 使用以下命令,让你的docker从单主机模式(single-host mode)切换到
    群模式( swarm mode),并让你的设备成为群管理器(swarm manager):
docker swarm init
  • 使用下面命令来指定其它设备作为 工作设备(worker)。
docker swarm join

4.1 创建

注意:为了创建 ,我们需要虚拟机或物理机,这里我们使用虚拟机。因此我们需要可以创建虚拟机(VM)的虚拟机管理程序,参考 官网

  • 创建两个虚拟机(不要用这种方式创):
docker-machine create --driver virtualbox myvm1
docker-machine create --driver virtualbox myvm2

注意:官网是这样创建的,然而后面访问 失败了,于是寻找了很久的解决办法 链接,用这种方法创建myvm1、myvm2

docker-machine create -d hyperv --hyperv-virtual-switch "myswitch" --hyperv-boot2docker-url >"https://github.com/boot2docker/boot2docker/releases/download/v18.06.1-ce/boot2docker.iso" myvm1
  • 列出你的虚拟机并给他们分配ip
root@fengli-cp:/home/fengli/Desktop# docker-machine ls
NAME    ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER     ERRORS
myvm1   -        virtualbox   Running   tcp://192.168.99.100:2376           v18.09.0   
myvm2   -        virtualbox   Running   tcp://192.168.99.101:2376            v18.09.0   

  • 初始化 并添加节点,可以使用命令 docker-machine ssh 向虚拟机发出命令。如:
docker-machine ssh myvm1 "docker swarm init --advertise-addr 192.168.99.100"

以上命令是用来指定myvm1成为一个群管理器。而下面命令是为了向虚拟机发出命令,并让其成为一个工作设备:

docker-machine ssh myvm2 "  docker swarm join --token SWMTKN-1-2uyacwisnpbkwa0sixz9oyvhs5z65v409j1mizgc4x5utddg4m-8npl2mr9u3jki050s8gm0hzpx 192.168.99.100:2377"
  • 群管理器上使用以下命令来显示上面的节点
docker-machine ssh myvm1 "docker node ls"

结果:

czxydhsmy122kekewo7zt22sb *   myvm1               Ready               Active              Leader              18.09.0
bw5bfheoh5vnfnyicwy887gyt     myvm2               Ready               Active                                  18.09.0

此时,我们就创建了一个了。


五、在集群上部署应用程序

现在我们就可以用在docker之服务 的命令来将我们的应用部署到 集群上面了。

5.1 为 群管理器 配置一个脚本

之前我们都是使用docker-machine ssh来和虚拟机进行通讯的。现在,我们使用另外一种方法 docker-machine env <machine>,这个方法的好处是允许你使用本地的docker-compose.yml来部署远程的应用。
对于不同操作系统,有不同的不在,具体参考 官网,我这里使用的是linux平台。

  • 使用命令 docker-machine env myvm1获取配置于myvm1通讯的shell 命令。
  • 运行获取到的命令eval $(docker-machine env myvm1)来配置于myvm1通讯的shell。
  • 使用命令docker-machine ls来验证当前myvm1已经激活(如星号所示)。
    在这里插入图片描述

5.2 部署应用程序到 群管理器

  • 现在,使用以下命令部署应用到myvm1上,注意你所在的当前目录要有docker-compose.yml:
docker stack deploy -c docker-compose.yml getstartedlab
  • 下面命令列出我们服务的任务,之一现在我们的服务被分布到myvm1和myvm2上了
docker stack ps getstartedlab

在这里插入图片描述

5.3 访问我们的

访问任意一个ip都行。

  • 可以同在浏览器上访问(我的ip为什么和上面不一样,是因为我在ubuntu上也做过,在window也做过,这里方法的是win10版本的)
    在这里插入图片描述
  • 通过 curl http://172.29.214.49
    在这里插入图片描述

六、迭代扩展应用程序

通过更改docker-compose.yml文件来扩展应用程序。
通过编辑代码更改应用程序行为,然后重建并推送新 镜像

七、清理和重启

  • 清理堆
docker stack rm getstartedlab
  • 重启机器
docker-machine start <machine-name>

八、参考文献

官网文档
虚拟机安装bug解决方法参考

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值