Docker Swarm的入门使用

Docker Swarm的入门使用

 

安装swarm的最贱的方式是使用docker官网上的镜像.

root@syx-VB:~# dao pull swarm


使用下面的命令来产看swarm是否安装成功:

root@syx-VB:~# docker run --rm swarm -v
swarm version 1.2.2 (34e3da3)


 

使用

在使用swarm管理集群前,需要把集群中所有的节点的docker daemon的监听方式更改为0.0.0.0:2375.有两种方式:

(1).在启动docker daemon的时候指定:

sudo docker -H 0.0.0.0:2375&


(2).直接修改Docker的配置文件(ubuntu上的是/etc/default/docker),在文件最后添加以下代码:

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


 

需要注意的是,一定是在所有希望被swarm管理的节点上进行的.修改之后要重启docker:

service docker restart


 

Docker集群管理需要使用服务发现(Discovery service backend)功能,Swarm支持以下的几种方式:DockerHub提供的服务发现功能,本地的文件,etcd,counsel,zookeeperIP列表.

 

本次实验包括三台机器,IP地址分别为:

Host1:192.168.3.144;
Host2:192.168.3.172;
Host3:114.215.97.162;


为什么三台机器的IP地址有点差距呢?因为楼主想证明,就算是三台离着很远的机器也能使用swarm管理.

 

利用这三台机器组成一个集群,其中172这台机器充当swarm manage管理节点.

 

第一步.创建集群token

在上面三台机器上的任何一台机器上执行:

root@syx-VB:~# sudo docker run --rm swarm create
4d53d13612f3a655449eb40596a1a1ec


可以看到返回了一个ID,这个ID是全球唯一的,用来标示要管理的集群,这里可能会出现timeout的错误,你看看你的机器能不能上网,因为楼主的虚拟机在获取的时候频频出错,但是在换成了阿里云的服务器之后使用这行命令一次错误也没产生.

记住这个全球唯一的ID.因为你每次返回的ID都不一样.

 

第二步,将你想要的主机加入集群:

这一步很简单,就是在你需要加入集群的每台主机上,执行下面的命令:

sudo docker run -rm swarm join --addr=ip_address:2375 token://4d53d13612f3a655449eb40596a1a1ec

这里的ip_address换成你自己机器的IP即可.

案例如下,172这台机器执行的命令如下:

root@syx-VB:~# docker run --rm swarm join --addr=192.168.3.172:2375 token://4d53d13612f3a655449eb40596a1a1ec


返回的结果如下:

time="2016-05-18T11:33:03Z" level=info msg="Registering on the discovery service every 1m0s..." addr="192.168.3.172:2375" discovery="token://4d53d13612f3a655449eb40596a1a1ec"


这条命令不会自动结束,你需要按下Ctrl+C强制结束一下.

 

其余两台机器的命令类似.

 

最后一步就是要使用172这台主机充当管理节点了,需要在172这台主机上执行swarm manage命令:

root@syx-VB:~# docker run -d -p 2376:2375 swarm manage token://4d53d13612f3a655449eb40596a1a1ec


返回的结果是已经启动的swarm容器的ID,此时整个集群已经启动起来了.

ccb604d3d393e22bb02b4b9d4a2aa8734b95e3ad8a32626fdda2f7686c6bf128


 

这个时候你运行:

root@syx-VB:~# docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS                    NAMES
ccb604d3d393        swarm               "/swarm manage token:"   About a minute ago   Up About a minute   0.0.0.0:2376->2375/tcp   naughty_boyd


能够看到,swarm已经成功启动.在执行swarm 这条命令的时候,有几点需要注意:

1.这条命令需要在充当swarm管理者的机器上执行(本例中是172这台机器).

2.swarm要以daemon的形式执行.

3.映射的端口除了2375以外的任何都行,就是不能是2375.

 

测试一下:

最最关键的时刻到了,这个时候你可以在任意集群的机器中使用 swarm list命令查看一下集群中的节点,比如我在144这台机器上查看这个集群中的几点有哪些:

root@syx-VB:~# docker run --rm swarm list token://4d53d13612f3a655449eb40596a1a1ec
114.215.97.162:2375
192.168.3.144:2375
192.168.3.172:2375


 

这里楼主发现一个问题,就是你的机器只能加入一个集群,楼主开始的时候使用swarm创建了一个集群,完全没有问题,楼主又创建乐一个新集群,发现前面的没问题,就是在测试的时候不显示内容.

 

第二个问题是,在测试的时候楼主想查看一下其他机器的信息,比如楼主现在在172这台机器上执行如下命令:

root@syx-VB:~# docker -H 192.168.3.144:2376 info


返回的信息如下:

Cannot connect to the Docker daemon. Is the docker daemon running on this host?


这是什么意思,楼主还没有搞明白,如果有大神知道如何解决,希望告诉小弟,感激不尽.

 

还有一个问题,小弟在开启2375端口监听的时候,出现了这种错误:

root@syx-VB:~# docker -H tcp://0.0.0.0:2375 -d
Warning: '-d' is deprecated, it will be removed soon. See usage.
WARN[0000] please use 'docker daemon' instead.          
WARN[0000] /!\ DON'T BIND ON ANY IP ADDRESS WITHOUT setting -tlsverify IF YOU DON'T KNOW WHAT YOU'RE DOING /!\
INFO[0000] API listen on [::]:2375                      
INFO[0000] [graphdriver] using prior storage driver "aufs"
INFO[0000] Firewalld running: false                     
INFO[0001] Default bridge (docker0) is assigned with an IP address 172.17.0.1/16. Daemon option --bip can be used to set a preferred IP address
WARN[0001] Your kernel does not support swap memory limit.
INFO[0001] Loading containers: start.                   
..........................................WARN[0001] Failed to allocate and map port 5000-5000: Error starting userland proxy: listen tcp 0.0.0.0:5000: bind: address already in use
ERRO[0001] error locating sandbox id 8962a74abfb1fdcc00518500b659cab4bdcde4b8aaef6ae263f092f7587f2b83: sandbox 8962a74abfb1fdcc00518500b659cab4bdcde4b8aaef6ae263f092f7587f2b83 not found
WARN[0001] failed to cleanup ipc mounts:
failed to umount /var/lib/docker/containers/29c3e5ab6ac7544aead75c13bb6f183a64b502e28d228d46c8bb1ff945ff7c3a/shm: invalid argument
failed to umount /var/lib/docker/containers/29c3e5ab6ac7544aead75c13bb6f183a64b502e28d228d46c8bb1ff945ff7c3a/mqueue: invalid argument
ERRO[0001] Failed to start container 29c3e5ab6ac7544aead75c13bb6f183a64b502e28d228d46c8bb1ff945ff7c3a: failed to create endpoint registry on network bridge: Error starting userland proxy: listen tcp 0.0.0.0:5000: bind: address already in use
 
INFO[0001] Loading containers: done.                    
INFO[0001] Daemon has completed initialization          
INFO[0001] Docker daemon                                 commit=a34a1d5 execdriver=native-0.2 graphdriver=aufs version=1.9.1
^CINFO[0079] Processing signal 'interrupt'          


 

你可能感兴趣的:(Docker)