針對雲端建置進行最佳化

Docker Build Cloud 會在遠端執行您的建置,而非在您觸發建置的機器上執行。這意味著用戶端與建置器之間的檔案傳輸是透過網路進行的。

透過網路傳輸檔案的延遲較高,頻寬也比本地傳輸低。Docker Build Cloud 具備多項功能來減輕此影響:

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

儘管有這些最佳化措施,對於大型專案或網路連線緩慢的情況,遠端建置仍可能導致上下文(context)傳輸與映像檔載入速度緩慢。以下是一些您可以優化建置以提高傳輸效率的方法:

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

Dockerignore 檔案

使用 .dockerignore 檔案,您可以明確指定不想包含在建置上下文中的本地檔案。符合您在忽略檔案中指定之 Glob 模式的檔案,將不會被傳輸到遠端建置器。

以下是您可能希望新增至 .dockerignore 檔案中的一些範例:

  • .git — 跳過傳送版本控制歷史記錄至建置上下文。請注意,這意味著您將無法在建置步驟中執行 Git 指令(例如 git rev-parse)。
  • 包含建置產物(例如二進位檔案)的目錄。在開發過程中本地產生的建置產物。
  • 套件管理員的廠商目錄(Vendor directories),例如 node_modules

通常,您的 .dockerignore 檔案內容應與 .gitignore 檔案中的內容相似。

精簡基礎映像檔

為 Dockerfile 中的 FROM 指令選擇更小的映像檔,有助於減少最終映像檔的大小。Alpine 映像檔是一個極佳的精簡 Docker 映像檔範例,它提供了您預期從 Linux 容器獲得的所有作業系統公用程式。

還有特殊的 scratch 映像檔,它完全不包含任何內容,適用於建立靜態連結二進位檔案的映像檔等用途。

多階段建置

多階段建置(Multi-stage builds)可以加快建置速度,因為各階段可以並行執行。這也能縮小最終結果的大小。撰寫 Dockerfile 時,請確保最終執行階段使用儘可能小的基礎映像檔,且僅包含程式執行所需的資源。

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

在建置期間擷取遠端檔案

若有可能,應在建置期間從遠端位置擷取檔案,而不是將檔案捆綁到建置上下文中。直接在 Docker Build Cloud 伺服器上下載檔案效果更好,因為這通常會比透過建置上下文傳輸檔案更快。

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

多執行緒工具

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

© . This site is unofficial and not affiliated with Kubernetes or Docker Inc.