如何建立 Docker Swarm cluster

以下環境測試於 windows 10 pro , docker 1.13, docker-machine 0.9

1.因為在 windows 下面, docker 是透過 hyperv 運行 linux, 所以我們必須先建立 hyperv 的 virtual-swtich, 這裡我們取名為 "LabNAT"

2.先建立三個 nodes,manager1為 cluster 的 leader

docker-machine create -d hyperv --hyperv-virtual-switch "LabNAT" manager1  
docker-machine create -d hyperv --hyperv-virtual-switch "LabNAT" worker1  
docker-machine create -d hyperv --hyperv-virtual-switch "LabNAT" worker2  

3.登入 manager1

docker-machine ssh manager1  

4.建立 swarm cluster (記得把 IP 換成你自己的)

docker swarm init --advertise-addr 192.168.1.XXX  

5.建立獨立的網路

docker network create --driver overlay webnet  

6.安裝服務, 這邊用 whitemos 鏡像來測試 ( 這邊要注意的是 --publish mode=host,因為目前 docker swarm 有一個問題,是如果你把服務的port建置於 ingress network,也就是load-balance用 routing mesh 的功能的話,這樣會抓不到 clientIP, 所以我們這邊是啟開host本身的port,而不是load-balance上面的port, 這樣我們就可以抓到client然後透過L7的proxy把流量打回docker service, 當然這樣的話 proxy 是沒有 routing mesh 的功能可用)

docker service create --replicas 3 --name whitemos --publish mode=host,target=80,published=80,protocol=tcp -e WHITEMOS_ENV='development' --network webnet jasonsoft/whitemos

docker service create --replicas 3 --name hello --publish 81:80  --network webnet nginxdemos/hello  

7.升級docker image

docker service update --image jasonsoft/whitemos whitemos