動手玩Docker for Azure (1) - 在Azure建立一個Docker Swarm

微軟在Windows 10和Windows Sevrer 2016也已經支援Docker for Windows了

現在這個支持也推上雲端, 這篇來看看怎樣建立起在Azure上的Docker Swarm架構和進行連線

在Azure 上要做到跑Docker, 有幾個辦法, 可以起一台VM來以以往的方式做

也可以用Azure Container Service, 而今次我想選用Docker提供的Docker Template來完成設定

這個Template會自動啟用Docker Swarm來達到蜂群 (類似Windows裡的Cluster叢集) 模式,

Docker Swarm可以以非常多的節點來建立起一整個強大的Docker網絡,

節點可以分佈在不同的網段但卻能以Docker的overlay網絡連接起來.

而節點分類有Manager Node負責掌控整個網絡, 和負責執行Container的Worker Node.

在Template裡我們可以自定有1,3或5個Manager Node和自選數量的Worker Node, 日後也可以增減

測試中只建立1個Manager Node和2個Worker Node,實作用途時一個Manage Node會做成Single point of failure, 所以並不建議

Docker for Azure的版型分了兩個版本, 一個是Stable穩定版, 另一個是Edge前沿版

背後是不同的VHD Image在支持著, 日後可以進行更新

在登入Azure後直接點擊以上連結就可以進入自訂設定模式, 看起來只要填入幾個洞洞就可以完成嚕

唯一令大家卻步的大概是叫Ad Service Principal App ID和Secret兩個欄位和SSH Public Key的部份

我們就來看看怎樣完成整個template需要的資料吧

首先是Ad Service Principal部份, 微軟有一個隱藏版小工具去產生這兩組資料 (不然要自己做很麻煩)

但首先你要有一台正常運行Docker Engine的電腦而且能接到Internet

才可以用到這個Container tool, 先以Docker Pull拿到這個Docker Image

docker pull docker4x/create-sp-azure:latest

再以Docker run 執行以下指令

docker run -it docker4x/create-sp-azure JustinAzureDocker1 AzureSwarm1 eastasia

首先JustinAzureDocker1是一個APP_ID, 這個只是用來建立Swarm的執行套件的名稱, 可以不那麼認真定義

AzureSwarm1是Resource Group的名稱, 一會在Template裡要選擇的, 所以要注意命名

另外最後eastasia是你想要建立的Azure地理位置

以下連結可以找到所有Azure有建立IDC的位置, 把位置名稱刪去空格就可以填進去

https://azure.microsoft.com/en-us/regions/

然後Container會提示你需要以瀏覽器進入 https://aka.ms/devicelogin 這個網站

以提供的code 進行驗證, 你需要登入你的Azure帳號以完成

成功登入後需要選擇要用那一個付費帳號

之後會運行一陣子, 就是以提供的資料開始在Azure上建立不同的資源

那些段落就省了, 只要中間沒有出現錯誤訊息, 例如說名稱裡不能有符號...

順利的話這個Container應該會把結果顯示出來, 例如我的如下

以這些資訊, 確實地填入版型裡面, 注意Resource Group不要另建新的因為你剛剛已經建立好了

現在是SSH Public Key部份, 有很多產生方式, 一個是以ssh-keygen來解決(Windows 10內已有此指令)

另一個是用PuttyGen這個GUI小工具來產生, 可以在這裡下載

https://winscp.net/eng/docs/ui_puttygen

只要按Generate就可以取得一組SSH Public Key了,

務必要儲存起這組Public和Private Key檔案以備日後連線時使用

把Public Key的部份完完整整的複製入Template裡面

現在Template應該完成了, 你也可以調整VM的大小...

安購買, Azure就會開始配置所有項目, 這個過程需要大約5~10分鐘

完成後你應該會看到AzureSwarm1 (或你自建的名稱) 裡有如下這些項目

在左邊按Deployment, 再點進剛剛這個配置項目

會看到一些執行結果

現在我們要到負責SSH連線的externalSSHLoadBalancer裡找出連線資料

在Inbound NAT rules裡我們可以看到Manager Node的資料, 由於我只建立了一台Manager Node

所以結果如下, 如果在Template有設計多點的話可以看到不同manager node會有不同的連結點

最重要的是Destination和連接埠這兩項資料


現在我們用Putty進行ssh連線

沒有putty的話可以在 https://www.chiark.greenend.org.uk/~sgtatham/putty/latest.html 下載

先在左邊SSH - auth部份選擇我們剛剛儲存起來的private key檔案

再把在Inbound NAT Rules裡看到的IP和Port填入Session裡, 按Open

登入帳號預設是叫docker

看到Welcome to Docker! 就表示連線成功了, 現在你可以向Manager Node下指令

例如docker node ls會把所有在Swarm裡的node列表出來, 剛剛我們建立了1個Manager Node和2個Worker Node

另外也可以以docker info看看這個docker engine的所有資料

在Azure 上建立Docker Swarm可以算是很快速的配置方法, 而且還可以兼用Azure的擴充能力快速增減Worker Node

而且Docker for Azure是以Open Source License建立的, 所以也非常適合現今OSS的廣大社群

下一篇我們再以這個Docker Swarm來玩玩一些在Swarm裡才能做到的事情