【发布时间】:2021-09-16 17:28:43
【问题描述】:
尽管我添加了 .dockerignore 以忽略节点模块,但为什么我使用此 Dockerfile 命令获取大型 docker 映像,有没有办法解决此映像大小问题?我们可以使用 webpack 来打包和实现 tree-shaking 并缩小尺寸以供生产吗
【问题讨论】:
尽管我添加了 .dockerignore 以忽略节点模块,但为什么我使用此 Dockerfile 命令获取大型 docker 映像,有没有办法解决此映像大小问题?我们可以使用 webpack 来打包和实现 tree-shaking 并缩小尺寸以供生产吗
【问题讨论】:
要减小 docker 映像大小,请使用 alpine 标记。
这个标签使用 Alpine Linux 作为基础镜像,这会减少你构建的镜像。 (什么是 Alpine Linux?Alpine Linux 是一个面向安全的轻量级 Linux 发行版,基于 musl、libc 和 busybox。)
您可以使用多阶段构建来构建您的 docker 映像。
使用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?
您可以使用alpine docker 镜像,例如node:14.5.0-alpine
建议使用 alpine 图像,因为它速度快、安全且轻量级
【讨论】: