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

 

posted @ 2018-11-07 16:08  不随便也不将就  阅读(1075)  评论(0)    收藏  举报