針對在雲端建置進行最佳化

Docker Build Cloud 遠端執行您的建置,而不是在您叫用建置的機器上執行。這表示用戶端和建置器之間的檔案傳輸是透過網路進行的。

透過網路傳輸檔案的延遲較高,且頻寬低於本機傳輸。Docker Build Cloud 有幾項功能可以減輕這種情況

  • 它使用附加的儲存磁碟區來存放建置快取,這使得讀取和寫入快取非常快速。
  • 將建置結果載回用戶端只會提取與先前建置相比已變更的層。

儘管進行了這些最佳化,遠端建置仍然可能導致大型專案或網路連線速度緩慢時,內容傳輸和映像檔載入速度緩慢。以下是一些您可以最佳化建置以提高傳輸效率的方法

如需如何最佳化建置的詳細資訊,請參閱建置最佳實務

Dockerignore 檔案

使用 .dockerignore 檔案,您可以明確指定您不想包含在建置環境中的本機檔案。您在 ignore 檔案中指定的 glob 模式所擷取的檔案不會傳輸到遠端建置器。

您可能想要新增至 .dockerignore 檔案的一些範例如下

  • .git — 跳過在建置環境中傳送版本控制記錄。請注意,這表示您將無法在建置步驟中執行 Git 命令,例如 git rev-parse
  • 包含建置構件的目錄,例如二進位檔。在開發期間在本機建立的建置構件。
  • 套件管理器的廠商目錄,例如 node_modules

一般來說,您的 .dockerignore 檔案的內容應該與您在 .gitignore 中的內容類似。

精簡基礎映像檔

在 Dockerfile 中的 FROM 指令中選擇較小的映像檔可以幫助減少最終映像檔的大小。Alpine 映像檔特殊的 scratch 映像檔多階段建置

多階段建置可以讓您的建置執行得更快,因為階段可以平行執行。它也可以讓您的最終結果更小。以最終執行階段使用盡可能小的基礎映像檔的方式撰寫您的 Dockerfile,其中只包含您的程式執行所需的資源。

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

在建置中擷取遠端檔案

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

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

多執行緒工具

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