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

时间:2017-07-12 11:28:29

标签: amazon-web-services docker amazon-ec2 elastic-beanstalk elastic-load-balancer

假设我有两个Docker容器1和2.我想使用多容器Docker镜像将它们部署到AWS Elastic Beanstalk,这样我就可以使用以下EC2实例来降低成本:

测试环境

  • ELB应用程序负载均衡器(多少?)
  • EC2实例1
    • Docker Container 1
    • Docker Container 2

生产环境

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

    • Docker Container 1
    • Docker Container 2
  • EC2实例3

    • Docker Container 1
    • Docker Container 2

所以我的问题是:

  1. 我需要创建多少个Elastic Beanstalk应用程序?目前还不清楚文件。
  2. 我怎样才能获得Container 1& 2分享EC2实例。
  3. 为您创建了负载均衡器,但每个docker容器需要它自己的端口80,因此需要创建多少个ELB。这是如何工作的?

1 个答案:

答案 0 :(得分:4)

我需要创建多少个Elastic Beanstalk应用程序?

您可以使用包含多个环境的单个应用程序来获取您喜欢的设置。这在Elastic Beanstalk Documentation环境中有所描述。对于您的用例,您将拥有一个" production"和"测试"为同一个应用程序配置的环境。

您的环境可以有不同的配置,因此您可以为测试环境使用更小(更便宜)的EC2实例。

您还可以使用不同的自动缩放规则,因此在您所描述的环境中,您将在测试环境中指定至少1个EC2实例,但在生产中至少指定2个EC2实例。

我怎样才能获得Container& 1& 2分享EC2实例?

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

这是在Dockerrun.aws.json文件中定义的,Elastic Beanstalk guide中记录了该文件。注 - 您应该参考版本2的多容器Docker应用程序。

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

当Elastic Beanstalk扩展您的环境时,它会将Dockerrun文件中的配置应用于新实例。因此,如果您的示例生产环境扩展为具有三个实例,那么您最终将运行相同的两个容器的第三个实例。

需要创建多少个ELB

根据documentation,每个环境都有一个Elastic Load Balancer:

  

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

在上面提到的Dockerrun文件的containerDefinition部分中,您可以定义容器的端口映射。因此,如果您的示例中的一个容器正在运行Nginx,那么您的Dockerrun文件中的配置将与此类似:

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

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