Docker Swarm安装(以ubuntu为例)

Swarm介绍


Swarm是Docker公司在2014年12月初发布的一套较为简单的工具,用来管理Docker集群,它将一群Docker宿主机变成一个单一的,虚拟的主机。Swarm使用标准的Docker API接口作为其前端访问入口,换言之,各种形式的Docker Client(docker client in Go, docker_py, docker等)均可以直接与Swarm通信。Swarm几乎全部用Go语言来完成开发,上周五,4月17号,Swarm0.2发布,相比0.1版本,0.2版本增加了一个新的策略来调度集群中的容器,使得在可用的节点上传播它们,以及支持更多的Docker命令以及集群驱动。

Swarm deamon只是一个调度器(Scheduler)加路由器(router),Swarm自己不运行容器,它只是接受docker客户端发送过来的请求,调度适合的节点来运行容器,这意味着,即使Swarm由于某些原因挂掉了,集群中的节点也会照常运行,当Swarm重新恢复运行之后,它会收集重建集群信息。下面是Swarm的结构图:

这里写图片描述

这里写图片描述

如何使用Swarm


有3台机器:
sclu083:10.13.181.83
sclu084:10.13.181.84
atsg124:10.32.105.124
利用这三台机器创建一个Docker集群,其中sclu083同时充当swarm manager管理集群。

Swarm安装

最简单的安装Swarm的方式就是用Docker官方提供的Swarm镜像:

$ sudo docker pull swarm

Docker集群管理需要服务发现(Discovery service backend)功能。Swarm支持以下几种discovery service backend:Docker Hub上面内置的服务发现功能,本地的静态文件描述集群(static file describing the cluster),etcd(顺带说一句,etcd这玩意貌似很火很有前途,有时间研究下),consul,zookeeper和一些静态的ip列表(a static list of ips)。本文会详细介绍前面两种方法backend的使用。

在使用Swarm进行集群管理之前,需要先把准备加入集群的所有的节点的docker deamon的监听端口修改为0.0.0.0:2375,可以直接使用 sudo docker –H tcp://0.0.0.0:2375 &命令,也可以在配置文件中修改

$ sudo vim /etc/default/docker

在文件的最后面添加下面这句

D0OCKER_OPTS="-H 0.0.0.0:2375 –H unix:///var/run/docker.sock"

这里写图片描述

注意:一定是要在所有的节点上进行修改,修改之后要重启docker deamon

$ sudo service docker restart
第一种方法:使用Docker Hub上面内置的服务发现功能

第一步
在任何一个节点上面执行swarm create命令来创建一个集群标志。这条命令执行完毕之后,swarm会前往Docker Hub上内建的发现服务中获取一个全球唯一的token,用以唯一的标识swarm管理的Docker集群。

$ sudo docker run --rm swarm create

我们在sclu084 这台机器上执行上面的命令

这里写图片描述

返回的token是d947b55aa8fb9198b5d13ad81f61ac4d,这个token一定要记住,因为接下来的操作都会用到这一个token。

第二步
在所有的要加入集群的机器上面执行swarm join命令,把机器加入集群。

本次试验就是要在所有的三台机器上执行命令。

$ sudo docker run -d swarm join –addr=ip_address:2375 token://d947b55aa8fb9198b5d13ad81f61ac4d

注意:

必需要以daemon的形式运行,否则termnal退出后节点不在受管理
ip_address:指的是被管理节点的IP或Name,如本例子中可以是84或124
token:指的是管理节点的token值,如本例中为83的token值

第三步
启动swarm manager。

因为我们要让sclu083充当Swarm管理节点,所以我们要在这台机器上面执行swarm manage命令

$ sudo docker run –d –p 2376:2375 swarm manage token:// d947b55aa8fb9198b5d13ad81f61ac4d

重点内容需要注意的是:在这条命令中,第一:要以daemon的形式运行swarm;第二:端口映射:2376可以更换成任何一个本机没有占用的端口,一定不能是2375,否则就会出问题。

执行结果如下如所示:

这里写图片描述

执行完这个命令之后,整个集群已经启动起来了。

现在可以在任何一个节点上查看集群上的所有节点了。

这里写图片描述

之后可以在任何一台安装了docker的机器上面通过命令(命令中要指明swarm maneger 机器的IP地址和端口)在这个集群上面运行Dcoker容器操作。

现在在10.13.181.85这台机器上面查看集群的节点的信息。info命令可以换成任何一个Swarm支持的docker命令,这些命令可以查看官方文档

$ sudo docker –H 10.13.181.83:2376 info

这里写图片描述

由上图的结果,我们可以发现一个问题:明明这个小集群中是有3个节点的,但是info命令只显示了2个节点。还缺少节点10.32.105.124。为什么会出现这个情况呢?

因为10.32.105.124这台机器没有设置上面的docker daemon监听0.0.0.0:2375这个端口,所以Swarm没办法吧这个节点加入集群中来。

在使用Docker Hub内置的发现服务时,会出现一个问题,就是使用swarm create时会出现

time="2015-04-21T08:56:25Z" level=fatal msg="Get https://discovery-stage.hub.docker.com/v1/clusters/d947b55aa8fb9198b5d13ad81f61ac4d: dial tcp: i/o timeout"

类似于这样的错误,不知道是什么原因,有待解决。(可能是防火墙的问题)

当使用Docker Hub内置的服务发现功能出现问题时,可以使用下面的第二种方法。

第二种方法:使用文件

第二种方法相对而言比第一种方法要简单,也更不容易出现timeout的问题。

第一步
在sclu083这台机器上新建一个文件,把要加入集群的机器的IP地址写进去

这里写图片描述

第二步
在sclu083这台机器上面执行swarm manage命令:

$ sudo docker run –d –p 2376:2375 –v $(pwd)/cluster:/tmp/cluster swarm manage file:///tmp/cluster

这里写图片描述

注意:这里一定要使用-v命令,因为cluster文件是在本机上面,启动的容器默认是访问不到的,所以要通过-v命令共享。还有,file:///千万不能忘记了。

可以看到,swarm已经运行起来了。现在可以查看下集群节点信息了,使用命令:

$ sudo docker run –rm –v $(pwd)/cluster:/tmp/cluster swarm list file:///tmp/cluster

这里写图片描述

(在使用文件作为服务发现的时候,貌似manage list命令只能在swarm manage节点上使用,在其他节点上好像是用不了)

好了,现在集群也已经运行起来了,可以跟第一种方法一样在其他机器上使用集群了。同样在sclu085 机器上做测试:

这里写图片描述

可以看到,成功访问并且节点信息是正确的。接下来可以把上面的info命令替换成其他docker可执行命令来使用这个晓得Docker集群了。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值