最佳化 Docker Offload 的使用
Docker Offload 會在遠端執行您的建置作業,而不是在您發起建置的本機機器上執行。這意味著檔案必須透過網路從您的本機系統傳輸到雲端。
與本機傳輸相比,透過網路傳輸檔案會帶來更高的延遲和較低的頻寬。為了減少這些影響,Docker Offload 包含了一些效能最佳化功能:
- 它使用附加的儲存體磁碟區作為建置快取,這使得快取的讀取和寫入速度非常快。
- 當將建置結果提取回您的本機機器時,它只會傳輸自上次建置以來發生變更的層。
即便有了這些最佳化,大型專案或較慢的網路連線仍可能導致更長的傳輸時間。以下是針對 Docker Offload 最佳化建置設定的幾種方法:
關於通用的 Dockerfile 建議,請參閱建置最佳實踐。
dockerignore 檔案
.dockerignore 檔案可讓您指定哪些本機檔案「不」應包含在建置內容(build context)中。被這些模式排除的檔案在建置過程中不會被上傳到 Docker Offload。
通常需要忽略的項目:
.git– 避免傳輸您的版本歷史記錄。(注意:您將無法在建置過程中執行git指令。)- 建置產物或本機產生的二進位檔。
- 依賴項資料夾,例如
node_modules(如果這些是在建置過程中還原的)。
經驗法則上,您的 .dockerignore 應該與您的 .gitignore 相似。
精簡基礎映像檔
在 FROM 指令中使用較小的基礎映像檔可以減少最終映像檔的大小並提升建置效能。alpine 映像檔就是最小化基礎映像檔的一個好例子。
對於完全靜態的二進位檔,您可以使用 scratch,這是一個空的基礎映像檔。
多階段建置
多階段建置(Multi-stage builds)讓您可以在 Dockerfile 中區分建置時期與執行時期的環境。這不僅能減少最終映像檔的大小,還允許在建置過程中執行並行的階段。
使用 COPY --from 從較早的階段或外部映像檔複製檔案。這種方法有助於最小化不必要的層並減少最終映像檔的大小。
在建置期間取得遠端檔案
若有可能,請在建置過程中直接從網際網路下載大型檔案,而不是將它們封裝在您的本機環境內容中。這可以避免從您的用戶端到 Docker Offload 的網路傳輸。
您可以透過以下方式實現:
- Dockerfile 的
ADD指令 - 使用
wget、curl或rsync等RUN指令
多執行緒工具
某些建置工具(例如 make)預設是單執行緒的。如果工具支援,請將其設定為並行執行。例如,使用 make --jobs=4 來同時執行四個工作。
利用雲端中可用的 CPU 資源可以顯著改善建置時間。