最新消息:

nodejs在docker环境进行npm install的缓存问题

IT技术 ipcpu 55浏览 0评论

nodejs在docker环境的缓存问题.md

一、遇到的问题

原先我们的nodejs运行在虚拟机环境下,CICD也是在虚拟机环境下,现在进行容器化改造,发现我们的npm install 执行时间太长了,一个很小的项目,原本几分钟就完成的任务,在gitlab dind环境下,需要三四十分钟,实在是太慢了。

二、缓存调研

经过查找相关资料,我们发现,npm在本地环境留有缓存,如果匹配上缓存,优先使用缓存。
缓存目录位置可以通过以下命令查询

npm config get cache

如何使用这些缓存,我们优先想到的是将gitlab主机缓存目录映射到docker容器,这样多运行几次node项目,gitlab主机缓存目录就会被填满。
但是我们使用的是gitlab DinD环境,直接映射本地目录是行不通的,因此我们选择将缓存目录直接打到镜像里, 编译时间控制在了10分钟以内。

# build stage
FROM reg.ipcpu.com/jenkins/node:10.16.0-withcache as build-stage
WORKDIR /app
COPY package*.json /app
RUN npm install
COPY / /app
RUN cp  .env.production  /app/.env
RUN npm run build:prod

# production stage
FROM nginx:stable-alpine as production-stage
COPY --from=build-stage /app/dist /usr/share/nginx/html
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]

三、缓存镜像如何维护?

目前想到的办法,定期获取gitlab里CICD活跃top10 项目,
在空白虚机环境进行npm install ,然后打包缓存目录,合并到docker镜像。
为什么不直接用docker,npm install 很多时候连接github等网络容易中断,在虚拟机环境下更容器处理这样的异常情况,此时使用docker 反而会增加人工调试成本。

四、DinD改成DooD?

确实有着想法,目前来看,以效率优先的原则,我们后续可能会选择DooD。

转载请注明:IPCPU-网络之路 » nodejs在docker环境进行npm install的缓存问题

发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址