docker 鏡像的多層次建構
緩存
dockerfile 順序
Docker在建構鏡像時會使用快取機制,如果某一層的指令沒有變化
dockerfile(較差)
由於copy 擺在前面,所以每當檔案有變動時,後面的安裝包就不會使用catch 去跑
1 |
|
dockerfile(較優)
此時 app即使有變動,前面的install 沒有變動所以可以自動使用catch,簡煥build 時間
1 |
|
dockerfile(強制不使用緩存)
透過隨機的 ARG 標籤來達到強制重新安裝的效果
1 |
|
.dockerignore
Docker Build Contex
Docker build context 是指在建構 Docker 鏡像時,Docker Daemon 所使用的檔案和目錄的上下文(context)。這個上下文包括 Dockerfile 所在的目錄以及其下的所有檔案和子目錄。當執行 docker build
指令時,這個上下文將被傳送到 Docker Daemon,以便在建構過程中使用
如果其中包含了不必要的檔案就會造成建構變慢,因此就會需要使用 dockerignore 來減少傳入的檔案
dockerignore
用來指定在建構 Docker 鏡像時應該被排除的檔案和目錄,會有以下常見應用
減少上下文大小
在一個大型應用程式的項目中,只將 Dockerfile 所需的檔案包含在上下文中,並使用 .dockerignore 來排除不必要的檔案,這樣可以大幅減小上下文的大小,提高建構效能。
保護隱私
如果在項目中包含了敏感資訊(例如密碼、私鑰等),通過 .dockerignore 可以確保這些敏感資訊不被包含在上下文中,從而防止它們洩漏到 Docker Daemon。
提高網路效能
當上下文較大時,建構鏡像可能需要將大量數據傳輸到 Docker Daemon。通過減小上下文的大小,可以減少網絡流量,尤其對於遠程 Docker Daemon 更為重要。
範例
1 |
|
docker 鏡像的多層次建構
https://shengshengyang.github.io/2024/01/03/docker-img-build-tips/