可以是泊坞层"绕过"在构建?

时间:2017-10-25 11:21:49

标签: image docker dockerfile layer tweak

让我们有一个像这样的Dockerfile:

Transformers.toJson(new Jackson2JsonObjectMapper(objectMapper))

我想把wget语句,一个新的RUN语句。在此更改之后,当我重建时,它将重新运行从我的修改到down的所有命令,因此wget将再次执行。问题是wget命令需要花费很多时间才能完成,因为在我的真实文件中,文件是一个非常大的文件。

问题是,可以是码头工具"调整"某处为了避免再次构建wget图层的执行?如果我已经构建了它,是否可以再次使用该层,甚至更改它上面的语句?

谢谢。

2 个答案:

答案 0 :(得分:2)

AFAIK这是不可能的,因为docker只会在您更改之前重新使用这些图层,并从那里开始再次构建。

这是因为新图层会在之前构建的图层上进行测试(因此您的RUN wget图层会在FROMRUN apt install -y wget的图层上进行测试和构建。因此,如果您在RUN指令上方输入另一条RUN wget指令,则会为RUN wget指令获得更改的环境,因此需要再次执行。

我认为没有办法手动操作它,所以它会重用在“不同”环境中构建的层,我也不会推荐它。

答案 1 :(得分:1)

使用docker-compose或运行docker run时的-v标志,可以装载在运行之间保持不变的卷。将您的wget更改为在没有文件的情况下有条件地运行的脚本。

这不会缓存后者,但会使这一步更快。

您可能需要修改存储该文件的文件夹,具体取决于脚本的其余部分以及环境的设置方式。

我在这里使用compose进行音量安装:https://github.com/jaydorsey/ghgvcR/blob/master/docker-compose.yml

查看该repo中的bin / download-files.sh文件以获取bash示例。