繁体   English   中英

Dockerizing NodeJS——保留节点模块

[英]Dockerizing NodeJS – keeping node modules

我有一个想要 dockerize 的 NodeJS express 应用程序。 为此,我创建了一个Dockerfile

FROM node:18 AS server
ENV NODE_ENV=production
WORKDIR /app
COPY package*.json /
RUN npm ci
COPY . .

我还有一个.dockerignore文件:

node_modules/
client/node_modules/

Dockerfile
docker-compose.yml
.git
.gitignore
.dockerignore
.env

一切都在docker-compose.yml的帮助下运行:

version: '3.8'
services:
  app:
    container_name: my-app
    image: my-org/my-app
    build:
      context: .
      dockerfile: Dockerfile
    command: node index.js
    ports:
      - "3030:3030"
    environment:
      HELLO: world
    env_file:
      - .env

当我按此顺序运行Dockerfile命令时, COPY. . COPY. . 似乎从图像中删除了node_modules ,它们是使用预先运行的npm ci创建的。 我已经尝试过第一次运行COPY. . COPY. . 然后npm cinode_modules留在图像中。

我的问题是——在 COPY 之前运行npm ci是否更好COPY. . COPY. . ,如果答案是肯定的,那么我怎样才能让node_modules留下来?

我有一个类似的问题并用于“构建容器”。

您忽略了 .dockerignore 中的.dockerignore文件夹。 因此,它不会被复制到您的图像中。

# The instructions for the first stage
FROM node:16-alpine as builder

ARG NODE_ENV=production
ENV NODE_ENV=${NODE_ENV}

RUN apk --no-cache add python3 make g++

COPY ./package*.json ./
RUN npm install


# ------------------------------------


# The instructions for second stage
FROM node:16-alpine

WORKDIR /opt/OpenHaus/backend
COPY --from=builder node_modules node_modules
RUN apk --no-cache add openssl

COPY . ./
#COPY ./package.json ./

#ENV HTTP_PORT=8080
ENV NODE_ENV=production
#ENV DB_HOST=10.0.0.1
#EXPOSE 8080

CMD ["node", "index.js"]

这样,依赖项就会“构建”并从 node.js 映像中的构建容器复制。

更多阅读:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM