如何使用Elastic Beanstalk多容器环境共享AWS EC2实例

比方说,我有两个Docker容器1和2.我想要使用多容器Docker Images将它们部署到AWS Elastic Beanstalk,以便我有以下EC2实例来降低成本:

testing环境

  • ELB应用程序负载平衡器(多less?)
  • EC2实例1
    • docker集装箱1
    • docker集装箱2

生产环境

  • ELB应用程序负载平衡器(多less?)
  • EC2实例2

    • docker集装箱1
    • docker集装箱2
  • EC2实例3

    • docker集装箱1
    • docker集装箱2

所以我的问题是:

  1. 我需要创build多less个Elastic Beanstalk应用程序? 从文档中不清楚。
  2. 如何获取Container的1和2来共享EC2实例。
  3. 负载平衡器是为你创build的,但是每个docker容器都需要它自己的端口80,所以需要创build多less个ELB。 这个怎么用?

我需要创build多less个Elastic Beanstalk应用程序?

您可以使用多个环境下的单个应用程序获得您想要的设置。 这在环境的Elastic Beanstalk文档中进行了描述。 为了您的使用情况,您将为同一个应用程序configuration“生产”和“testing”环境。

您的环境可以有不同的configuration,因此您可以在testing环境中使用更小(更便宜)的EC2实例。

您也可以有不同的自动缩放规则,因此在您描述的环境中,您至less在testing环境中指定1个EC2实例,但在生产中至less指定2个EC2实例。

我怎样才能让Container 1和2共享EC2实例?

我想你是问如何将两个Docker容器部署到作为Docker主机的单个EC2实例上?

这在Dockerrun.aws.json文件中定义,该文件logging在Elastic Beanstalk指南中 。 注意 – 你应该参考第2版的多容器Docker应用程序。

该文件声明您希望如何configuration您的环境。 您的问题的相关位是containerDefinitions ,其中包含您将部署到主机(基础EC2实例)的Docker容器数组。

当Elastic Beanstalk扩展您的环境时,它会将Dockerrun文件中的configuration应用于新实例。 所以,如果您的示例生产环境扩展到三个实例,则最终会有三个实例运行相同的两个容器。

需要创build多less个ELB?

根据文档 ,您将在每个环境中使用一个Elastic Load Balancer:

每个环境都有一个指向负载均衡器的CNAME(URL)。

在上面提到的Dockerrun文件的containerDefinition部分中,您定义了容器的端口映射。 所以,如果你的例子中的一个容器运行Nginx,那么你的Dockerrun文件中就会有类似这样的configuration:

 "name": "nginx-proxy", "image": "nginx", "essential": true, "memory": 128, "portMappings": [ { "hostPort": 80, "containerPort": 80 } ], 

然后,将此configuration应用于运行您的容器configuration的任何实例 – 当负载均衡器将请求路由到该特定实例时,会将其转发到侦听端口80的容器。