只需简单两步,轻松缩减 Node.js 应用的镜像大小

  • 时间:
  • 浏览:0

FROM node:8.10.0-alpine

有一一好几个 简单的步骤能否将镜像大小从948 MB缩减到79 MB。现在容器部署过程所需的时间减少了就说 。在hub.docker.com 上被压缩的镜像大小看起来更好!

我如此 为服务器文件打包,就说 我将所有服务器依赖项保留在依赖项偏离 中,就像事先一样。这由于工作流程应中含以下步骤:



接下来,运行“docker build”命令。在我的案例中,镜像的大小倘若缩减到206MB,比初始大小减少了78%!

COPY ./build /usr/app/build

Node.js 镜像仓库为每个 Node.js 版本提供了若干个镜像标签。你这个,8.10.0版本全是6个不同的镜像标签:

在出理 Node.js程序运行运行池池时,我注意到部署镜像的时间有事先都要很长时间,远超我的预期。于是,我结束了了了了深入研究你这个问題图片,倘若发现只需有一一好几个 步骤就能否让 948M 大小的 Docker 镜像缩减至 78.6M,从而减少部署时间、提升下行速率 。

该程序运行运行池池是有一一好几个 典型的 Web 程序运行运行池池,它具有前端偏离 (React.js)和后端偏离 (在 Express.js 上的 Node.js 服务器)。构建过程中含以下有一一好几个 步骤:

COPY ./build /usr/app/build

FROM node:8.10.0

WORKDIR /usr/app

注释:to:



程序运行运行池池更改前的 Dockerfile (发生程序运行运行池池目录的根目录中),若下所示:

WORKDIR /usr/app

CMD [ "npm", "run", "start" ]

如下图所示,这就说 我尝试的结果(948MB缩减至78.6MB):

原则是:倘若依赖项就说 在 构建期间都要用到,请将它移到 devDependencies 偏离 。

注释:change the first line from:

FROM node:8.10.0-alpine

COPY ./package.json /usr/app/package.json

EXPOSE 50

RUN cd /usr/app && npm install --production

RUN mkdir -p /usr/app/build

再次运行“docker build”命令。在我的案例中,镜像大小缩减至79M,你这个次比初始大小减少了91%!

COPY ./node_modules /usr/app/node_modules

EXPOSE 50

RUN mkdir -p /usr/app/build

本文首发自“Docker公司”公众号(ID:docker-cn)

编译丨小东

每周一、三、五 与您不见不散!

默认状况下,npm install 将安装所有依赖项,包括 devDependencies 偏离 。有了 --production 标签,大伙就能否从 package.json 文件中仅安装所需的依赖项。在 devDependencies 偏离 中,我保留了构建系统、测试工具和其他其它的开发工具。我习惯于将 React.js 函数库和其它的 UI 依赖项一并保留在 package.json 文件中,倘若它看起来是不正确的,倘若我有 webpack 来生成所有的 UI 依赖项。倘若,正确的辦法 是将所有后会直接用于在生产服务器上,也后会直接用于在 devDependencies 偏离 上的依赖项移除。

有趣的是你这个 alpine 版本。这是有一一好几个 最小的可用镜像,倘若它基于 Alpine Linux 项目。Alpine 使用的是 musl libc 而全是内控 的 glibc ,但 Node.js 通常在典型的开发者系统中使用后者(glibc)。这倘若会破坏您使用的其他函数库,倘若我的基于 Express.js 的程序运行运行池池并如此 问題图片。如下所示,切换到 alpine:

FROM node:8.10.0

CMD [ "npm", "run", "start" ]

该 Dockerfile 做了以下几件事:

我得到的 Dockerfile 的最终版本,如下所示:

步骤1:将基础的 Node.js 镜像替换为缩减后的镜像(948MB缩减至206MB)

步骤2:使用 NPM --production 标签(206 MB缩减至79 MB)

COPY ./package.json /usr/app/package.json