【问题标题】:Running React + Node.js Application as single container (Dockerfile)将 React + Node.js 应用程序作为单个容器运行 (Dockerfile)
【发布时间】:2020-12-26 07:27:28
【问题描述】:

我想知道一些(可能)奇怪的解决方案来部署我的应用程序,通常我有两个Dockerfiles,其中一个专用于基于react 的前端,具有多阶段构建以使用@ 987654324@ 作为静态部署,第二个基于pm2 的运行时用于我的node 应用程序。

我真的很想避免node 提供静态文件,因为它无效,我想知道如何将我的应用程序部署为单个 Docker 映像,因为在这种情况下,我想分发它,是这可能吗?

我认为的解决方案是为reactnode 创建多阶段构建,我将在后台运行node 应用程序并启动nginx 进程,它将API 代理到{url}/api/*是不错的解决方案 IMO,但我想听到有人有类似的想法来做这样的事情。

【问题讨论】:

  • 如果它符合您的需要,您可以run multiple services in a container
  • 我会将 React 应用程序编译为静态文件并让 something 为这些文件提供服务;我宁愿让 Node 后端为静态文件提供服务,而不是尝试将多个进程填充到一个容器中。多阶段构建并不能帮助您绕过 Docker,基本上每个容器运行一个进程。
  • 我搞砸了建筑,这个问题似乎无效。我要归档的是 MVC 架构,其中 API 和客户端在一个应用程序中进行解析,我发现了一个很好的 node 框架,它允许我们做这样的事情,称为 meteor
  • Dockerfile 中我认为应该没有两个进程正在运行,所以我只是研究了不应该以这种方式完成,因为当我有SPAAPI 时应该是两个容器,如果我将react 开发为MVP 应用程序结合ex。 express 可以在一个容器中构建应用程序,但我不喜欢这种方法,因为 expressreact 因为视图控制器很混乱,性能确实低于 SPA + API架构。
  • 无论如何,这就是你们的回应,我会尝试为我的问题写一个答案并将其标记为已解决,因为它不再相关。也许将来有人会尝试做这样的问题,这会有所帮助。

标签: node.js reactjs docker


【解决方案1】:

我对构建多进程 Dockerfile 的研究很好......该死的简单,你不应该这样做 - 因为容器缩进时考虑到了 single-process。在我的情况下,我已经通过使用next.js 实现SSR 解决了主题中发布的问题,并且之前使用了用于构建单体容器的工具,例如meteor.js

当然,它可以以一种有点破碎的方式完成,使用 mult-stage 构建,您将在其中捆绑 react.js 代码,然后将其移动到另一个进程以使用 express 作为静态构建提供服务,我不会推荐给大家,因为这是不可扩展的,我们可以通过使用nginxreact.js 构建提供更好的性能。

【讨论】:

    猜你喜欢
    • 2014-12-07
    • 2017-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-08
    • 2011-04-30
    相关资源
    最近更新 更多