这篇文章主要介绍“如何利用Dockerfile优化Nestjs构建镜像大小”,在日常操作中,相信很多人在如何利用Dockerfile优化Nestjs构建镜像大小问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操免费云主机域名作方法,希望对大家解答”如何利用Dockerfile优化Nestjs构建镜像大小”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!每个镜像都可以视为一个单独的软件包,你可以通过编写Dockerfile
告诉docker
如何来打包镜像让我们开始编写吧,首先,先创建一个空的文件然后把我们的指令添加到Dockerfile
里面,并且注释每一步是干什么同样的,创建.gitignore
文件,我们可以把那些不需要经过docker
打包的文件给忽略掉把一下文件给排除忽略掉如果你在本地安装了docker
,可以在本地进行打包测试,让我们来瞧瞧是否如预期中那样打包镜像在命令行中执行以下命令,当然,你也可以把nest-app-demo
换成你想要的镜像名,需要注意的是,不要忘记后面的.
号!接着你可以在你本机执行以下命令,查看是否已经成功打包了镜像噢,感谢上帝,已经成功打包成镜像了,可以看到我们的命名nest-app-demo
就像只肥硕的土拨鼠静静的躺在镜像列表里面紧接着让我们来把镜像给跑起来,映射到本机80
端口,如果端口被占用可以使用其他端口这时候你就在浏览器中输入http://localhost
进行访问,可以看到容器正常启动。 如果你想删除那些正在运行的容器,可以使用以下命令进行删除好了,现在我们对镜像包进行压缩了,因为可以看到,目前镜像大小是1.24G,噢,上帝,真是太大了!让我们来看看之前编写的Dockerfile
,看如何对它进行优化强烈推荐使用node:18-alpine
而不是node:18
,使用alpine
的镜像可以直接把镜像体积从1.24g减少到466MB!很多依赖包会根据当前的NODE_ENV
环境变量而进行判断是否优化压缩,所以我们可以在Dockerfile
里面把环境变量加进去,设置为production
npm 比较推荐使用npm ci
而不是npm install
来打包镜像”npm ci
与npm install
很相似,除了当它用于自动化时,如测试平台,持续集成和部署————或者任何你想确保能有一个干净的依赖安装环境”正好符合我们现在的情况,所以我们要使用npm ci
来替换npm install
默认情况下,Dockerfile
会使用root
权限来构建你的镜像,这会存在一定的安全风险,在这里,我们已经拥有一个叫node
的用户,我们可以直接使用它当你在使用COPY
指令时,添加标志以确保用户能够拥有正确的权限也是一种好做法,比如可以使用--chown=node:node
在Dockerfile
中,你可以定义多阶段构建,这是一种通过多个镜像构建出最优镜像的方式,可以使得最后生成的镜像最小化上面是多阶段构建的3个阶段:development
这是用于本地环境构建镜像时的阶段build
这是用于构建生产镜像的阶段production
复制构建完毕后的文件并且启动服务如果你不需要在本地环境使用docker
启动你的Nestjs应用,可以把前两个阶段合二为一上述多阶段设置的好处在于,这样你就有了一个可以在本地开发中使用的Dockerfile
(与docker-compose
组合在一起)。同时创建一个用于生产的优化Docker
镜像。通过上述使用的方案进行优化后,最终的Dockerfile
如下,他可以帮助我们构建出最优的镜像可以看到,最后打包的镜像只有189MB大小到此,关于“如何利用Dockerfile优化Nestjs构建镜像大小”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注百云主机网站,小编会继续努力为大家带来更多实用的文章!
相关推荐: k8s中各组件和kube apiserver通信时的认证和鉴权问题怎么解决
这篇文章主要介绍“k8s中各组件和kubeapiserver通信时的认证和鉴权问题怎么解决”,在日常操作中,相信很多人在k8s中各组件和kubeapiserver通信时的认证和鉴权问题怎么解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对…
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。