我有一个Dockerfile,它在其上安装Ubuntu和一些软件包,然后继续使用这些软件包。假设我需要运行“ wget”命令,但忘了发布“ wget”软件包的安装。我将软件包添加到install命令,然后继续执行。但是,我必须重新开始-安装Ubuntu,安装软件包等,还是我?是否可以保存直到错误发生之前我所做的事情,然后从我修复之后的那一刻开始继续执行,而不是再次下载所有内容?
答案 0 :(得分:2)
有时对于此实例,您可能希望将构建细分为一系列图像。每个后续步骤都会在FROM命令中执行上一个步骤。
答案 1 :(得分:0)
只需指出David Maze的回答最适合我的情况:
任何时候任何更改,以后的步骤都不会被缓存。由于您拥有COPY。 / camera在Dockerfile的早期,如果源树中发生任何更改,则以下RUN apt-get ...将变得不可缓存。我会将其移至以后。
这是我在错误的地方放置COPY命令的原因,这确实很有意义-我在解决所需的文件之前复制了docker积累的所有内容,因此每次构建映像后,我都会在COPY之后结束执行所有指令。在按照David的建议将COPY移到下面之后,所有缓存的数据都在那里了。