层缓存逐层比对,某一层变了,它后面所有层都得跟着重建。
所以先只复制依赖清单,装完依赖再复制源码,改代码就不会重装依赖。
COPY . 之前先写 .dockerignore,把 node_modules 排掉。
依赖安装层可以用 BuildKit 的缓存挂载,把包管理器缓存留在本机复用。
# 反例:任何源码改动都会让 npm ci 那一层失效
COPY . .
RUN npm ci
# 正例:依赖清单在前,源码在后
COPY package.json package-lock.json ./
RUN npm ci
COPY . .
# .dockerignore
node_modules
.git
*.log
dist
# BuildKit 缓存挂载(文件首行加 # syntax=docker/dockerfile:1)
RUN --mount=type=cache,target=/root/.npm npm ci
THE END






暂无评论内容