【问题标题】:Force step to be cached in Dockerfile强制步骤缓存在 Dockerfile 中
【发布时间】:2019-10-05 06:40:18
【问题描述】:

假设我在 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

【问题讨论】:

  • Docker 会尽可能使用缓存,除非你明确docker build --no-cache。这个提议的选项会做什么?
  • 这将强制使用缓存 - 如果前面的步骤发生变化,docker 将关闭缓存
  • 我认为没有办法做到这一点。在需要缓存指令后放置更改的指令

标签: docker dockerfile docker-build


【解决方案1】:

Docker 的层缓存本质上是说“如果我从图像 01234567 和RUN some command 开始,那么我将得到图像 2468ace0”。如果发生了一些变化,而您现在有了图像 13579bdf,那么除了再次运行该命令之外,没有其他方法可以将其短路。

有几种方法可以帮助缓解这种情况:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-02
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 2017-09-27
    • 1970-01-01
    • 2018-11-15
    • 2014-12-23
    相关资源
    最近更新 更多