docker 緩存

docker 緩存

官方地址: https://docs.docker.com/develop/develop-images/dockerfile_best-practices/
官方的中文直譯如下:

在構建映像時,Docker將逐步Dockerfile執行您的指令, 並按指定的順序執行每個指令。在檢查每條指令時,Docker會在其緩存中查找可重用的現有映像,而不是創建新的(重複的)映像。

如果根本不想使用緩存,則可以使用命令--no-cache=true 上的選項docker build。但是,如果您確實允許Docker使用其緩存,那麼瞭解何時可以找到匹配的映像非常重要。Docker遵循的基本規則概述如下:

從已在緩存中的父映像開始,將下一條指令與從該基本映像派生的所有子映像進行比較,以查看是否其中一個是使用完全相同的指令構建的。如果不是,則高速緩存無效。

在大多數情況下,只需將中的指令Dockerfile與子圖像之一進行比較就足夠了。但是,某些說明需要更多的檢查和解釋。

對於ADD和COPY指令,將檢查圖像中文件的內容,併爲每個文件計算一個校驗和。在這些校驗和中不考慮文件的最後修改時間和最後訪問時間。在高速緩存查找期間,將校驗和與現有映像中的校驗和進行比較。如果文件中的任何內容(例如內容和元數據)發生了更改,則緩存將無效。

除了ADD和COPY命令之外,緩存檢查不會查看容器中的文件來確定緩存是否匹配。例如,在處理RUN apt-get -y update命令時,不檢查容器中更新的文件以確定是否存在緩存命中。在這種情況下,僅使用命令字符串本身來查找匹配項。

一旦緩存無效,所有後續Dockerfile命令都會生成新映像,並且不使用緩存。

大概可以歸爲以下兩點:

  1. 除了add和copy指令, 其他指令只會做指令層面的比較,指令一樣就視爲緩存有效.例如 yum install nginx 緩存的鏡像層的指令也是 yum install nginx 這兩個指令一樣說明緩存沒問題.
  2. add和copy除了檢查指令是否一樣,還會檢查文件的校驗和,進行對比檢驗和,一樣說明緩存沒問題.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章