首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >利用多阶段建筑实现发展阶段形象与推进阶段建筑的分离

利用多阶段建筑实现发展阶段形象与推进阶段建筑的分离
EN

Stack Overflow用户
提问于 2021-11-13 05:37:27
回答 1查看 137关注 0票数 0

,有一个Node.js应用程序,它是我使用类型记录+ ExpressJS构建的,现在我正在尝试安装对接器,以便同时拥有一个工作开发容器和一个生产容器。

I希望只有一个Dockerfile来使用多级构建过程。

my 项目由根文件夹组成,其中有所有这些dockerfile和复合文件,还有my package.json、src/文件夹、yarn.lock等。

现在我有这样的想法:

Dockerfile

代码语言:javascript
复制
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

FROM base as prod
ENV APP=/home/node/app
WORKDIR $APP
RUN chown node:node $APP
USER node
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)"

如果我只构建基本阶段,这就是我得到的图像:

355.65 MB的图像大小。现在,如果我检查图像中的node_modules有多大,这是:

对于dev node_modules来说,这是可以的。使用dive检查这些层,我得到以下内容:

您可以看到,其中的237MB是node_modules文件夹。

现在是生产部分.--如果我构建到dockerfile的prod目标,这就是我的图像大小:

那甚至比开发一号还大。检查该图像中的node_modules大小:

文从237到只有36 MB,真的很好,但是现在如果我从图像中检查层,这就是结果:

237 MB的node_modules仍然存在,这几乎是整个图像大小。我怎样才能避免在我的生产形象中出现这种脱粒现象呢?没有这一点,结果映像应该是大约80 MB,真的比391更好。

拜托,帮帮我!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-16 01:34:22

只需将FROM base as prod替换为FROM node:14.18.1-alpine3.14 as prod来解决这个问题。第一种方法是缓存最后构建中的所有基本层。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69951741

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档