【问题标题】:Why do we need a volume option in docker-compose when we use react/next?为什么我们在使用 react/next 时需要在 docker-compose 中添加音量选项?
【发布时间】:2021-07-23 05:25:22
【问题描述】:

我有一个问题,当我们使用 React/Next.js 时,为什么我们需要在 docker-compose 中使用 VOLUME 选项?

如果我理解的话,我们使用VOLUME 来“保存数据”,例如当我们使用数据库时。

但是对于React/Next.js,我们只是用来传递node_modulesapp path,对我来说这没有任何意义...

如果我这样说:

version: '3'
services:
  nextjs-ui:
    build:
      context: ./
    ports:
      - "3000:3000"
    container_name: nextjs-ui
    volumes:
       - ./:/usr/src/app/
       - /usr/src/app/node_modules

有效..

如果我这样说:

version: '3'
services:
  nextjs-ui:
    build:
      context: ./
    ports:
      - "3000:3000"
    container_name: nextjs-ui

以同样的方式工作..

为什么我们需要保存node_modulesapp path

我的 DOCKERFILE:

FROM node:12-alpine

WORKDIR /app

COPY package*.json ./

RUN addgroup -g 1001 -S nodejs
RUN adduser -S nextjs -u 1001


COPY . .

EXPOSE 9000

RUN npm run build

CMD ["npm", "start"]

【问题讨论】:

  • 需要看到你的Dockerfile 来回答这个问题。通常我们构建 reactjs 应用,并且只在 docker 镜像中包含构建输出。
  • @ImeshaSudasingha Hiii,很好,我更新了,我放了 dockerfile,谢谢
  • 这些volumes: 声明不是必需的,可以安全地删除。它们可能会导致问题,例如在生产中运行未经测试的代码或 Docker 忽略对您的 package.json 文件的更改。您可以使用主机节点环境进行日常开发,并在尝试使单元测试正常工作时实时重新加载,然后将工作应用程序打包到 Docker 中以进行集成测试和部署。

标签: reactjs docker docker-compose next.js


【解决方案1】:

根据您的Dockerfile,它已经在复制您的源代码并执行npm run build。最后运行npm start 启动开发服务器(不推荐用于生产)。

通过挂载src/appsrc/node_modules 目录,您可以在更改主机中的源代码的同时重新加载应用程序。

总而言之,如果您没有挂载源代码,则必须重新构建 docker 映像并运行它才能使您的更改在应用程序中可见。如果你挂载了 source 和 node_modules,你可以利用 npm start 的实时重载能力在主机上进行开发。

【讨论】:

  • 非常感谢我的朋友,感谢您的回答.. 只是一个小问题.. 为什么不建议将 Dockerfile 上的步骤用于生产?你认为我必须改变什么?
  • 因为npm start 启动了一个开发服务器,但它不足以处理生产流量。有关他们推荐的方法,请参阅create-react-app.dev/docs/deployment。您只需要安装serve 并提供在npm run build 步骤之后创建的build 目录。
  • @ImeshaSudasingha,create-react-app 的 start 脚本和 Next.js 的脚本是有区别的。 Next.js start 脚本根据文档以生产模式启动应用程序。
【解决方案2】:

包含卷后,您可以在 dockerized Next 应用程序中反映所有本地更改,这允许您使用 热重载 等功能,而无需重新构建 Docker 容器只是为了看看变化。

在生产中,您不必包含这些卷。

【讨论】:

  • 非常感谢您的时间和回答,对我帮助很大!!!
猜你喜欢
  • 1970-01-01
  • 2021-10-28
  • 2020-07-27
  • 2021-05-08
  • 1970-01-01
  • 2023-04-03
  • 2017-07-20
  • 2016-06-25
  • 2018-12-15
相关资源
最近更新 更多