每次使用 docker 构建前端应用镜像,如何解决 npm 依赖库每次重新 install 导致耗费时间问题?

技术四毛喵
  • 18

假设现在有一个前端的项目,需要下载 npm 依赖库才能运行。
每次使用 docker 去构建这个前端项目镜像时都需要在镜像里面下载依赖库,才能成功运行,这样会耗费大量的时间。
我知道有一种做法是先在本地去 npm install,然后再将 node_modules 文件夹 COPY 到镜像里面,但这显然也不是很有效的方法,毕竟 node_modules 的文件量巨大。
然后我到 stackoverflow 查到了有个解决方法(还没有成功验证过),链接里面有提到这几个关键点:

ADD package.json /tmp/package.json
RUN cd /tmp && npm install
RUN mkdir -p /opt/app && cp -a /tmp/node_modules /opt/app/

但是我完全看不懂这个是什么意思,ADD 一个 package.json 到 /tmp/ 目录,然后下载依赖,后面才能再 copy 整个项目过去?里面还有提到 docker 缓存层,但是哪里用到了 docker 缓存层了,是 /tmp/ 目录的作用?
我个人还没有深入了解过 docker,希望各位大佬能指导一下,请问如何解决每次构建镜像时,npm 依赖库都需要重新 install 问题?

回复
阅读 1.8k
1 个回答
✓ 已被采纳
每次使用 docker 去构建这个前端项目镜像时都需要在镜像里面下载依赖库,才能成功运行,这样会耗费大量的时间。

重点在“每次”。

按这个做法,只要你的 package.json 没有变化,那么只有第一次构建的时候会去下载依赖,以后的构建就不会再去下载依赖了,以为依赖(也就是这三行命令执行的结果)已经存在于 docker 的缓存里。

(package.json 变了还是会去重新下载的)

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
你知道吗?

宣传栏