docker image 滚动构建法

我们知道每次构建 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

不妨一试,仅供参考。

关于本文如您有任何想法和意见,欢迎与我们联系,邮箱地址zhi@uqugu.com
您对本文有什么看法,喜欢或者不喜欢都可以发表意见。