用多阶段构建给 Docker 镜像“瘦身”
【摘要】 很多 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)