Docker build 使用缓存来加速构建过程,它通过记录每个构建步骤的中间状态来实现。当相同的构建层被多次使用时,Docker 可以直接从缓存中获取结果,而不需要重新执行该步骤。以下是一些建议,可以帮助您更好地利用 Docker 缓存:
-
保持镜像层稳定:尽量确保构建过程中使用的镜像层稳定且不经常更改。这样,当您再次构建相同的镜像时,Docker 可以重用这些稳定的层。
-
使用多阶段构建:Docker 支持多阶段构建,它允许您在两个或多个构建阶段之间共享镜像层。这样,您可以将构建过程中不经常更改的部分放在一个阶段,而将经常更改的部分放在另一个阶段。这可以减少缓存的失效次数,从而提高构建速度。
示例:
# 第一阶段:编译和安装依赖 FROM node:14 AS builder WORKDIR /app COPY package*.json ./ RUN npm install COPY . . RUN npm run build # 第二阶段:创建最终镜像 FROM node:14-alpine WORKDIR /app COPY --from=builder /app/dist /usr/share/nginx/html COPY --from=builder /app/node_modules /usr/local/lib/node_modules EXPOSE 80 CMD ["npm", "start"]
-
利用 .dockerignore 文件:在构建之前,创建一个
.dockerignore
文件,列出不需要复制到镜像中的文件和目录。这样可以减少构建过程中的层数,从而提高缓存利用率。 -
合理组织 Dockerfile:将构建过程中相关的命令分组在一起,以便 Docker 可以更有效地利用缓存。例如,将所有与依赖安装相关的命令放在一个 RUN 指令中,而不是将其分散在多个 RUN 指令中。
-
使用
--cache-from
和--cache-policy
选项:在构建时,可以使用--cache-from
选项指定要从哪些镜像中获取缓存,以及使用--cache-policy
选项指定缓存策略。例如,您可以使用--cache-from=builder
从上一个构建阶段获取缓存,或者使用--cache-policy=max-age=24h
设置缓存的最大年龄为 24 小时。 -
避免频繁更改基础镜像:尽量使用稳定且不经常更改的基础镜像,例如官方的 Node.js、Python 或 Alpine 镜像。这样可以减少缓存失效的次数,从而提高构建速度。
通过遵循这些建议,您可以充分利用 Docker 缓存来加速构建过程。