内容提要
最近准备将部署在Cloudfalre、Vercel和Netlify上的项目迁移到自己的VPS上通过Docker运行。研究了一下Node.js项目Docker镜像最小化打包方案,将镜像大小从1.06GB缩小到了135MB。主要思路是使用Alpine Linux镜像、多层构建和将node_modules内联进JavaScript文件。这样可以减小镜像大小并提高构建速度。
关键要点
-
准备将部署在Cloudflare、Vercel和Netlify上的项目迁移到自己的VPS上通过Docker运行。
-
研究Node.js项目Docker镜像最小化打包方案,将镜像大小从1.06GB缩小到135MB。
-
使用Alpine Linux镜像、多层构建和将node_modules内联进JavaScript文件来减小镜像大小并提高构建速度。
-
第0版使用node:lts-alpine基础镜像,打包体积为1.06GB。
-
第1版通过多层构建方案将镜像大小缩小到306MB,但需要明确指定生产依赖。
-
第2版将node_modules内联进JavaScript文件,最终镜像大小缩小到135MB。
-
最终对比显示,体积从1.06GB降低到135MB,构建时间从113.8秒降低到24.9秒。
-
示例项目是开源的,可以在GitHub查看。
延伸问答
如何将Node.js项目的Docker镜像大小从1.06GB缩小到135MB?
通过使用Alpine Linux镜像、多层构建和将node_modules内联进JavaScript文件,可以将镜像大小缩小到135MB。
使用Alpine Linux镜像有什么好处?
使用Alpine Linux镜像可以显著减小Docker镜像的体积,提高构建速度。
多层构建方案的缺点是什么?
多层构建方案需要明确指定生产依赖,如果未指定,运行时可能会报错。
最终的Docker镜像构建时间减少了多少?
最终的Docker镜像构建时间从113.8秒减少到24.9秒。
如何将node_modules内联进JavaScript文件?
可以在Vite的配置中设置ssr.noExternal为true,以实现将node_modules内联进JavaScript文件。
示例项目在哪里可以找到?
示例项目是开源的,可以在GitHub上查看。