如何将子域映射到使用AWS上的Elastic Bean Stack托管的多个docker容器(作为Web服务器)

时间:2015-08-11 13:14:15

标签: amazon-web-services nginx docker elastic-beanstalk amazon-elastic-beanstalk

我见过一个aws示例,主持一个nginx服务器和一个运行在实例中单独的docker容器上的php服务器。

我想使用此基础架构来托管多个docker容器(每个容器在不同的唯一端口上都是自己的Web服务器)。

这些独特的网络应用程序中的每一个都需要在互联网上提供,并且具有独特的子域名。

由于一个实例对于所有Docker容器都不够,我需要将它们分布在多个实例上。

如何在多个实例上托管数百个docker容器,而一个nginx-proxy容器使用它的唯一端口执行路由以将子域映射到每个Web应用程序容器?

E.g. 

app1.mydomain.com --> docker container exposing port 10001
app2.mydomain.com --> docker container exposing port 10002
app3.mydomain.com --> docker container exposing port 10003
....
...

如果我使用nginx-proxy容器,则很容易将每个端口号映射到不同的子域。所有Docker容器与nginx-proxy容器在同一实例中都是如此。

但是我可以将它映射到托管在不同实例上的docker容器。我打算使用弹性beanstalk为额外的docker容器创建新实例。

现在nginx在一个实例上运行,而在不同的实例上有容器。

如何实现托管在映射到唯一子域的单独docker容器上的数百个Web应用程序的最终目标?

1 个答案:

答案 0 :(得分:1)

老实说,你的问题对我来说并不十分清楚。看起来你可以在每个实例中部署一个Nginx容器,为你拥有的每个app容器配置代理配置,并且随着集群的扩展,所有它们也会有一个Nginx。所以,你可以在它上面设置一个ELB(Elastic Beanstalk原生支持它),你就会很好。

尽管如此,我认为您打算将Elastic Beanstalk推向艰难。我的意思是,它不应该以这种方式使用,就像一个大而通用的Docker集群。 Elastic Beanstalk的构建是为了方便应用程序部署,而现在容器只是可用的平台之一(尽管它不是语言或框架,当然不是人们)。但是Elastic Beanstalk不是容器管理器。

因此,在我看来,有意义的是每个Beanstalk应用程序部署一个容器,并在其上面安装ELB,因此您不必担心底层机器及其IP。这样,您可以轻松设置前端代理来路由请求,因为您有一个应用程序池的永久地址。作为独立的游泳池,他们可以独立扩展,等等。

有一些更复杂的解决方案试图解决在广泛的单个集群中部署容器的问题,例如Google's Kubernetes,并跟踪它们并为每个应用程序组提供端点。此外,还有最近发布的动态反向代理解决方案,如this one,并且可能每天都会出现许多其他解决方案,但所有这些都需要大量定制。但是,在这种情况下,我们不是在谈论AWS解决方案。