提交Dockerfile至Github
此次當做範本的Dockerfile主要功能是要將Node-RED-Docker提供的Node-Red
加上時區設定,因丹尼在使用此Node-Red映像檔後發現時區並非台灣時區,且要再設定時有一些麻煩,所以利用原先的Node-RED-Docker再配合Dockerfile功能自行加上時區設定,由於Node-RED-Docker是使用Docker Hub上的Node,而它是Linux的Debian分支,dpkg-reconfigure
就能變更時區設定,只需要在Dockerfile加上時區設定就能變更成台灣時區:
USER root # init ENV TIME_ZONE="Asia/Taipei" # timezone RUN echo $TIME_ZONE > /etc/timezone RUN dpkg-reconfigure --frontend noninteractive tzdata #
上面內容功能是先將時區名稱加至/etc/timezone
檔案,再執行dpkg-reconfigure
設定時區,如此一來預設值就在台灣的時區,不用再手動變更,除了這些,丹尼根據自已使用習慣會加上Node-Red的圖形介面套件node-red-dashboard
,這套件可以利用Node-Red產生網頁的UI介面像下圖:
上面都大致上理解後,下面內容為完整的Dockerfile:
FROM nodered/node-red-docker USER root # init ENV TIME_ZONE="Asia/Taipei" # timezone RUN echo $TIME_ZONE > /etc/timezone RUN dpkg-reconfigure --frontend noninteractive tzdata # USER node-red RUN npm install node-red-contrib-flightaware RUN npm install node-red-dashboard
再來補上一些Github需要的文README.md
、LICENSE
,就會提交至Github,提交之後就能看到下圖為發佈至Github後的檔案結構:
丹尼這次專案命名為DY-Node-RED-Docker,你可以使用自已撰寫好的或是直接fork丹尼的專案再進行練習。
Create Automated Build
上述都準備完成後,此節要建立Create Automated Build
專案,建立之前確定你已使用Docker Hub帳號登入完成,
按下Create
後選擇Create Automated Build
進行建立自動化建置,
再來選擇Create Auto-build Github
後Docker Hub會讀取Github上你所有專案並列出,選擇要與Docker Hub專案產生關聯的專案,丹尼選擇已經提交至Github的dy-node-red-docker
,之後會轉入另一個設定畫面,設定對於在Docker Hub上建立此專案的名稱及內容,
將你的設定內容設定完成後按下Create
,等待一段時間後網頁就會轉入已建立好的專案,
專案建立之後,下面章節就要與Github原始碼進行關連,關連的重點是Branch
、Tag
為依據,再根據設定的規則就會自動化建置。
設定自動化建置
專案建立完成後,按下Build Settings
進行自動化建置條件的設定頁面,下圖為設定頁面,
上圖紅框處Show more
按下就能查看官方提供的參考範例,官方提供三種範例供參考,根據範例知道可以設定規則,規則符合後就會個自動化建置,
紅框處為丹尼要引用的規則,此規則目的是取得Github上的所有Tag並且使用正規表示法來過濾,符合/^[0-9.]+$/
規則就會自動化建置映像檔,並以符合規則的內容做為Docker Tag Name
,
Docker Tag Name
留空白會以預設的設定,將符合規則內容當做Docker Tag Name
的內容,而不是像官方範例中加前綴字release-
,設定好後按下Save Changes
將設定存檔。
存完成成後規則立即生效,依照丹尼在Github上發佈的dy-node-red-docker
,使用Tag內容當做版本號碼,Github也將此方式當做Release上的版本發佈方式,當Github的Tag內容與Docker hub設定的過濾規則都符合時,就會進行自動化建置的工作。
丹尼繪制一張整個過程的概要圖供參考,因不確定怎麼表達比較適當,暫時先以下張圖表達:
要觸發自動化建置只有2個條件,一個條件為程式碼提交後推送至Github或是使用金鑰的方式觸發,下章節會使用金鑰觸發的方式讓Docker Hub進行自動化建置映像檔。
測試自動化建置
上個章節完Save changes
後已經完成整個Github與Docker hub對接的動作,此次目的會產生自動建置後的版本0.0.6
,下面要進行手動測試的工作,我們將網頁移至最下方看到Build Triggers
段落,
此段落可以利用傳送網頁的方式利用POST
產生觸發,接收到觸發時就會進行指定的自動建置,要開啟此功能時必需先按下Active Triggers
產生金鑰,
Trigger Token
就是觸發用的金鑰,注意上圖中的Show examples
,按下後會依你取得的Trigger Token
當金鑰產生幾個觸發的範本供使用,
範例中提供四種方式,而丹尼選擇最後一個方式進行手動觸發測試,這方式會讓Docker hub自行到Github中取得所有Tag並抓取到指定的Tag名稱再進行自動建置,所以將最後一個方式複製後將source_name
內容進行修改成0.0.6
,
# Trigger by Source tag named v1.1 $ curl -H "Content-Type: application/json" --data '{"source_type": "Tag", "source_name": "0.0.6"}' -X POST https://registry.hub.docker.com/u/dannytw/dy-node-red-docker/trigger/c71407cc-2202-429e-802c-6d2f83377cbf/
接下來再到終端機執行命令,
執行成功後會返回很簡單的OK
,就能回到Docker hub網頁上查看Build Detials
內容,狀態會顯示Building
,
當完成後會看到狀態已變更為Success
表示已自動建置完成,再回到Tags
頁簽應該能看到映像檔也完成,