【问题标题】:How to reduce the size of parse-server docker image after installing node modules安装节点模块后如何减小 parse-server docker 映像的大小
【发布时间】:2021-06-25 06:16:17
【问题描述】:

最新官方parse-server docker image根据这个post不再包含S3 File Adapter。所以我正在创建一个新图像。我的 Dockerfile -

FROM parseplatform/parse-server

USER root

WORKDIR /parse-server

RUN npm install --save @parse/s3-files-adapter

USER node

构建后 -

docker build -t my_parse .

生成的 docker 图像是原始图像大小的两倍。

# docker images -a
REPOSITORY                   TAG       IMAGE ID       CREATED              SIZE
my_parse                     latest    763968cef685   21 seconds ago       565MB
<none>                       <none>    1e92933e370e   23 seconds ago       565MB
<none>                       <none>    8778c6ebc0f7   About a minute ago   247MB
<none>                       <none>    46a2805beb06   About a minute ago   247MB
parseplatform/parse-server   latest    0492a55f2c59   24 hours ago         247MB

如何减小 my_parse 图像的大小并消除 none 图像?

【问题讨论】:

    标签: docker npm-install parse-server


    【解决方案1】:

    很可能,您的npm install 命令会导致下载所有依赖项,这意味着您的图像也包含所有node_modules,因此尺寸很大。

    解决此问题的一种可能方法是使用Multi-stage build。这样,在您的第一阶段,您将运行 npm install,收集您需要的所有文件,以便让您的应用程序运行,在第二阶段,您将只复制那些需要的文件,这将导致整体较轻的图像。

    要删除所有未使用的层,请尝试运行docker rmi $(docker images --filter "dangling=true")。你可以阅读更多关于这个here的信息。

    【讨论】:

    • 感谢您的建议。我确实尝试了 docker rmi 与 dangling true,但这些层是依赖的。多阶段构建似乎是here 所做的解决方案。但是,我不确定需要复制什么。抱歉,我是 Docker 和 Node 新手。
    • 如果他们是依赖的,那你就没事。您需要这些图层,因此您不应尝试删除它们(除非您想删除它们所依赖的原始图像)。好吧,在大多数情况下,运行npm install 通常会生成类似于dist 的目录,通常你需要的一切都在那里。我最好的猜测是您应该尽量避免在最终图像中复制node_modules。观察运行npm install 并进行实验后出现的新目录。 :)
    【解决方案2】:

    以下 Dockerfile 构建一个较小的 docker 镜像 -

    FROM parseplatform/parse-server as initial
    
    USER root
    
    RUN npm install --save @parse/s3-files-adapter
    
    # Release stage
    FROM parseplatform/parse-server
    
    USER root
    
    RUN rm package*.json && rm -rf node_modules
    
    COPY --from=initial /parse-server/package*.json ./
    
    RUN npm ci --production --ignore-scripts
    
    USER node
    

    但是,它并不像直接从源代码构建那么小。

    $ git clone https://github.com/parse-community/parse-server
    $ cd parse-server
    $ npm install --save @parse/s3-files-adapter
    $ docker build --tag parse-server .
    

    【讨论】:

      猜你喜欢
      • 2021-12-04
      • 2023-01-19
      • 1970-01-01
      • 2020-12-27
      • 2020-11-15
      • 1970-01-01
      • 2022-08-21
      • 2016-06-14
      • 2021-01-21
      相关资源
      最近更新 更多