对节点应用程序进行 docker 化时,我应该在哪里设置数据库?

Where should I setup the database when dockerizing a node application?

我在节点和 mongodb 上有一个后端应用程序 运行ning。我想将我的应用程序转移到 docker 所以我已经 dockerized 节点但是我很困惑我应该 运行 mongodb 还是 dockerize不管是不是。

注意:生产环境我要这样做

以下是我想到的一些场景:

  1. 运行 节点在 docker 容器中,mongodb 在本地机器中
  2. 运行 节点和数据库都在 docker 容器中,并将数据存储在与数据库相同的容器中
  3. 运行 节点和数据库在 docker 容器中,并将数据存储在单独的卷中

哪种场景最适合在生产服务器上实现?

我是 docker 的新手,所以 如果您有解决此问题的其他方法,请考虑提及。 您也可以参与 kubernetes 在需要的场景中

您的两个场景是产品上通常的工作方式:

  1. Run node in docker container and mongodb in local machine

我以前的工作就是这样。容器内的应用程序和单独 VM 上的数据库。效果很好,不能多说了。

  1. Run both node and database in docker containers and store the data in the container same as database

不要这样做。容器是短暂的——这意味着一旦容器被删除,里面的所有数据都会消失。这包括数据库和数据库中的记录。

  1. Run node and database in docker containers and store the data in separate volume

这是执行此操作的另一种正确方法,可能是最广泛接受的方法。如果您决定采用这种方式,您可能需要阅读 Volumes for Docker or StatefulSets and Persistent Volumes for Kubernetes

您可以使用以下两种解决方案之一:

  • 为您的节点 js 服务器创建部署并使用本地 mongodb,通过您的主机 ip 建立连接(但这仅对开发有效)。要将此解决方案用于生产,您应该创建并设置一个 public @ip 地址以确保 mongo 和节点 js 应用程序之间的 TCP 连接。

  • 第二种解决方案是为您的节点 js 服务器创建一个部署,为您的 mongodb 数据库创建一个 statfulset,并使用 (pv,pvc,storageclasse) 来保存您的数据。

我有一个使用 mongo 、redis 和 nodejs (express app) 的演示,你可以按照它来解决你的问题 按照我的例子 here.