我们知道每次构建 node 相关的镜像时,安装依赖性是很慢的,但如果每次构建新的版本时能够复用上一次的版本,则形成增量的更新,将有效提升镜像构建的效率。
例如镜像haha/xyz-deps:1.0 以镜像 haha/xyz-base:soft 为基
FROM heiheihei.com/haha/xyz-base:soft as builder
WORKDIR /usr/app/
# Install node_modules
# Special treatment
RUN --mount=type=cache,target=/root/.npm npm i --noproxy=haha.com --no-save --ignore-scripts=false https://registry.hahaha.com/something/-/something-0.0.1.tgz
ADD package.json package-lock.json .npmrc ./
# others
RUN --mount=type=cache,target=/root/.npm npm i
RUN node -v
则通过 docker build 构建得到了镜像 haha/xyz-deps:1.0.
而后续更新了 package.json 之类的 npm 相关的依赖项以后,欲构建更新的 haha/xyz-deps:1.1 则可以以 haha/xyz-deps:1.0 为基,如此则可以复用 haha/xyz-deps:1.0 中已有的 node_modules 项目,构建速度的提升将十分的显著。
新的 Dockerfile
# FROM heiheihei.com/haha/xyz-base:soft as builder
FROM heiheihei.com/haha/xyz-deps:1.0
WORKDIR /usr/app/
# Install node_modules
# Special treatment
RUN --mount=type=cache,target=/root/.npm npm i --noproxy=haha.com --no-save --ignore-scripts=false https://registry.hahaha.com/something/-/something-0.0.1.tgz
ADD package.json package-lock.json .npmrc ./
# others
RUN --mount=type=cache,target=/root/.npm npm i
RUN node -v
不妨一试,仅供参考。

