2017-08-12 32 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/