使用鏡像倉庫托管自己構建的Docker鏡像


自己構建的Docker鏡像,默認存儲在本機中,Docker有提供某些方式分享這些鏡像,但不是主流的鏡像分享方式,也有違於開源社區的共享精神。

本文介紹如何使用GitHub托管Dockerfile;使用DockerHub關聯GitHub托管的Dockerfile,進行自動化構建,並托管構建后的鏡像。

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

Dockerfile及鏡像構建的相關知識可參考我之前寫的幾篇博文:

  1. Docker鏡像構建的兩種方式
  2. 官方Tomcat鏡像Dockerfile分析及鏡像使用
  3. 構建自己的Tomcat鏡像

准備工作

注冊GitHub和DockerHub。GitHub主要是用於托管源代碼(即托管Dockerfile文件);DockerHub主要用於構建和托管鏡像。

兩個平台都是免費的,但是因為服務器在國外,訪問不是很穩定,原因大家都懂。

使用GitHub托管Dockerfile

參考本人的一個Tomcat Dockerfile倉庫:https://github.com/dfengwei/docker-tomcat

主要步驟:

  1. 新建一個倉庫(New repository),例如命名為:docker-tomcat。
  2. 通過git提交(或直接通過界面編輯)源碼,目錄結構可以參考我的倉庫,也可參考一些官方倉庫。
  3. 編寫 README.md 文件(強烈建議)。

GitHub是個很常用的平台,具體操作這里就不細講了,網上資料也很多。

使用DockerHub構建並托管鏡像

參考本人的一個Tomcat鏡像倉庫:https://hub.docker.com/r/dfengwei/docker-tomcat

主要步驟

  1. 新建一個自動構建(Create Automated Build),關聯並驗證GitHub賬戶。再選擇GitHub賬戶中的一個倉庫,也就是剛才創建的docker-tomcat倉庫。
  2. 打開 Build Settings 選項卡,進行構建細節的配置。構建配置因為比較復雜和重要,我們下面再細講,這里不展開。配置好后DockerHub會自動根據配置構建鏡像並托管。當然你也可以手動觸發構建。
  3. 打開 Repo Info 選項卡,編寫 Short DescriptionFull DescriptionShort Description 是個簡介,Full Description 是詳細介紹,建議復制GitHub中的README.md內容。
  4. 通過 Repo Info 選項卡中的Docker Pull Command中顯示的命令即可獲取本鏡像(該命令沒指明版本號,請按需添加)。

DockerHub構建配置

主要配置界面

配置自動構建

勾選 When active, builds will happen automatically on pushes. 復選框。當GitHub中對應的文件變動后,會自動推送給DockerHub,DockerHub會自動重新構建鏡像。

添加Trigger

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

字段 說明
Type 指GitHub中的Dockerfile的版本,可以是Branch或Tag。Branch和Tag是git中的概念,不明白的請自行百度。
Name 如果Type選的是Branch,請固定使用 master 作為值;如果Type選的是Tag,請使用一個正則表達式做為值,用於匹配tag。
Dockerfile Location Dockerfile路徑,這個估計大家都理解。/ 對應的是GitHub中倉庫的根路徑。例如我的Tomcat8.5 Dockerfile路徑為:/8.5/jre8/Dockerfile
Docker Tag Name 鏡像版本標簽。標簽的命名雖然沒有標准,但也請遵循一定的規律。最好是先參考官方的一些鏡像標簽。

DockerHub提供的這種配置和構建方式十分靈活,多個標簽其實可以使用同一個Dockerfile文件。構建歷史可以通過 Build Details 選項卡查看。

該功能的主要作用是監控其他鏡像倉庫的變動,觸發本倉庫的自動構建。建議添加父鏡像所在的倉庫。此后,父鏡像所在的倉庫的變動都將觸發本倉庫的自動構建。例如父鏡像緊急修復了一個BUG並重新構建了鏡像,那么我們的鏡像也會跟着重新構建。當然,如果我們鏡像已經被某個用戶在使用了,那么除非該用戶update這個鏡像,否則該鏡像不會自動更新至最新版本。

Build Triggers

DockerHub提供Http接口供有需要的用戶觸發構建。例如你有個自動化腳本想要觸發倉庫的自動化構建,就可以通過本功能實現。

使用其他倉庫托管鏡像

除了DockerHub外,還有很多平台提供鏡像托管服務,比如我使用的阿里雲容器Hub:https://dev.aliyun.com

參考本人在阿里雲開發者平台上托管的一個Tomcat鏡像倉庫:https://dev.aliyun.com/detail.html?spm=5176.1972343.2.2.599c57159oCWBq&repoId=50185

獲取這個平台的鏡像時,必須帶上平台域名,例如:

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

第三方平台的鏡像倉庫的配置方式大多都和DockerHub類似,源碼托管(Dockerfile托管)的方式也有多種。為了不重復勞動,我在阿里雲容器Hub上關聯的是上面配置的GitHub倉庫。也就是說,我用同一份Dockerfile會生成兩份鏡像,一份在DockerHub上,一份在阿里雲容器Hub上,兩份鏡像的內容其實是一樣的,不過pull的方式略有不同。

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM