1. 程式人生 > >GitHub+Docker Hub實現自動構建映象

GitHub+Docker Hub實現自動構建映象

構建上下文是 Dockerfile 和特定位置的任何檔案。對於自動構建,構建上下文是包含 Dockerfile 的儲存庫。

自動構建有幾個優點:

  • 以這種方式構建的映象完全符合期望
  • 可以訪問 Docker Hub 倉庫的任何人都可以使用 Dockerfile。
  • 程式碼變化後倉庫會自動更新。

GitHub 和 Bitbucket 上的公共和私人倉庫都支援自動構建。本文件將指導你完成使用自動構建的過程。

一. 先決條件

要使用自動構建,必須在 Docker Hub 和託管倉庫(GitHub 或 Bitbucket)上擁有一個帳戶。如果之前已連結過你的 Github 或 Bitbucket 帳戶,則必須選擇公共和私有連線型別。

要檢視你當前的連線設定,請登入到 Docker Hub 並選擇 Profile > Settings > Linked Accounts & Services

二. 限制

  • 目前 Docker Hub 不支援 Git LFS(Large File Storage,大檔案儲存)。如果你的構建上下文中有由 Git LFS 管理的二進位制檔案,則在自動構建過程中建立的副本中只有大檔案對應的指標檔案,這並不是你想要的。
    訂閱 GitHub issue 來跟進此限制。
  • 不支援構建 Windows 容器

三. 連結到託管倉庫服務

1. 登入 Docker Hub

2. 依次點選選單 Profile > Settings > Linked Accounts & Services

3. 選擇要連結到的服務

系統會提示你選擇“Public”、“Private”和“Limited Access”。如果要使用自動構建,則需要 Public 和 Private 連線型別。

4. 點選 Public 和 Private 連線型別下的 Select

系統會提示你輸入服務憑證(Bitbucket 或 GitHub)進行登入。例如,Bitbucket 的提示符如下所示:

bitbucket_creds

在授予程式碼儲存庫的訪問許可權之後,系統會跳轉回 Docker Hub。連結建立完成。

四. 建立自動構建

自動構建倉庫依靠與程式碼倉庫的整合來構建。不過,也可以使用 docker push 命令將已構建的映象推送到這些倉庫。

1. 在 Docker Hub 中選擇 Create > Create Automated Build

系統會提示使用者/組織和程式碼倉庫列表。

2. 從使用者/組織中選擇

3. 或者,鍵入以過濾倉庫列表

4. 選擇要構建的專案

系統會顯示 Create Automated Build 對話方塊。

該對話方塊會為可以自定義的值設定預設值。預設情況下,Docker 會為倉庫中的每個分支構建映象。它假定 Dockerfile 位於原始碼的根目錄。建立映象時,Docker 用分支名稱來標記映象。

5. 通過點選 Click here to customize 來自定義自動構建

指定要從哪個程式碼分支或程式碼標籤構建。可以通過單擊 +(加號)來新增新的配置。該對話方塊接受正則表示式。

6. 點選 Create

系統顯示你的自動構建首頁。

在 GitHub 中,Docker 整合將出現在你的專案倉庫Settings > Webhooks&services 頁面中。

docker-integration

附註:目前 GitHub 已經改版,截圖如下。

對於該程式碼儲存庫,類似的頁面會出現在 Bitbucket 中。刪除 Docker 整合會導致你的自動構建停止。

4.1. 理解構建過程

首次建立自動構建時,Docker Hub 會構建你的映象。幾分鐘後,你應該可以在 image dashboard 上看到你的新構建。Build Details 頁面顯示構建系統的日誌:

在構建過程中,Docker 會將 Dockerfile 的內容複製到 Docker Hub。Docker 社群(用於公共倉庫)或批准的團隊成員/組織(用於私人倉庫)可以在你的倉庫頁面上檢視 Dockerfile。

構建過程會在與 Dockerfile 相同的目錄中查詢 README.md。如果你的倉庫中有一個 README.md 檔案,它將在倉庫中用作 full description(完整描述)。如果在構建之後更改 full description,則在下次執行自動構建時將被覆蓋。要防止覆蓋,請修改 Git 倉庫中的 README.md

一次只能觸發一次構建,每五分鐘不超過一次。如果你已經有一個構建掛起,或者你最近提交了一個構建請求,Docker 會忽略新的請求。

4.2 構建狀態解釋

通過檢視 Build Details 頁面,可以檢視特定倉庫的構建狀態。如果有正在排隊或正在進行的構建,則可以單擊 Cancel 來取消構建。狀態有:

  • Queued:排隊等待構建映象。佇列時間取決於你可以使用的併發構建數量。
  • Building:正在構建映象。
  • Success:映象構建成功,沒有問題。
  • Error: 映象出了問題。點選對應行進入 Builds Details 頁面。頁面頂部的 banner 顯示日誌檔案的最後一句話,指明錯誤是什麼。如果需要更多資訊,滾動至螢幕底部的日誌部分。

五. 使用 Build Settings 頁面

“Build Settings”頁面允許你管理現有的自動構建配置並新增新配置。預設情況下,將新程式碼合併到原始碼庫時,會觸發 DockerHub 映象的構建。

merge_builds

清除 checkbox 可以關閉這個特性。可以使用這個頁面的其他設定來配置並構建映象。

六. 增加並執行新構建

Build 對話方塊的頂部是配置好的構建列表。可以從程式碼分支或構建標籤來構建。

每當向程式碼倉庫進行 push 時,Docker 都會對列出的所有內容進行構建。如果指定了分支或標記,則可以通過按下“Trigger”來手動構建該映象。如果使用正則表示式語法(正則表示式)來定義構建分支或標記,Docker 不會提供手動構建的選項。可以按照下面步驟新增新的構建:

1. 點選加號 +

2. 選擇型別

可以通過程式碼分支或映象標籤來構建。

3. 輸入分支或標籤的名字

可以輸入特定值或使用正則表示式來選擇多個值。要檢視正則表示式的示例,請按頁面右側的“Show More”連結。

4. 輸入 Dockerfile 的位置

5. 指定 Tag 名

6. 點選“Save Changes”

如果有地方弄錯了或想刪除構建,點選減號 - 然後點選“Save Changes”即可。

七. 倉庫連結

倉庫連結可將一個自動構建連結到另一個自動構建。如果一個自動構建得到更新,Docker 會觸發另一個構建。這可以很容易地確保相關映象保持同步。可以連結多個映象儲存庫。只需連結兩個相關版本的一側,雙方都連結導致無盡的構建迴圈。

按照下列步驟建立連結:

1. 在 Docker Hub 中進入要自動構建的倉庫的 Build Settings 頁面

2. 在 Repository Links 部分,輸入映象倉庫名

遠端倉庫名應該是官方倉庫名(如 ubuntu)或公共倉庫名 namespace/repoName

3. 點選 Add

八. 遠端構建觸發器

要以程式設計方式觸發自動構建,可以在另一個應用程式(GitHub 或 Bitbucket)中設定遠端構建觸發器。當啟用自動構建的構建觸發器時,它會為你提供一個 Token 和一個 URL。

可以通過 curl 來觸發構建:

$ curl --data build=true -X POST https://registry.hub.docker.com/u/fungitive/dockerdemo/trigger/5216ef2f-c203-48ce-9d6b-3debb74b502e/
OK

要驗證一切都工作正常,可以檢視當前頁面的“Last 10 Trigger Logs”。

構建kubernetes映象:

FROM gcr.io/google_containers/kubernetes-apiserver-amd64:v1.9.0