在AWS上使用Docker扩展两层MEAN应用程序

所以我现在的设置是一个Node.js应用程序,它提供了一个Angular前端,另外一个Node.js应用程序,它具有Express和API,以及一个MongoDB实例。 简单地说,客户端应用程序与后端应用程序进行对话,后端应用程序与MongoDB进行对话。

我正在研究如何Dockerize这些应用程序,它似乎像一些例子使用链接。 所以我的问题是链接只能在同一个主机上工作(意味着AWS上的一个EC2实例)还是多个EC2实例? 如果只有前者,如果我同时拥有应用程序和Mongo集装箱,我该如何扩展? 就像如果我旋转了第二个EC2实例一样,我会在第二个实例中再次将容器化的Node应用程序和Mongo放在一起吗? 在Node应用程序的同一个实例上有一个Mongo容器单点故障? 那容错怎么样?

只是试图把我的头围绕在这,并为我对这个问题的无知道歉。 谢谢!

你应该把每个应用程序以及MongoDB服务器放在不同的容器中(这是我想你打算的),而链接(通过Docker-Compose或其他方法)只是联网。 如果您使用Docker链接,它将创build一个专用networking。 您可以创build其他networking来互相交谈,也可以与局域网,广域网等进行交stream。

是的,把它们全部放在同一个EC2实例上就是创build一个SPOF。

如果这是一个问题,请查看: https : //docs.docker.com/swarm/networking/

Docker Swarm与Docker的networkingfunction完全兼容。 这包括多主机networkingfunction,允许创build跨越多个Docker主机的自定义容器networking。

或者平衡您的应用程序并使用AWS托pipe的MongoDB集群。 根据您的需求和预算,有许多可能的方法。