【教程】如何从零开始搭建Docker Swarm集群
【编者的话】本文主要介绍了如何从头搭建Docker Swarm集群,参照了Youtube视频Demo of Machine + Swarm + compose integration与Demo of Docker Swarm Beta以及官方的Docker Swarm文档,借以给读者朋友提供更为直观地Swarm演示示例。
需求
1. Docker版本1.4.0+2. 两台节点主机:
- A:192.168.20.1
- B:192.168.20.2
检查节点Docker配置
1. 打开Docker配置文件(示例是centos 7)vim /etc/sysconfig/docker
2. 添加
-H tcp://0.0.0.0:2375
到OPTIONS
OPTIONS='-g /cutome-path/docker -H tcp://0.0.0.0:2375'
3. CentOS6.6 需要另外添加
-H unix:///var/run/docker.sock
OPTIONS='-g /mnt/docker -H tcp://0.0.0.0:2375 -H unix:///var/run/docker.sock'
分别给A、B节点安装swarm
$ docker pull swarm
生成集群token(一次)
$ docker run --rm swarm create
6856663cdefdec325839a4b7e1de38e8
其中
6856663cdefdec325839a4b7e1de38e8
就是我们将要创建集群的token添加节点A、B到集群
$ docker run -d swarm join --addr=192.168.20.1:2375 token://6856663cdefdec325839a4b7e1de38e8
$ docker run -d swarm join --addr=192.168.20.2:2375 token://6856663cdefdec325839a4b7e1de38e8
列出集群A、B节点
$ docker run --rm swarm list token://6856663cdefdec325839a4b7e1de38e8
192.168.20.1:2375
192.168.20.2:2375
集群管理:
在任何一台主机A、B或者C(C:192.168.20.3)上开启管理程序。例如在C主机开启:$ docker run -d -p 8888:2375 swarm manage token://6856663cdefdec325839a4b7e1de38e8
现在你就可以在主机C上管理集群A、B:
$ docker -H 192.168.20.3:8888 info
$ docker -H 192.168.20.3:8888 ps
$ docker -H 192.168.20.3:8888 logs ...
在集群上运行容器
$ docker -H 192.168.20.3:8888 run -d --name web1 nginx
$ docker -H 192.168.20.3:8888 run -d --name web2 nginx
$ docker -H 192.168.20.3:8888 run -d --name web3 nginx
$ docker -H 192.168.20.3:8888 run -d --name web4 nginx
$ docker -H 192.168.20.3:8888 run -d --name web5 nginx
查看集群A、B内的容器
$ docker -H 192.168.20.3:8888 ps -a
结果如下:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
4cc1f232fb18 nginx:latest "nginx -g 'daemon of 16 hours ago Up 16 hours 80/tcp, 443/tcp Host-A/web5
e8327939721a nginx:latest "nginx -g 'daemon of 16 hours ago Up 16 hours 443/tcp, 80/tcp Host-A/web3
35e08c4a1b43 nginx:1 "nginx -g 'daemon of 23 hours ago Up 16 hours 443/tcp, 80/tcp Host-B/web4
9bd07067620d nginx:1 "nginx -g 'daemon of 23 hours ago Up 16 hours 443/tcp, 80/tcp Host-B/web2
626fe5b1dcfa nginx:1 "nginx -g 'daemon of 23 hours ago Up 16 hours 80/tcp, 443/tcp Host-B/web1
其中
NAMES
列里面:/
前边是节点名字,后边是在节点内创建的容器名字。使用Docker Machine搭建Swarm集群
31 个评论
Docker Swarm的这些信息,除了command line,有web界面工具吗?
个人感觉shipyard≈swarm+gui,有木有
[root@rhel73 ~]# docker run --rm swarm list token://73c1f0d1a0de589706b41ceac8d7e064
192.168.1.238:2375
192.168.1.239:2375
[root@rhel73 ~]# docker -H tcp://192.168.1.231:8888 info
Containers: 0
Nodes: 0
[root@rhel73 ~]#
[root@rhel73 ~]# docker -H tcp://192.168.1.231:8888 run -d -P --name nginx1 nginx:latest
FATA[0000] Error response from daemon: No healthy node available in the cluster
为什么会提示我的集群中没有节点啊????
感觉这Swarm太多问题了.....
192.168.1.238:2375
192.168.1.239:2375
[root@rhel73 ~]# docker -H tcp://192.168.1.231:8888 info
Containers: 0
Nodes: 0
[root@rhel73 ~]#
[root@rhel73 ~]# docker -H tcp://192.168.1.231:8888 run -d -P --name nginx1 nginx:latest
FATA[0000] Error response from daemon: No healthy node available in the cluster
为什么会提示我的集群中没有节点啊????
感觉这Swarm太多问题了.....
防火墙~
好像不能这么说吧,shipyard虽然可以同时加入多个docker hosts, 但是没有统一操作的接口,不论从物理上还是逻辑上它们都是独立的,也没有集群最关键的调度模块,它仅仅是一个实现了docker remote API并且可以在多个docker hosts之间切换操作的gui罢了
好像不是啊,我也遇到了同样的问题,防火墙什么的都关了也没有用啊
我也遇到过一次,当时发现是防火墙的原因。因为telnet nodeip 2375 没有通~还有可能有什么别的原因?碰到了顺便给我说下,3q
学习下,找个环境试试swarm
有些错误原因可以添加 -H unix:///var/run/docker.sock到OPTIONS再测试一下
你这个compose用到哪儿呢?
问题还是没有解决,倒是换了consul作为discovery service backend以后就好了,不知道是token方式本身的问题,还是我自身环境的问题
thanks
楼主,两个问题,请帮我看看,谢谢了。
1.
docker run --rm swarm list token://221cfb4b39feeb36ff2503a124764159
有时候显示两个:
192.168.0.17:2375
192.168.0.18:2375
有时候显示一个:
192.168.0.17:2375
2.
然后执行:
docker run -d -p 8888:2375 swarm manage token://221cfb4b39feeb36ff2503a124764159
docker -H 192.168.99.100:8888 ps
只显示当前192.168.99.100 的 ps
1.
docker run --rm swarm list token://221cfb4b39feeb36ff2503a124764159
有时候显示两个:
192.168.0.17:2375
192.168.0.18:2375
有时候显示一个:
192.168.0.17:2375
2.
然后执行:
docker run -d -p 8888:2375 swarm manage token://221cfb4b39feeb36ff2503a124764159
docker -H 192.168.99.100:8888 ps
只显示当前192.168.99.100 的 ps

