创buildDockerfile – docker在每个新版本上从头开始

我正在尝试构build一个dockerfile – 迭代地添加行和testing。 我的理解是,docker工人将caching已经build成的线,并从我添加的新线开始。 这种情况似乎是,每次我打电话给我的容器时,它都是从零开始构build的。 这是正常的吗? 如果不是 – 我做错了什么?

正如demas所说,如果你只是追加行,以前的行将被caching。

但是,如果您的Dockerfile中有任何地方有类似的行

ADD . /some/path 

那么Doc​​ker会认为即使只有Dockerfile发生了变化,该行也会发生变化。 所以这行和任何后面的东西永远不会被caching,除非你添加的文件夹中没有改变。

您应该能够密切关注docker build命令的输出来了解是否发生了这种情况。

作为一个方面说明:这样做的结果是,如果你正在构build一个Dockerfile,你通常希望尽可能晚地添加目录中的文件,事先做好准备。 当然,你最终不得不对你的文件做些事情(比如某种构build过程),这个过程不幸很难被caching。

如果我理解正确,可以将Docker看作版本控制系统,Dockerfile中的每一行都是对容器的提交。

如果你添加新的行到你的Dockerfile,Docker获取容器的最后一个版本,并提交一个新的提交。 如果你在Dockerfile的中间添加一行,Docker会得到一个以前的修订版本,并对树的这个部分进行新的提交。