创建Dockerfile - docker在每个新构建时从头开始

时间:2014-11-16 12:14:27

标签: docker dockerfile

我正在尝试构建一个dockerfile - 迭代添加行和测试。我的理解是,docker将缓存已经构建的行,并从我添加的新行开始。这个案例似乎是每次我在我的容器上调用build时它都是从头开始构建的。这是正常的吗?如果不是 - 我做错了什么?

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

正如demas所说,如果你只是简单地附加行,那么前面的行将被缓存。

但是,如果你的Dockerfile中有任何地方你有一行像

ADD . /some/path

然后Docker将假设该行已更改,即使它只是更改的Dockerfile。因此,除非您添加的文件夹中的 nothing 已更改,否则该行及其后的任何内容将永远不会被缓存。

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

作为旁注:这样做的结果是,如果您正在构建Dockerfile,您通常希望尽可能晚地在目录中添加文件,事先做好任何准备工作。当然,你最终不得不对你的文件做一些事情(比如某种构建过程),遗憾的是很难缓存。