3

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

4

2 回答 2

1

正如 demas 所说,如果您只是附加行,则将缓存先前的行。

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

ADD . /some/path

然后 Docker 将假定该行已更改,即使仅更改了 Dockerfile。因此,除非您要添加的文件夹中没有任何内容发生更改,否则该行及其之后的任何内容都不会被缓存。

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

附带说明:这样做的结果是,如果您正在构建 Dockerfile,您通常希望尽可能晚地将文件添加到目录中,并提前做好任何准备工作。当然,你最终将不得不对你的文件做一些事情(比如某种构建过程),不幸的是这很难缓存。

于 2014-11-16T12:28:42.847 回答
1

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

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

于 2014-11-16T12:23:04.383 回答