首先介绍下什么是 Swarm ,一句话的定义如下:
swarm是一个官方提供的服务,他可以将多个docker实例抽象成一个ip加端口的地址,供其他docker管理工具调用。
swarm的思路是这样的,在任意机器上,启动一个监听在0.0.0.0:2375端口的docker服务,然后每个docker实例(如果一台机器就一个docker实例,那么可以理解为每台机器)启动swarm的agent,然后连上这个docker服务,然后启动 swarm manage 用来提供api服务和收集数据。
巨坑:必须保证集群中docker的版本一致,不然无法创建container
我们开始搭建:
1、下载 swarm 镜像
docker pull swarm
2、创建一个clusterid(集群id)
docker run –rm swarm create
返回一个集群id,我们记录为:
90ea5a1796146652c67eee21ba90a153
3、启动集群管理docker实例(每个实例都需要做3,4两步)
启动另外一个docker实例,监听外网的2375端口
docker -H tcp://0.0.0.0:2375 –daemon=true –pidfile=/var/run/docker_2375.pid –graph=”/var/lib/docker_2375
或者
nohup docker -H tcp://0.0.0.0:2375 –daemon=true –pidfile=”/var/run/docker_2375.pid” –graph=”/var/lib/docker_2375” &
4、启动agent
启动swarm的agent,并和之前的2375端口对接上,如果有多个docker实例,就在多台机器上启动这个玩意
docker run -d swarm join –addr=10.14.40.112:2375 token://90ea5a1796146652c67eee21ba90a153
5、启动swarm的管理器
docker run -d -p 2376:2375 swarm manage token://90ea5a1796146652c67eee21ba90a153
这里我们让manager监听2376端口
6、测试是否成功
我们执行如下命令,查看集群的信息:
docker -H tcp://127.0.0.1:2376 info
打印如下:
Nodes: 1
xxxx: 10.14.40.112:2375
└ Containers: 3
└ Reserved CPUs: 0 / 2
└ Reserved Memory: 0 B / 3.93 GiB
我们加一台机器,打印如下
Containers: 6
Strategy: spread
Filters: affinity, health, constraint, port, dependency
Nodes: 2
toolos.novalocal: 10.14.40.62:2375
└ Containers: 3
└ Reserved CPUs: 0 / 2
└ Reserved Memory: 0 B / 3.93 GiB
xxxxx: 10.14.40.112:2375
└ Containers: 3
└ Reserved CPUs: 0 / 2
└ Reserved Memory: 0 B / 3.93 GiB
7、启动docker ui
docker run -d -p 9004:9000 –privileged dockerui/dockerui -e http://10.14.40.112:2376
8、启动container
进入images页签,点击你要的镜像,然后点击左上角create,填好参数之后,就可以启动啦
我们可以看到,container已经成功的启动起来了