【问题标题】:Why Docker Image getting so large for node js app为什么 Docker Image 对于 node js 应用程序变得如此之大
【发布时间】:2021-09-16 17:28:43
【问题描述】:

这是我的 Dockerfile 的屏幕截图:

这是我的 Docker 镜像文件:

尽管我添加了 .dockerignore 以忽略节点模块,但为什么我使用此 Dockerfile 命令获取大型 docker 映像,有没有办法解决此映像大小问题?我们可以使用 webpack 来打包和实现 tree-shaking 并缩小尺寸以供生产吗

【问题讨论】:

    标签: node.js docker


    【解决方案1】:
    1. 要减小 docker 映像大小,请使用 alpine 标记。 这个标签使用 Alpine Linux 作为基础镜像,这会减少你构建的镜像。 (什么是 Alpine Linux?Alpine Linux 是一个面向安全的轻量级 Linux 发行版,基于 musl、libc 和 busybox。)

    2. 您可以使用多阶段构建来构建您的 docker 映像。

    3. 使用npm prune --production,此命令将删除您的 devDependencies 中指定的包。

    遵循上述条件的示例Dockerfile

    FROM node:14-alpine as build
    
    WORKDIR /opt/app
    
    COPY . /opt/app
    
    RUN npm ci \
        && npm run build \
        && npm prune --production
    
    
    FROM node:14-alpine
    
    ENV NODE_ENV=production
    
    USER node
    WORKDIR /opt/app
    
    COPY --from=build /opt/app/package*.json /opt/app/
    COPY --from=build /opt/app/node_modules/ /opt/app/node_modules/
    COPY --from=build /opt/app/dist/ /opt/app/dist/
    
    EXPOSE 3000
    
    CMD ["npm", "run", "start:prod"]
    
    

    【讨论】:

    • 能否提供一个简单的Dockerfile
    【解决方案2】:

    您可以使用alpine docker 镜像,例如node:14.5.0-alpine

    建议使用 alpine 图像,因为它速度快、安全且轻量级

    【讨论】:

    • 在执行 RUN npm install 时,它使节点模块正确,然后执行 COPY 。 . , 是复制。 .意味着 docker 将包括节点模块在内的所有源复制到 docker 映像中?但实际上我在 .dockerignore 文件中忽略了节点模块
    猜你喜欢
    • 2022-09-26
    • 2019-10-05
    • 2018-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-24
    相关资源
    最近更新 更多