2017-08-12 36 views
0

如果一個人從Dockerfile構建一個圖像,將置換2運行的指令:泊塢窗緩存置換運行的指令

  • 創建置換相同的緩存層以全新形象(新的哈希)?
  • 沒有創建新映像,因爲排列不會影響同一組運行指令的內部版本?通過RUN取代

RUN指令1指令
通過RUN取代 RUN指令2指令1

回答

0

如果PERMUT運行instuctions一個新的圖像將被創建。這裏有一個例子:

FROM alpine 

RUN echo abc 
RUN echo cdf 

運行docker image build -t image1 .然後置換的運行命令 和運行docker image build -t image2 .。你會發現image1和image2有不同的ID。

0

鑑於這個最小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/