强制将步骤缓存在Dockerfile中

时间:2019-05-17 23:34:56

标签: docker dockerfile docker-build

说我在Dockerfile中有这样一行:

RUN git fetch origin my_branch
RUN pip install -r requirements.txt

有没有一种方法可以迫使docker对这些行使用缓存?像这样:

FORCE-CACHE-ON
RUN git fetch origin my_branch
RUN pip install -r requirements.txt
CACHE-OFF

1 个答案:

答案 0 :(得分:1)

Docker的层缓存基本上说:“如果我从映像01234567开始,RUN some command,那么我将得到映像2468ace0”。如果发生了什么变化,而您现在有了映像13579bdf,则除了再次运行命令外,无法将其短路。

有两种方法可以缓解这种情况:

  • 在Dockerfile的早期运行实际上不依赖于应用程序代码的重量级命令。 RUN apt-get install之前COPY .
  • 最大程度地减少一幅图像中的内容。请勿尝试将具有冗长构建的两个单独的应用程序放在同一张图片中。
  • 使用多阶段构建,其中每个阶段都可以独立利用缓存,并且您在最终映像中将拥有相对便宜的COPY
  • 在主机上预编译序列的某些部分,然后将结果COPY放入映像,而不是RUN lengthy-install。 (在进行多阶段构建之前,这是一项非常有用的技术,并且仍然有意义。)