Swarm是Docker公司推出的用来管理docker集群,它将一群Docker宿主机变成一个单一的,虚拟的主机。Swarm使用标准的Docker API接口做为其前端访问入口,换言之,各类形式的Docker Client(docker client in Go, docker_py, docker等)都可以直接与Swarm通讯。Swarm几乎所有用go语言来完成开发,Swarm0.2发布,相比0.1版本,0.2版本增长了一个新的策略来调度集群中的容器,使得在可用的节点上传播它们,以及支持更多的Docker命令以及集群驱动。前端
Swarm deamon只是一个调度器(Scheduler)加路由器(router),Swarm本身不运行容器,它只是接受docker客户端发送过来的请求,调度适合的节点来运行容器,这意味着,即便Swarm因为某些缘由挂掉了,集群中的节点也会照常运行,当Swarm从新恢复运行以后,它会收集重建集群信息.node
1.swarm 初始化(建立集群)nginx
docker swarm init --advertise-addr x.x.x.x(ip地址)
之前作过的话可能会报须要先离开集群redis
执行docker swarm leave 最好是加上--force 参数docker
执行成功后再次初始化集群bash
如图所示,就是初始化集群成功,在其余机器上执行图中画红线的就能够加入集群服务器
注意:docker集群用到 2377端口(集群管理端口),7946(这两个是须要开启tcp和udp) ,4789网络
建立成功后每一个节点都会有个overlay 的网络配置,该配置是用来节点之间的通信的,如图所示tcp
在每一个机器上查看网络 docker network inspect ingress 能够看到集群内部通信地址,可是ping不通, 建议仍是用服务器ip来做为其余服务(如redis集群)的通信地址,spa
将节点升级为manager: docker node promote 结点名
将节点降级为worker: docker node demote 结点名
2.建立服务(如nginx)
docker service create --replicas 5 -p 8080:80 --name nginx nginx
--replicas建立几个服务 最后一个nginx为镜像名若是有本地的使用本地的,没有可使用公共的镜像
执行成功后会均匀的分配到集群中(有先分配到工做节点上,最后才会分配到leader节点上)
docker service scale nginx=0
其中的0若是大于如今配置的服务数就是至关于扩容到几台服务,若是小于如今的服务数就至关于减少到对应的服务数,(当手动减少后,只会移除掉管理权限,再次扩容的时候对原先减掉的服务没有影响,经过此命令减小的,会将次服务删除)
注意全部的存储数据或须要持久化的数据不能放到服务内部(也就是容器内部),不然当容器删除(或者服务减小的时候该容器上的数据也会一并消失)
删除服务
docker service rm nginx
查看全部服务
docker service ls
查看服务的容器状态
docker service ps nginx
查看服务的详细信息
docker service inspect nginx