最佳化 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
命令,例如wget
、curl
或rsync
多執行緒工具
一些構建工具,例如 make
,預設是單執行緒的。如果工具支援,請將其配置為並行執行。例如,使用 make --jobs=4
同時執行四個作業。
利用雲中可用的 CPU 資源可以顯著縮短構建時間。