自己構(gòu)建的Docker鏡像,默認(rèn)存儲(chǔ)在本機(jī)中,Docker有提供某些方式分享這些鏡像,但不是主流的鏡像分享方式,也有違于開源社區(qū)的共享精神。

本文介紹如何使用GitHub托管Dockerfile;使用DockerHub關(guān)聯(lián)GitHub托管的Dockerfile,進(jìn)行自動(dòng)化構(gòu)建,并托管構(gòu)建后的鏡像。

GitHub地址:https://github.com。
DockerHub地址:https://hub.docker.com。

Dockerfile及鏡像構(gòu)建的相關(guān)知識(shí)可參考我之前寫的幾篇博文:

  1. Docker鏡像構(gòu)建的兩種方式。

  2. 官方Tomcat鏡像Dockerfile分析及鏡像使用。

  3. 構(gòu)建自己的Tomcat鏡像。

準(zhǔn)備工作

注冊(cè)GitHub和DockerHub。GitHub主要是用于托管源代碼(即托管Dockerfile文件);DockerHub主要用于構(gòu)建和托管鏡像。

兩個(gè)平臺(tái)都是免費(fèi)的,但是因?yàn)榉?wù)器在國(guó)外,訪問不是很穩(wěn)定,原因大家都懂。

使用GitHub托管Dockerfile

參考本人的一個(gè)Tomcat Dockerfile倉(cāng)庫(kù):https://github.com/dfengwei/docker-tomcat

主要步驟:

  1. 新建一個(gè)倉(cāng)庫(kù)(New repository),例如命名為:docker-tomcat。

  2. 通過git提交(或直接通過界面編輯)源碼,目錄結(jié)構(gòu)可以參考我的倉(cāng)庫(kù),也可參考一些官方倉(cāng)庫(kù)。

  3. 編寫 README.md 文件(強(qiáng)烈建議)。

GitHub是個(gè)很常用的平臺(tái),具體操作這里就不細(xì)講了,網(wǎng)上資料也很多。

使用DockerHub構(gòu)建并托管鏡像

參考本人的一個(gè)Tomcat鏡像倉(cāng)庫(kù):https://hub.docker.com/r/dfengwei/docker-tomcat

主要步驟

  1. 新建一個(gè)自動(dòng)構(gòu)建(Create Automated Build),關(guān)聯(lián)并驗(yàn)證GitHub賬戶。再選擇GitHub賬戶中的一個(gè)倉(cāng)庫(kù),也就是剛才創(chuàng)建的docker-tomcat倉(cāng)庫(kù)。

  2. 打開 Build Settings 選項(xiàng)卡,進(jìn)行構(gòu)建細(xì)節(jié)的配置。構(gòu)建配置因?yàn)楸容^復(fù)雜和重要,我們下面再細(xì)講,這里不展開。配置好后DockerHub會(huì)自動(dòng)根據(jù)配置構(gòu)建鏡像并托管。當(dāng)然你也可以手動(dòng)觸發(fā)構(gòu)建。

  3. 打開 Repo Info 選項(xiàng)卡,編寫 Short Description 和 Full Description 。Short Description 是個(gè)簡(jiǎn)介,Full Description 是詳細(xì)介紹,建議復(fù)制GitHub中的README.md內(nèi)容。

  4. 通過 Repo Info 選項(xiàng)卡中的Docker Pull Command中顯示的命令即可獲取本鏡像(該命令沒指明版本號(hào),請(qǐng)按需添加)。

DockerHub構(gòu)建配置

主要配置界面

平面設(shè)計(jì)培訓(xùn),網(wǎng)頁(yè)設(shè)計(jì)培訓(xùn),美工培訓(xùn),游戲開發(fā),動(dòng)畫培訓(xùn)

配置自動(dòng)構(gòu)建

勾選 When active, builds will happen automatically on pushes. 復(fù)選框。當(dāng)GitHub中對(duì)應(yīng)的文件變動(dòng)后,會(huì)自動(dòng)推送給DockerHub,DockerHub會(huì)自動(dòng)重新構(gòu)建鏡像。