田浩浩 回复 yooz_hardy
这个教程是用的旧版本,有bug无法解决...
新版本的话 抽空我再更新一下吧
新版本的话 抽空我再更新一下吧

yooz_hardy 回复 田浩浩
行。多谢
更新一个使用docker-machine 的swarm集群教程
http://anders.janmyr.com/2015/11/simple-clustering-with-docker-swarm-and.html?mkt_tok=3RkMMJWWfF9wsRonuqTMZKXonjHpfsX57ukoWaC0lMI%2F0ER3fOvrPUfGjI4DTMJgI%2BSLDwEYGJlv6SgFQ7LMMaZq1rgMXBk%3D
http://anders.janmyr.com/2015/11/simple-clustering-with-docker-swarm-and.html?mkt_tok=3RkMMJWWfF9wsRonuqTMZKXonjHpfsX57ukoWaC0lMI%2F0ER3fOvrPUfGjI4DTMJgI%2BSLDwEYGJlv6SgFQ7LMMaZq1rgMXBk%3D
0.5.0 docker-machine
1.9.0 docker
1.0.0 docker swarm
已测 可用
1.9.0 docker
1.0.0 docker swarm
已测 可用
http://blog.arungupta.me/docker-machine-swarm-compose-couchbase-wildfly/
docker swarm with consul
docker swarm with consul
Swarm & K8s video: https://www.youtube.com/watch?v=8jepaoATuN0
还在更新吗

田浩浩 回复 chen4834807
这个单独模式的swarm已经不更新了 现在是swarm mode