Try Docker Swarm
Docker 最近出了 1.6 版,Docker Swarm 也隨之更新了。
參考了以下的網站,自己嘗試做做看~ 原文連結

開始
這邊實作的是與 docker-machine 結合的部分
- 先產生一個 token
| 1 | $ docker run swarm create | 
| 2 | c745d2d1bd2f65579e41f3808533da86 | 
接下來複製上面產生的 Token,後面要用到
- 先建立 swarm-master
| 1 | $ docker-machine create -d virtualbox --swarm --swarm-master --swarm-discovery token://c745d2d1bd2f65579e41f3808533da86 swarm-master | 
| 2 | INFO[0000] Creating SSH key... | 
| 3 | INFO[0000] Creating VirtualBox VM... | 
| 4 | INFO[0010] Starting VirtualBox VM... | 
| 5 | INFO[0010] Waiting for VM to start... | 
| 6 | INFO[0087] "swarm-master" has been created and is now the active machine. | 
| 7 | INFO[0087] To point your Docker client at it, run this in your shell: docker-machine env swarm-master | source | 
- 接下來分別建立 swarm-node01, swarm-node02
| 1 | $  docker-machine create -d virtualbox --swarm --swarm-discovery token://c745d2d1bd2f65579e41f3808533da86 swarm-node-01 | 
| 2 | INFO[0000] Creating SSH key... | 
| 3 | INFO[0000] Creating VirtualBox VM... | 
| 4 | INFO[0010] Starting VirtualBox VM... | 
| 5 | INFO[0011] Waiting for VM to start... | 
| 6 | INFO[0073] "swarm-node-01" has been created and is now the active machine. | 
| 7 | INFO[0073] To point your Docker client at it, run this in your shell: docker-machine env swarm-node-01 | source | 
| 1 | $ docker-machine create -d virtualbox --swarm --swarm-discovery token://c745d2d1bd2f65579e41f3808533da86 swarm-node-02 | 
| 2 | INFO[0000] Creating SSH key... | 
| 3 | INFO[0000] Creating VirtualBox VM... | 
| 4 | INFO[0010] Starting VirtualBox VM... | 
| 5 | INFO[0011] Waiting for VM to start... | 
| 6 | INFO[0070] "swarm-node-02" has been created and is now the active machine. | 
| 7 | INFO[0070] To point your Docker client at it, run this in your shell: docker-machine env swarm-node-02 | source | 
- 執行後的結果
| 1 | $ docker-machine ls | 
| 2 | NAME            ACTIVE   DRIVER       STATE     URL                         SWARM | 
| 3 | swarm-master             virtualbox   Running   tcp://192.168.99.102:2376   swarm-master (master) | 
| 4 | swarm-node-01            virtualbox   Running   tcp://192.168.99.103:2376   swarm-master | 
| 5 | swarm-node-02   *        virtualbox   Running   tcp://192.168.99.104:2376   swarm-master | 
- 看一下 swarm-master 裡面,跑了什麼東西
如果發現,執行 docker ps 沒東西,表示你現在並非在 swarm-master
先執行一下 docker-machine active swarm-master 就可以
理論上,會有兩個 container 已經跑起來在 swarm-master,就是上面那張圖的 agent (紫色)
| 1 | $ docker ps | 
| 2 | CONTAINER ID        IMAGE               COMMAND                CREATED             STATUS              PORTS                              NAMES | 
| 3 | a53db3d5ffc4        swarm:latest        "/swarm join --addr    35 minutes ago      Up 16 minutes       2375/tcp                           swarm-agent | 
| 4 | e98fbd194f54        swarm:latest        "/swarm manage --tls   35 minutes ago      Up 16 minutes       2375/tcp, 0.0.0.0:3376->3376/tcp   swarm-agent-master | 
- Swarm Cluster 的內容
先執行 eval "$(docker-machine env --swarm swarm-master)"
所以這邊就顯示了,我建立了兩個 node
| 1 | $ docker info | 
| 2 | Containers: 4 | 
| 3 | Strategy: spread | 
| 4 | Filters: affinity, health, constraint, port, dependency | 
| 5 | Nodes: 3 | 
| 6 |  swarm-master: 192.168.99.102:2376 | 
| 7 |   └ Containers: 2 | 
| 8 |   └ Reserved CPUs: 0 / 4 | 
| 9 |   └ Reserved Memory: 0 B / 1.025 GiB | 
| 10 |  swarm-node-01: 192.168.99.103:2376 | 
| 11 |   └ Containers: 1 | 
| 12 |   └ Reserved CPUs: 0 / 4 | 
| 13 |   └ Reserved Memory: 0 B / 1.025 GiB | 
| 14 |  swarm-node-02: 192.168.99.104:2376 | 
| 15 |   └ Containers: 1 | 
| 16 |   └ Reserved CPUs: 0 / 4 | 
| 17 |   └ Reserved Memory: 0 B / 1.025 GiB | 
- 可以用下面的指令列出 swarm 的 node,如果你有建立兩個以上的 swarm-master,用的是你建立 swarm-master 的 token 來區分
| 1 | $ docker run swarm list token://c745d2d1bd2f65579e41f3808533da86 | 
| 2 | 192.168.99.104:2376 | 
| 3 | 192.168.99.102:2376 | 
| 4 | 192.168.99.103:2376 | 
2015-05-02 更新,我之前因為使用 token 是用原文的範例指令直接執行,所以,註冊 Swarm 的時候,會與原本註冊的資料重複,如果自己產生一組 Token 就不會這樣了~
後記
其實我現在對 Docker Swarm 的了解還沒有很深入,只是先照著文章的步驟做出來而已,還在想這個可以應用在哪邊,之後如果有想到或嘗試什麼新的東西,會在寫下來
在我嘗試這篇文章的步驟時,出現了一個意料之外的狀況,就是我先把我本機的 docker 升級到 1.6,結果我建立出來的 virtualbox image 卻不是這個版本,所以就噴出了以下的錯誤:
| 1 | FATA[0000] Error response from daemon: client and server don't have same version (client : 1.18, server: 1.17) | 
如果遇到這個狀況,只需要升級 swarm-master 的 boot2docker 版本就可以。 這時候就會覺得 docker-machine 很好用 .....
| 1 | docker-machine upgrade swarm-master | 
然後等它做完,重新啟動 docker-machine 就好~ (建議是要重新啟動,因為我不重新啟動就不能用~)