添加Trigger

先解釋下各列的含義(可以點(diǎn)擊界面上的 Show more 按鈕查看英文版的簡(jiǎn)單說(shuō)明):

字段說(shuō)明
Type指GitHub中的Dockerfile的版本,可以是Branch或Tag。Branch和Tag是git中的概念,不明白的請(qǐng)自行百度。
Name如果Type選的是Branch,請(qǐng)固定使用 master 作為值;如果Type選的是Tag,請(qǐng)使用一個(gè)正則表達(dá)式做為值,用于匹配tag。
Dockerfile LocationDockerfile路徑,這個(gè)估計(jì)大家都理解。/ 對(duì)應(yīng)的是GitHub中倉(cāng)庫(kù)的根路徑。例如我的Tomcat8.5 Dockerfile路徑為:/8.5/jre8/Dockerfile
Docker Tag Name鏡像版本標(biāo)簽。標(biāo)簽的命名雖然沒有標(biāo)準(zhǔn),但也請(qǐng)遵循一定的規(guī)律。最好是先參考官方的一些鏡像標(biāo)簽。

DockerHub提供的這種配置和構(gòu)建方式十分靈活,多個(gè)標(biāo)簽其實(shí)可以使用同一個(gè)Dockerfile文件。構(gòu)建歷史可以通過 Build Details 選項(xiàng)卡查看。

添加Repository Links

該功能的主要作用是監(jiān)控其他鏡像倉(cāng)庫(kù)的變動(dòng),觸發(fā)本倉(cāng)庫(kù)的自動(dòng)構(gòu)建。建議添加父鏡像所在的倉(cāng)庫(kù)。此后,父鏡像所在的倉(cāng)庫(kù)的變動(dòng)都將觸發(fā)本倉(cāng)庫(kù)的自動(dòng)構(gòu)建。例如父鏡像緊急修復(fù)了一個(gè)BUG并重新構(gòu)建了鏡像,那么我們的鏡像也會(huì)跟著重新構(gòu)建。當(dāng)然,如果我們鏡像已經(jīng)被某個(gè)用戶在使用了,那么除非該用戶update這個(gè)鏡像,否則該鏡像不會(huì)自動(dòng)更新至最新版本。

Build Triggers

DockerHub提供Http接口供有需要的用戶觸發(fā)構(gòu)建。例如你有個(gè)自動(dòng)化腳本想要觸發(fā)倉(cāng)庫(kù)的自動(dòng)化構(gòu)建,就可以通過本功能實(shí)現(xiàn)。

使用其他倉(cāng)庫(kù)托管鏡像

除了DockerHub外,還有很多平臺(tái)提供鏡像托管服務(wù),比如我使用的阿里云容器Hub:https://dev.aliyun.com

參考本人在阿里云開發(fā)者平臺(tái)上托管的一個(gè)Tomcat鏡像倉(cāng)庫(kù):https://dev.aliyun.com/detail.html?spm=5176.1972343.2.2.599c57159oCWBq&repoId=50185。

獲取這個(gè)平臺(tái)的鏡像時(shí),必須帶上平臺(tái)域名,例如:

$ docker pull registry.cn-hangzhou.aliyuncs.com/dfengwei/docker-tomcat

第三方平臺(tái)的鏡像倉(cāng)庫(kù)的配置方式大多都和DockerHub類似,源碼托管(Dockerfile托管)的方式也有多種。為了不重復(fù)勞動(dòng),我在阿里云容器Hub上關(guān)聯(lián)的是上面配置的GitHub倉(cāng)庫(kù)。也就是說(shuō),我用同一份Dockerfile會(huì)生成兩份鏡像,一份在DockerHub上,一份在阿里云容器Hub上,兩份鏡像的內(nèi)容其實(shí)是一樣的,不過pull的方式略有不同。

當(dāng)然,Dockerfile源碼托管的方式除了GitHub外,也有很多選擇余地,這里不再展開。

http://www.cnblogs.com/dfengwei/p/7150455.html