让我们有一个像这样的Dockerfile:
Transformers.toJson(new Jackson2JsonObjectMapper(objectMapper))
我想把wget语句,一个新的RUN语句。在此更改之后,当我重建时,它将重新运行从我的修改到down的所有命令,因此wget将再次执行。问题是wget命令需要花费很多时间才能完成,因为在我的真实文件中,文件是一个非常大的文件。
问题是,可以是码头工具"调整"某处为了避免再次构建wget图层的执行?如果我已经构建了它,是否可以再次使用该层,甚至更改它上面的语句?
谢谢。
答案 0 :(得分:2)
AFAIK这是不可能的,因为docker只会在您更改之前重新使用这些图层,并从那里开始再次构建。
这是因为新图层会在之前构建的图层上进行测试(因此您的RUN wget
图层会在FROM
到RUN 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示例。