Image 可以是docker层“;绕过;在建?
让我们假设我有这样一个Dockerfile:Image 可以是docker层“;绕过;在建?,image,docker,dockerfile,layer,tweak,Image,Docker,Dockerfile,Layer,Tweak,让我们假设我有这样一个Dockerfile: FROM debian:stretch RUN apt update RUN apt install -y wget RUN wget https://stackoverflow.com/ # I know the wget is useless. Is just an example :) CMD ["echo", "hello-world"] 我想在wget语句上加上一个新的RUN语句。在这个更改之后,当我重建时,它将重新运行从修改到关闭
FROM debian:stretch
RUN apt update
RUN apt install -y wget
RUN wget https://stackoverflow.com/
# I know the wget is useless. Is just an example :)
CMD ["echo", "hello-world"]
我想在wget语句上加上一个新的RUN语句。在这个更改之后,当我重建时,它将重新运行从修改到关闭的所有命令,因此wget将再次执行。问题是wget命令需要花费很多时间才能完成,因为在我的真实文件中,该文件是一个非常大的文件
问题是,docker是否可以在某个地方进行“调整”,以避免再次构建wget层的执行?如果我已经构建了它,那么即使在上面更改了一条语句,该层也可以再次使用吗
谢谢。AFAIK这是不可能的,因为docker只会重复使用图层,直到您进行更改,然后从那里开始重新构建 这是因为新层将在以前构建的层上进行测试(因此您的
运行wget
层将在从到运行apt安装-y wget
的层上进行测试和构建)。因此,如果在RUN wget
指令上方输入另一条RUN
指令,则RUN wget
指令的环境会发生变化,因此需要再次执行该指令
我不认为有办法手动处理它,这样它就可以重用在“不同”环境中构建的层,我也不推荐它。使用docker compose,或者在运行docker run时使用-v标志
可以装载一个在两次运行之间保持的卷。将wget更改为在没有文件的情况下有条件运行的脚本
这不会缓存后面的数据,但会加快这一步
根据脚本的其余部分以及环境的设置方式,您可能需要修改存储该文件的文件夹
我在这里使用compose进行卷装载:
查看该repo中的bin/download-files.sh文件,了解bash示例