当前位置: 首页 > 后端技术 > Node.js

如何将Node.js Docker镜像大小减小10倍

时间:2023-04-03 18:50:14 Node.js

如何将Node.jsDocker镜像大小减少10倍Docker易于使用,但一旦应用程序开始扩展,图像大小就会呈指数级增长。一般情况下,应用程序的Node.jsdocker镜像大小在大多数情况下超过1GB。为什么图像大小很重要更大的docker图像需要更多空间,这意味着成本增加。更长的构建时间——通过网络推送图像需要更长的时间,并导致CI??管道延迟。让我们开始优化这是一个使用VueJS应用程序构建的演示应用程序。这是初始的Dockerfile。从节点:10WORKDIR/appCOPY。/appEXPOSE8080RUNnpminstallhttp-server-gRUNnpminstall&&npmrunbuildCMDhttp-server./dist这个镜像的大小是1.34GB:下面开始一步步优化。1:使用多阶段Docker构建多阶段构建可以通过在单个Dockerfile中使用多个中间图像来轻松优化Docker图像。在这里了解更多。通过使用多阶段构建,我们可以在构建镜像中安装所有依赖项,并将它们复制到瘦运行时镜像中。FROMnode:10ASBUILD_IMAGEWORKDIR/appCOPY。/appEXPOSE8080RUNnpminstall&&npmrunbuildFROMnode:10WORKDIR/app#从构建镜像复制--from=BUILD_IMAGE/app/dist./distCOPY--from=BUILD_IMAGE/app/node_modules。/node_modulesRUNnpmi-ghttp-serverCMDhttp-server./dist这个镜像的大小现在是1.24GB:2:删除开发依赖,使用NodePrune工具删除不需要的文件。通常在生产环境中根本不需要Npm包中的测试文件、markdown文件、类型文件和*.map文件,大多数开发人员不会将它们从生产包中删除。可以使用node-prune安全地删除它。我们可以使用它来删除开发依赖项:npmprune--production进行这些更改后,Dockerfile将如下所示:FROMnode:10ASBUILD_IMAGERUNcurl-sfLhttps://install.goreleaser.com/github.com/tj/节点-prune.sh|bash-s---b/usr/local/binWORKDIR/appCOPY。/appEXPOSE8080RUNnpminstall&&npmrunbuild#removedevelopmentdependenciesRUNnpmprune--production#runnodepruneRUN/usr/local/bin/node-pruneFROMnode:10WORKDIR/app#从构建镜像复制--from=BUILD_IMAGE/app/dist./distCOPY--from=BUILD_IMAGE/app/node_modules./node_modulesRUNnpmi-ghttp-serverCMDhttp-server。/dist通过使用这个选项,我们将整体大小减少到1.09GB。3:选择一个较小的最终基础镜像在对Node.js应用程序进行docker化时,有许多基础镜像可供选择。这里我们将使用alpine图像;alpine是一个精简的docker镜像,包含最少的包,但足以运行节点应用程序。从节点:10ASBUILD_IMAGERUNcurl-sfLhttps://install.goreleaser.com/github.com/tj/node-prune.sh|bash-s---b/usr/local/binWORKDIR/appCOPY。/appEXPOSE8080RUNnpminstall&&npmrunbuild#removedevelopmentdependenciesRUNnpmprune--production#runnodepruneRUN/usr/local/bin/node-pruneFROMnode:10-alpineWORKDIR/app#从构建镜像复制--from=BUILD_IMAGE/app/dist./distCOPY--from=BUILD_IMAGE/app/node_modules./node_modulesRUNnpmi-ghttp-serverCMDhttp-server./dist通过使用这个Dockerfile,图像大小减少到157MB。结论通过应用这3个简单的步骤,我们将docker镜像大小减小了10倍。PS:本文属于翻译,原文