如果一個人從Dockerfile構建一個圖像,將置換2運行的指令:泊塢窗緩存置換運行的指令
- 創建置換相同的緩存層以全新形象(新的哈希)?
- 沒有創建新映像,因爲排列不會影響同一組運行指令的內部版本?通過RUN取代
RUN指令1指令
通過RUN取代 RUN指令2指令1
如果一個人從Dockerfile構建一個圖像,將置換2運行的指令:泊塢窗緩存置換運行的指令
RUN指令1指令
通過RUN取代 RUN指令2指令1
如果PERMUT運行instuctions一個新的圖像將被創建。這裏有一個例子:
FROM alpine
RUN echo abc
RUN echo cdf
運行docker image build -t image1 .
然後置換的運行命令 和運行docker image build -t image2 .
。你會發現image1和image2有不同的ID。
鑑於這個最小Dockerfile:
FROM busybox
RUN echo text1 > file1
RUN echo text2 > file2
當你運行:
docker build . -t my-image
docker inspect my-image
然後你得到:
"RootFS": {
"Type": "layers",
"Layers": [
"sha256:08c2295a7fa5c220b0f60c994362d290429ad92f6e0235509db91582809442f3",
"sha256:2ce4cb064fd2dc11c0b6fe08ffed6364478f6de0a1ac115d8aa01005b4c2921a",
"sha256:b4f880ce3a2172db2a614faf516c172d1e205bbf293daaee0174c4a5bd93d5f3"
]
}
現在用置換指令重試,建立和檢查圖像你會得到:
"RootFS": {
"Type": "layers",
"Layers": [
"sha256:08c2295a7fa5c220b0f60c994362d290429ad92f6e0235509db91582809442f3",
"sha256:812b39039b60290f4aa193d8f8bf03fbd13020dd5cfa6e6638feb68dac72cf9c",
"sha256:451c384fb837aa70e446a36d3571123144cb497a42819b7a30348e7d49b24a0b"
]
}
注意: 如果您的命令不修改文件系統,例如RUN echo text
你的圖片只有一層sha256:08c2295a7fa5c220b0f60c9943 62d290429ad92f6e0235509db91582809442f3
,代表空FS。
結論:創建 不僅是一個新的形象,而且還新層(即新的形象不只是現有圖層的重新排序列表)。這可能是因爲該圖層不僅包含內容,還包含其父散列。
有關更多詳細信息,請參閱http://windsock.io/explaining-docker-image-ids/。