Docker Hub設定自動化建置映像檔

提交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.mdLICENSE,就會提交至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原始碼進行關連,關連的重點是BranchTag為依據,再根據設定的規則就會自動化建置。

設定自動化建置

專案建立完成後,按下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頁簽應該能看到映像檔也完成,