最佳化 Docker Offload 使用

Docker Offload 在遠端執行您的構建,而不是在您呼叫構建的機器上。這意味著檔案必須透過網路從您的本地系統傳輸到雲端。

與本地傳輸相比,透過網路傳輸檔案會帶來更高的延遲和更低的頻寬。為了減少這些影響,Docker Offload 包含了幾項效能最佳化:

  • 它使用附加儲存卷作為構建快取,這使得讀寫快取速度很快。
  • 將構建結果拉回本地機器時,它只傳輸自上次構建以來發生更改的層。

即使進行了這些最佳化,大型專案或較慢的網路連線仍可能導致更長的傳輸時間。以下是最佳化 Docker Offload 構建設定的幾種方法:

有關 Dockerfile 的一般提示,請參閱構建最佳實踐

dockerignore 檔案

.dockerignore 檔案讓您可以指定哪些本地檔案不應包含在構建上下文中。在構建過程中,這些模式排除的檔案將不會上傳到 Docker Offload。

通常要忽略的專案:

  • .git – 避免傳輸您的版本歷史。(注意:您將無法在構建中執行 git 命令。)
  • 構建工件或本地生成的二進位制檔案。
  • 依賴資料夾,例如 node_modules,如果這些在構建過程中恢復。

根據經驗,您的 .dockerignore 應該類似於您的 .gitignore

精簡基礎映象

FROM 指令中較小的基礎映象可以減小最終映象大小並提高構建效能。alpine 映象是最小化基礎的一個很好的例子。

對於完全靜態的二進位制檔案,您可以使用scratch,這是一個空的基礎映象。

多階段構建

多階段構建允許您在 Dockerfile 中分離構建時和執行時環境。這不僅可以減小最終映象的大小,還可以在構建過程中並行執行階段。

使用 COPY --from 從早期階段或外部映象複製檔案。這種方法有助於最大程度地減少不必要的層並減小最終映象大小。

在構建中獲取遠端檔案

如果可能,請在構建本身期間從網際網路下載大檔案,而不是將它們捆綁在您的本地上下文中。這可以避免客戶端到 Docker Offload 的網路傳輸。

您可以使用以下方式完成此操作:

  • Dockerfile ADD 指令
  • RUN 命令,例如 wgetcurlrsync

多執行緒工具

一些構建工具,例如 make,預設是單執行緒的。如果工具支援,請將其配置為並行執行。例如,使用 make --jobs=4 同時執行四個作業。

利用雲中可用的 CPU 資源可以顯著縮短構建時間。