首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么是开发码头多阶段建设的最佳方式?

什么是开发码头多阶段建设的最佳方式?
EN

Stack Overflow用户
提问于 2020-12-04 10:10:21
回答 1查看 553关注 0票数 0

我在Dockerfile中使用多阶段构建(第一阶段是构建,第二阶段是运行)。

我想知道我是否应该在第二阶段复制node_modules文件夹,还是应该运行npm i。什么是最佳方式?

注意事项:我在第一阶段安装的所有apk包都需要正确运行npm ci (我有很多错误:node-gyp等等)

代码语言:javascript
复制
# Build container stage
FROM node:alpine AS BUILD_IMAGE

RUN apk --no-cache add -u --virtual build-dependencies \
    g++ gcc libgcc libstdc++ linux-headers make python3
WORKDIR /app
COPY package*.json ./
RUN npm ci && npm clean cache --force && apk del build-dependencies
COPY . .
RUN npm run lint
RUN npm run tsc
RUN npm prune --production

# Run container stage
FROM node:alpine AS app
WORKDIR /app
COPY /package*.json ./
# Should I copy the `node_modules` folder or
# should I run an `npm i` ? What is the optimal method?
COPY --from=BUILD_IMAGE /app/dist ./dist
COPY --from=BUILD_IMAGE /app/node_modules ./node_modules
# Clean dev packages
EXPOSE 8080
# Run the container with a non-root User
USER node
CMD [ "node", "dist/src/app.js" ]
EN

回答 1

Stack Overflow用户

发布于 2020-12-04 11:21:54

当我想要构建映像时,我总是在坞内运行npm (ci),因为如果您将node_modules从dev环境复制到坞映像,依赖于您用于开发的操作系统,那么node_modules中的许多二进制文件都是错误的(Windows/ many ),如果您使用ubuntu,并且您的映像再次基于阿尔卑斯,您就会遇到一些问题。

最好的选择总是只为node_modules构建创建一个层,然后根据您的node_module层=>创建一个应用程序层,您将使用缓存和更快的构建。注意:如果您想在Windows上复制node_modules,使用WSL2 (Ubuntu)并基于Ubuntu(Debian)构建映像,那么您不必担心错误

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

https://stackoverflow.com/questions/65141638

复制
相关文章

相似问题

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