最佳化雲端構建

Docker Build Cloud 遠端執行您的構建,而不是在您呼叫構建的機器上。這意味著客戶端和構建器之間的檔案傳輸透過網路進行。

透過網路傳輸檔案比本地傳輸具有更高的延遲和更低的頻寬。Docker Build Cloud 有幾個功能可以緩解這個問題

  • 它使用附加儲存卷作為構建快取,這使得讀寫快取非常快。
  • 將構建結果載入回客戶端時,只拉取與之前構建相比發生更改的層。

儘管有這些最佳化,對於大型專案或網路連線緩慢的情況下,遠端構建仍然可能導致上下文傳輸和映象載入緩慢。以下是一些最佳化構建以提高傳輸效率的方法

有關如何最佳化構建的更多資訊,請參閱構建最佳實踐

Dockerignore 檔案

使用.dockerignore 檔案,您可以明確指定不希望包含在構建上下文中的本地檔案。透過忽略檔案中指定的 glob 模式捕獲的檔案不會傳輸到遠端構建器。

您可能希望新增到 .dockerignore 檔案中的一些示例包括

  • .git — 跳過在構建上下文中傳送版本控制歷史記錄。請注意,這意味著您將無法在構建步驟中執行 Git 命令,例如 git rev-parse
  • 包含構建工件(例如二進位制檔案)的目錄。在開發過程中本地建立的構建工件。
  • 包管理器的供應商目錄,例如 node_modules

一般來說,您的 .dockerignore 檔案的內容應類似於您的 .gitignore 檔案。

精簡基礎映象

在 Dockerfile 的 FROM 指令中選擇更小的映象有助於減小最終映象的大小。Alpine 映象是一個最小 Docker 映象的很好例子,它提供了您對 Linux 容器期望的所有 OS 實用程式。

還有特殊的 scratch 映象,它完全不包含任何東西。例如,它對於建立靜態連結二進位制檔案的映象很有用。

多階段構建

多階段構建可以使您的構建執行更快,因為階段可以並行執行。它還可以使您的最終結果更小。以這樣一種方式編寫 Dockerfile,使最終執行時階段使用最小可能的基礎映象,只包含您的程式執行所需的資源。

還可以使用 Dockerfile 的 COPY --from 指令從其他映象或階段複製資源。這種技術可以減少最終階段的層數和這些層的大小。

在構建中獲取遠端檔案

在可能的情況下,您應該在構建中從遠端位置獲取檔案,而不是將檔案捆綁到構建上下文中。直接在 Docker Build Cloud 伺服器上下載檔案更好,因為它可能比透過構建上下文傳輸檔案更快。

您可以使用Dockerfile 的 ADD 指令,或在 RUN 指令中使用 wgetrsync 等工具,在構建期間獲取遠端檔案。

多執行緒工具

您在構建指令中使用的一些工具可能預設不利用多核。一個這樣的例子是 make,它預設使用單個執行緒,除非您指定 make --jobs=<n> 選項。對於涉及此類工具的構建步驟,請嘗試檢查您是否可以透過並行化來最佳化執行。