docker 中的最佳层缓存

时间:2021-03-18 14:15:27

标签: docker

我想知道以下用例。让我们想象以下 docker 镜像(使用伪命令):

FROM base
RUN build_and_install packageA-1.1 --into /opt/packageA
RUN build_and_install packageB-2.3 --into /opt/packageB

我们可以尝试优化命令的顺序,但主要缺陷仍然存在:升级第一个包将不允许我们使用第二个缓存层,因此我们需要重建第二个。

>

这可以通过多阶段构建部分解决:

FROM base AS a
RUN build_and_install packageA-1.1 --into /opt/packageA

FROM base AS b
RUN build_and_install packageB-2.3 --into /opt/packageB

FROM base
COPY --from=a /opt/packageA /opt/packageA
COPY --from=b /opt/packageB /opt/packageB

我相信这将在持续时间方面发挥最佳效果,但我认为就存储空间而言,它仍然是次优的(并且比第一个解决方案更糟糕)。我假设 COPY 创建的图层与其来源无关 - 如果我错了,请纠正我,因为这回答了我的问题。

我很清楚,很难为这个问题制定一个通用的解决方案 - 预测层是独立的,即使是一些简单的情况也需要复杂的启发式方法来处理。

但同时对于人类来说,在上面的例子中很明显,这两个层是独立的,可以独立缓存和应用,没有一个包在两个不同的缓存层中。是否有任何解决方案可以让我以这种方式描述 docker 图像?或者这个用例完全不受支持?

0 个答案:

没有答案