【问题标题】:Why does my Docker build speed up if I change how I copy files? [duplicate]如果我更改了复制文件的方式,为什么我的 Docker 构建速度会加快? [复制]
【发布时间】:2021-05-01 06:46:56
【问题描述】:

我有一个 docker 文件,如下所示:

.
.
WORKING /app
COPY ..
RUN npm install
.
.

它运行良好,但每次构建都需要大量时间(超过 7 分钟)。经过一番研究,我明白我必须优化 Dockerfile 以便它使用 Cache。所以,我是这样写的:

.
.
WORKING /app
COPY package*.json .
RUN npm install
COPY ..
.
.

现在,它的构建速度要快得多(不到 1 分钟)。我的问题是“为什么”?


如果 Linux 在复制文件以覆盖它或从缓存中读取它时可以理解文件是否被修改,那么我预计 COPY ..COPY package*.json . 具有相同的行为。为什么只有COPY package*.json . 使用缓存?

【问题讨论】:

    标签: linux docker dockerfile


    【解决方案1】:

    docker 文件中的每一行都会生成一个新的“层”。 Docker 将保留所有这些层。如果您的目录中没有任何更改,则不需要运行COPY . .,因为它保存了上次运行时的图层。

    RUN npm install 需要一段时间,但它只会导致一个新状态如果您的依赖项发生了变化。 (您安装了一个新包,或更新了一个包)。

    如果COPY . . 需要重新运行(因为您更新了代码),那里的每一行也需要重新运行。因为您可能比依赖项更频繁地更改代码,所以提前安装依赖项是有意义的。

    如果你曾经添加一个新的 npm 包,你会看到 Docker 将从RUN npm install 开始重新运行每一行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-02
      • 1970-01-01
      • 1970-01-01
      • 2017-02-20
      • 1970-01-01
      • 1970-01-01
      • 2017-01-14
      • 1970-01-01
      相关资源
      最近更新 更多