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