modules node 太大了_如何将Node.js Docker镜像大小减小10倍
对应用程序进行Docker化非常简单,有效,但是优化Docker Image的大小是棘手的部分。 Docker易于使用,但是一旦应用程序开始扩展,镜像大小就会呈指数增长。通常,大多数情况下,应用程序的Node.js docker镜像大小超过1 GB。
为什么镜像大小很重要较大的docker镜像需要更多空间,这意味着增加费用。
较长的构建时间-将镜像通过网络推送会花费更长的时间,并导致CI管道延迟。
让我们开始优化
这是使用VueJS应用程序构建的演示应用程序。
这是初始的Dockerfile。
FROM node:10
WORKDIR /app
COPY . /app
EXPOSE 8080
RUN npm install http-server -g
RUN npm install && npm run build
CMD http-server ./dist
该镜像的大小为1.34GB:
让我们开始逐步优化。
1:使用多阶段Docker构建
多阶段构建可通过在单个Dockerfile中使用多个中间镜像来轻松优化Docker镜像。在此处了解更多信息。通过使用多阶段构建,我们可以在构建镜像中安装所有依赖项,并将它们复制到精简运行时镜像中。
FROM node:10 AS BUILD_IMAGE
WORKDIR /app
COPY . /app
EXPOSE 8080
RUN npm install && npm run build
FROM node:10
WORKDIR /app
# copy from build image
COPY --from=BUILD_IMAGE /app/dist ./dist
COPY --from=BUILD_IMAGE /app/node_modules ./node_modules
RUN npm i -g http-server
CMD http-server ./dist
现在,此镜像的大小为1.24GB:
2:删除开发依赖项并使用 Node Prune 工具
node-prune是一个开源工具,用于从node_modules文件夹中删除不需要的文件。通常在生产环境中根本不需要Npm包中的测试文件,markdown文件,类型文件和* .map文件,大多数开发人员都不会从生产包中删除它们。通过使用node-prune,可以安全地将其删除。
我们可以使用它来删除开发依赖项:
npm prune --production
进行这些更改后,Dockerfile将如下所示:
FROM node:10 AS BUILD_IMAGE
RUN curl -sfL https://install.goreleaser.com/github.com/tj/node-prune.sh | bash -s -- -b /usr/local/bin
WORKDIR /app
COPY . /app
EXPOSE 8080
RUN npm install && npm run build
# remove development dependencies
RUN npm prune --production
# run node prune
RUN /usr/local/bin/node-prune
FROM node:10
WORKDIR /app
# copy from build image
COPY --from=BUILD_IMAGE /app/dist ./dist
COPY --from=BUILD_IMAGE /app/node_modules ./node_modules
RUN npm i -g http-server
CMD http-server ./dist
通过使用此选项,我们将整体大小减小到1.09GB。
3:选择较小的最终基础镜像
在对Node.js应用程序进行docker化时,有很多基本镜像可供选择。
这里我们将使用 alpine 镜像; alpine是一个精简的docker镜像,具有最少的软件包,但足以运行节点应用程序。
FROM node:10 AS BUILD_IMAGE
RUN curl -sfL https://install.goreleaser.com/github.com/tj/node-prune.sh | bash -s -- -b /usr/local/bin
WORKDIR /app
COPY . /app
EXPOSE 8080
RUN npm install && npm run build
# remove development dependencies
RUN npm prune --production
# run node prune
RUN /usr/local/bin/node-prune
FROM node:10-alpine
WORKDIR /app
# copy from build image
COPY --from=BUILD_IMAGE /app/dist ./dist
COPY --from=BUILD_IMAGE /app/node_modules ./node_modules
RUN npm i -g http-server
CMD http-server ./dist
通过使用此Dockerfile,镜像大小降至157MB 。
结论
通过应用这3个简单步骤,我们将docker镜像大小减小了10倍。
PS: 本文属于翻译,原文
modules node 太大了_如何将Node.js Docker镜像大小减小10倍相关推荐
- node环境变量_实际使用Node环境变量的方法如下
node环境变量 Environment variables are a fundamental part of Node development, but for some reason I nev ...
- 百度怎么进行模糊搜索_怎么在百度上准确搜索,提高10倍效率?
人生下来就喜欢问为什么 ?小时候爱问父母,父母会直接告诉我们答案:长大后我们就用搜索引擎,百度.谷歌.搜狗等等获取资料知识,但是很难搜索准确的答案.今天小编就来教大家几个实用的(以百度为例)搜索引擎使 ...
- java node子节点_[Java教程]Node节点
[Java教程]Node节点 0 2016-12-28 15:01:17 1.Node:节点 元素节点->HTML标签 文本节点->文字 但是在标准浏览器(除了IE6~8)中会把空格和换行 ...
- cad菜单栏快捷键_拒绝效率低下,教你瞬间提升10倍!老师傅珍藏多年CAD快捷键...
效率一直都是标榜职场人工作质量的一个标准,效率低下就是一个很烦恼的问题,特别是对AutoCAD绘图设计这样一个行业,如果你的绘图效率低,那么只有加班赶点的命. 日渐消瘦,身体可不允许啊,还是要从根本解 ...
- maven项目中如何直接访问某一个页面_整一个自己的docker镜像
获取镜像的途径有两个,一是从镜像仓库获取,如官方的Docker Hub,二是自定义.上文已经介绍如何从镜像仓库获取镜像,本文基于一个Springboot项目,来介绍自定义一个镜像的基本流程. 1. 定 ...
- iso镜像添加软件包_超薄Docker容器-减少Docker镜像大小的指南
Photo by William Warby on Unsplash 您是否曾经想过为什么您的单应用程序Docker容器会增长到400 MB? 或者,也许为什么一个只有几十MB的应用程序二进制文件会生 ...
- 新手赶紧收藏起来,播放量太低怎么办?5大技巧让你播放量翻10倍
有的人发布了很长时间的视频作品,为什么播放量一直上不去呢? 有的时候只有个位数和两位数,为了给大家解决这样的问题,给小伙伴们整理了几个小技巧,来帮你们提升作品的播放量. 1.视频格式 有的人拍摄.剪辑 ...
- node.js使用手册_权威的Node.js手册
node.js使用手册 Note: you can get a PDF, ePub, or Mobi version of this handbook for easier reference, or ...
- 集群资源分配_分析下 Node.js 关于集群的那些事
需要了解的基础概念 一个应用程序中,至少包含一个进程,一个进程至少包含一个线程. 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位 线程(Thr ...
最新文章
- Camera Calibration 相机标定
- 他们用卷积神经网络,发现了名画中隐藏的秘密
- Java - 将整数转换为字符串[duplicate]
- C++中的private protected public区别
- Silverlight中使用动画的技巧
- 1.3 编程基础之算术表达式与顺序执行(20题)
- 使用ACDsee在一张纸上打印多张图片
- Makefile模板的继续改进
- Oracle和Mysql的区别 转载
- 马斯克又一个宏伟蓝图即将启动:卫星高速上网,没有中间商赚差价
- IDEA使用和实用小技巧
- L1-021 重要的话说三遍 (5 分) — 团体程序设计天梯赛
- 二极管计算机原理,TVS二极管原理及其应用电路图
- 计算机与调制解调器之间接口为,单片机串行接口和调制解调器如何实现远程通信...
- Java就业面试问题大全
- diskgenius 数据迁移_如何无损将UEFI格式的系统从SATA盘迁移到NVME SSD中
- PTA L1-040:最萌情侣身高差 (python)
- word2000来处理图象(转)
- 基于内容的视频信息检索系统
- 在虚拟机上安装Ubuntu
热门文章
- 森林怎么训练野人_第五人格:野人技能曝光!野猪可以骑,庄园中或将迎来新玩法!...
- 编程随想 关系图_支持PLC编程的5大语言,全部会用的才是大神!
- C++动态内存管理好难怎么办?零基础图文讲解,小白轻松理解原理
- 嵌入式系统与人工智能
- 7个JavaScript在IE和Firefox浏览器下的差异写法
- TOP100summit:【分享实录-QQ空间】10亿级直播背后的技术优化
- Mysql 电商常用的时间操作(当天,昨天,7天,30天,半年,全年,季度等等)...
- 【Computer Organization笔记29】大作业展示
- 我爬了价值1800亿的商品信息
- php如何安装源码包,php源码包安装步骤是什么