用多阶段构建给 Docker 镜像“瘦身”

举报
yd_15031637 发表于 2026/10/20 08:56:01 2026/10/20
【摘要】 很多 Node.js 项目直接把源码、依赖和构建工具一起打进镜像,导致镜像动辄 1GB 以上,推送慢、拉取慢,攻击面也大。其实用 Docker 多阶段构建就能解决。思路是把“构建”和“运行”拆开:第一阶段安装全部依赖并编译,第二阶段只复制产物和运行所需依赖。示例:FROM node:20 AS builderWORKDIR /appCOPY package*.json ./RUN npm c...

很多 Node.js 项目直接把源码、依赖和构建工具一起打进镜像,导致镜像动辄 1GB 以上,推送慢、拉取慢,攻击面也大。其实用 Docker 多阶段构建就能解决。

思路是把“构建”和“运行”拆开:第一阶段安装全部依赖并编译,第二阶段只复制产物和运行所需依赖。示例:

FROM node:20 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci
COPY . .
RUN npm run build

FROM node:20-slim
WORKDIR /app
COPY package*.json ./
RUN npm ci --omit=dev
COPY --from=builder /app/dist ./dist
CMD ["node", "dist/index.js"]

这样最终镜像不包含源码、devDependencies 和构建缓存,体积可缩小一半以上。注意 .dockerignore 要排除 node_modules、.git 和日志文件,避免把无用内容送进构建上下文。多阶段构建不改变运行逻辑,却能显著提升部署效率和安全性,适合大多数前后端项目落地。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。