文 / ANOYI
swarm 是一组可以管理 docker 容器的机器集群,在 swarm 中的机器分两种类型:Manager 和 Worker,二者都可以运行容器,区别在于 Manager 拥有管理权,一些命令只能在 Manager 上执行。
一个 Swarm 集群至少拥有一个 Manager,若拥有多个,则只有一个 Leader,Leader 挂掉后自动选举新的 Leader;Worker 可以有零到多个。
boot2docker 是一个轻量级的 linux 发行版,基于专门为运行 docker 容器而设计的 Tiny Core Linux 系统,完全从 RAM 运行,45Mb 左右,启动时间约 5s。
下载后存放在
路径下。2、使用 docker-machine 创建虚拟机
- ~ / .docker / machine / cache
创建 5 个虚拟机,分别命名为 MangerX, ManagerY, WorkerA, WorkerB, WorkerC
- docker-machine create --virtualbox-boot2docker-url ~/.docker/machine/cache/boot2docker.iso ManagerX
- docker-machine create --virtualbox-boot2docker-url ~/.docker/machine/cache/boot2docker.iso ManagerY
- docker-machine create --virtualbox-boot2docker-url ~/.docker/machine/cache/boot2docker.iso WorkerA
- docker-machine create --virtualbox-boot2docker-url ~/.docker/machine/cache/boot2docker.iso WorkerB
- docker-machine create --virtualbox-boot2docker-url ~/.docker/machine/cache/boot2docker.iso WorkerC
虚拟机创建完毕后,使用 docker-machine ls 命令查看当前状态
- NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS ManagerX - virtualbox Running tcp: //192.168.99.100:2376 v18.01.0-ce-rc1
- ManagerY - virtualbox Running tcp: //192.168.99.101:2376 v18.01.0-ce-rc1
- WorkerA - virtualbox Running tcp: //192.168.99.102:2376 v18.01.0-ce-rc1
- WorkerB - virtualbox Running tcp: //192.168.99.103:2376 v18.01.0-ce-rc1
- WorkerC - virtualbox Running tcp: //192.168.99.104:2376 v18.01.0-ce-rc1
可以看出虚拟机都正常运行,目前,虚拟机之间没有关联关系。
创建 Swarm 集群需要操作虚拟机里面的 Docker,有两种方式:
方式一:进入虚拟机内部,使用虚拟机内部的 Docker Client例如:进入 ManagerX 的内部
方式二:使用宿主机的 Docker Client 连接到虚拟机的 Docker daemon
- docker - machine ssh ManagerX
例如:连接 ManagerX 内部的 Docker daemon
- eval "$(docker-machine env ManagerX)"
恢复到连接宿主机的 Docker daemon
- eval "$(docker-machine env -u)"
Swarm 集群
使用方式一实现上图所示的 Swarm 集群的创建[ ] 内代表机器, 右侧代表在此机器上执行的命令,下面对应填写的 IP 地址,请使用在宿主机上使用 docker-machine ls 查看
- [ManagerX] docker swarm init--advertise - addr 192.168.99.100
此时系统返回节点加入的 Token 信息
- docker swarm join--token * *****
查询 Manager 加入的 Token :
查询 Worker 加入的 Token :
- docker swarm join - token manager
- docker swarm join - token worker
- [WorkerA] docker swarm join--token SWMTKN - 1 - 535tmf5tmxf5vad87cfh346snogk1wt48x96iv4wf90srdfavp - d8oqcrgbzh3f1et795r40nleb 192.168.99.100 : 2377
- [WorkerB] docker swarm join--token SWMTKN - 1 - 535tmf5tmxf5vad87cfh346snogk1wt48x96iv4wf90srdfavp - d8oqcrgbzh3f1et795r40nleb 192.168.99.100 : 2377
- [WorkerC] docker swarm join--token SWMTKN - 1 - 535tmf5tmxf5vad87cfh346snogk1wt48x96iv4wf90srdfavp - d8oqcrgbzh3f1et795r40nleb 192.168.99.100 : 2377
- [ManagerX] docker swarm join - token manager
- [ManagerY] docker swarm join--token SWMTKN - 1 - 535tmf5tmxf5vad87cfh346snogk1wt48x96iv4wf90srdfavp - 21w7ajhdc73ro84qggy6zo1jn 192.168.99.100 : 2377
至此,如图所示的集群就创建完毕,查看集群状态
- [ManagerX] docker node ls
使用方式二实现上图所示的 Swarm 集群的创建
- ID HOSTNAME STATUS AVAILABILITY MANAGER STATUS
- xhb82ef2fd4q32zb73vvsewdx * ManagerX Ready Active Leader
- davmvbm78sctiq1jcypzbmu3f ManagerY Ready Active Reachable
- w7lgzwy950ei0bxgzy7wmty43 WorkerA Ready Active
- cpr4x9y5rhbnbs0bcm4d6m6mh WorkerB Ready Active
- xigtuw5z6w44bgtvn3tj4ng73 WorkerC Ready Active
由于上一步已经创建好集群了,所以要销毁之前创建的!
Swarm 集群销毁
Worker 离开集群:docker swarm leave
Manager 离开集群:
- docker swarm leave--force
- [宿主机] eval "$(docker-machine env WorkerA)"
- [宿主机] docker swarm leave
- [宿主机] eval "$(docker-machine env WorkerB)"
- [宿主机] docker swarm leave
- [宿主机] eval "$(docker-machine env WorkerC)"
- [宿主机] docker swarm leave
- [宿主机] eval "$(docker-machine env ManagerX)"
- [宿主机] docker swarm leave --force
- [宿主机] eval "$(docker-machine env ManagerY)"
- [宿主机] docker swarm leave --force
方式二创建 Swarm 集群
- [宿主机] eval "$(docker-machine env ManagerX)"
- [宿主机] docker swarm init --advertise-addr 192.168.99.100
- [宿主机] docker swarm join-token manager
记录 manager 和 worker 加入的 Token
- [宿主机] eval "$(docker-machine env ManagerY)"
- [宿主机] docker swarm join --token [Manager-Token] 192.168.99.100:2377
- [宿主机] eval "$(docker-machine env WorkerA)"
- [宿主机] docker swarm join --token [Worker-Token] 192.168.99.100:2377
- [宿主机] eval "$(docker-machine env WorkerB)"
- [宿主机] docker swarm join --token [Worker-Token] 192.168.99.100:2377
- [宿主机] eval "$(docker-machine env WorkerC)"
- [宿主机] docker swarm join --token [Worker-Token] 192.168.99.100:2377
来源: http://www.jianshu.com/p/3251f2991d5c