目標是利用 docker hub 的 automated build 的功能,做到每次 push request 到 github 時,就能自動建立該專案的測試 image。
參考 https://github.com/alsotang/node-lessons/tree/master/lesson6 的內容,建立了 nodejs 的專案,因為不是這邊的重點,就請大家自己參考該連結,或是參考 https://github.com/azole/docker-auto-build-test 裡頭的程式碼。
這個專案裡頭,我們做了一個小小的 fibonacci 的功能,並且利用 mocha 做了測試,還有一個 Makefile,也在 package.json 中寫了 npm test。
當我把測試專案做好的時候,做了一次 commit/push,回到 docker hub 上去看,會發現又多了一筆 Build Details 的記錄,這表示 Github 跟 Docker hub 真的有連動起來,不過狀態依舊是 Error,因為我們還是沒有 Dockerfile。
FROM ubuntu
# install nodejs
RUN apt-get -qq update
RUN apt-get -y install nodejs
# 因為用 apt 的方式安裝的指令會是 nodejs,但個人習慣用 node,所以做個 link
RUN ln -s /usr/bin/nodejs /usr/bin/node
RUN apt-get -y install npm
# install git
RUN apt-get -y install git
# pull
RUN git clone https://github.com/azole/docker-auto-build-test.git
WORKDIR /docker-auto-build-test
RUN npm install
# run test
CMD ["npm", "test"]
這個 Dockerfile 寫好後,可以自己先 build 起來測試看看,build 後 run 起來,應該會看到測試的結果。
這時候把 Dockerfile push 上 github,這時候會看到又多了一筆 Build Details,狀態是 Building,而 Dockerfile 這個分頁也已經抓到我們剛剛 push 上去的 Dockerfile 了。
稍等一段時間,就會看到狀態已經是 Finished,點進去看,也有整個 build 的過程的 logs 可以看。
最後,我們測試看看,把這個 image pull 下來用用看。
docker pull azole/docker-auto-build-test
docker run azole/docker-auto-build-test
這個 Dockerfile 其實還可以做更好的設計,例如:
於是 Dockerfile 就只剩下這些:
FROM azole/testbase
# pull
RUN git clone https://github.com/azole/docker-auto-build-test.git
WORKDIR /docker-auto-build-test
RUN npm install
# run test
CMD ["npm", "test"]
先把基礎環境做好,這就不用重複去 build 這些基礎的環境了,每次的 automated build 只需要從 pull 程式碼開始即可,image build 的速度會快上許多。
更進一步的話,還可以搭配 CI 一起做。
以上的範例是從無到有去建立,包括 github repo 與專案內容也是,步驟上可以視自己的情況去做,github repo, 專案內容, Dockerfile, docker hub repo 中只有 github repo 要先于 docker repo 建立,其他的順序都沒差。
Content type
Image
Digest
sha256:50992f619…
Size
151.8 MB
Last updated
almost 11 years ago
docker pull azole/docker-auto-build-test