構建鏡像時,Docker將逐步Dockerfile執行您的指令, 并按指定的順序執行每個指令。在檢查每條指令時,Docker 會在其緩存中查找可重用的現有鏡像,而不是創建新的(重復的)鏡像。
如果根本不想使用緩存,則可以使用命令--no-cache=true 上的選項docker build。但是,如果您確實讓Docker使 用其緩存,那么了解何時可以找到匹配的鏡像,這一點很重要。Docker遵循的基本規則概述如下:
1.從已在緩存中的父鏡像開始,將下一條指令與從該基本鏡像派生的所有子鏡像進行比較,以查看是否其中一個是使用完全相同的指令構建的。如果不是,則高速緩存無效。
2.在大多數情況下,只需將中的指令Dockerfile與子鏡像之一進行比較就足夠了。但是,某些說明需要更多的檢查和解釋。
3.對于ADD和COPY指令,將檢查鏡像中文件的內容,并為每個文件計算一個校驗和。在這些校驗和中不考慮文件的最后修改時間和最后訪問時間。在緩存查找期間,將校驗和與現有鏡像中的校驗和進行比較。如果文件中的任何內容(例如內容和元數據)發生了更改,則緩存將無效。
4.除了ADD和COPY命令之外,緩存檢查不會查看容器中的文件來確定緩存是否匹配。例如,在處理RUN apt-get -y update命令時,不檢查容器中更新的文件以確定是否存在緩存命中。在這種情況下,僅使用命令字符串本身來查找匹配項。
緩存無效后,所有后續Dockerfile命令都會生成新鏡像,并且不使用緩存。








