docker swarm
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重新恢复运行之后,它会收集重建集群信息.
1.swarm 初始化(创建集群)
docker swarm init --advertise-addr x.x.x.x(ip地址)
以前做过的话可能会报需要先离开集群

执行docker swarm leave 最好是加上--force 参数

执行成功后再次初始化集群

如图所示,就是初始化集群成功,在其他机器上执行图中画红线的就可以加入集群
注意:docker集群用到 2377端口(集群管理端口),7946(这两个是需要开启tcp和udp) ,4789
创建成功后每个节点都会有个overlay 的网络配置,该配置是用来节点之间的通讯的,如图所示

在每个机器上查看网络 docker network inspect ingress 可以看到集群内部通讯地址,但是ping不通, 建议还是用服务器ip来作为其他服务(如redis集群)的通讯地址,
将节点升级为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

浙公网安备 33010602011771号