You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker多阶段构建分离开发生产环境时生产镜像过大如何解决?

生产镜像体积异常的核心原因是当前prod阶段直接继承了base阶段,base阶段所有包含开发依赖的镜像层都会被保留到生产镜像中,后续操作无法删除前序镜像层的冗余文件,因此出现了生产镜像比开发镜像更大的问题。

优化后的Dockerfile
# 开发基础阶段,保留原有逻辑,用于开发环境镜像构建
FROM node:14.18.1-alpine3.14 as base
ENV APP=/app
WORKDIR $APP
COPY . $APP/
RUN yarn install --frozen-lockfile &&\
    rm -rf "$(yarn cache dir)"
RUN yarn build

# 生产阶段不再继承base,直接使用干净的基础镜像
FROM node:14.18.1-alpine3.14 as prod
ENV APP=/home/node/app
WORKDIR $APP
# 提前配置权限和用户
RUN chown node:node $APP
USER node
# 仅从base阶段复制编译后的生产运行必须产物
COPY --chown=node:node --from=base /app/dist/ $APP/dist/
# 复制依赖声明文件
COPY --chown=node:node package.json yarn.lock $APP/
# 仅安装生产依赖
RUN NODE_ENV=production yarn install --frozen-lockfile &&\
    rm -rf "$(yarn cache dir)"
优化说明
  • 开发环境镜像构建逻辑不变,执行docker build --target base -t your-app:dev .即可获得原有的开发镜像,不影响开发使用
  • 生产阶段完全从干净的官方node alpine镜像启动,彻底规避了base阶段的237M开发依赖冗余文件被带入生产镜像
  • 生产镜像仅包含alpine基础镜像、36M生产依赖、编译后的dist代码,总大小稳定在70~90M区间,符合预期

内容的提问来源于stack exchange,提问作者João Casarin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 02:06:05