我在Dockerfile中使用多阶段构建(第一阶段是构建,第二阶段是运行)。
我想知道我是否应该在第二阶段复制node_modules文件夹,还是应该运行npm i。什么是最佳方式?
注意事项:我在第一阶段安装的所有apk包都需要正确运行npm ci (我有很多错误:node-gyp等等)
# 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" ]发布于 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)构建映像,那么您不必担心错误
https://stackoverflow.com/questions/65141638
复制相似问题