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

How to Share AWS EC2 Instances with Elastic Beanstalk Multi-Container Environments

假设我有两个 Docker 容器 1 和 2。我想使用多容器 Docker 图像将它们部署到 AWS Elastic Beanstalk,以便我拥有以下 EC2 实例以降低成本:

测试环境

生产环境

所以我的问题是:

  1. 我需要创建多少个 Elastic Beanstalk 应用程序?从文档中不清楚。
  2. 如何让容器 1 和 2 共享 EC2 实例。
  3. 负载均衡器已为您创建,但每个 docker 容器都需要它自己的端口 80,因此需要创建多少个 ELB。这是如何工作的?

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

您可以通过一个 应用程序 和多个 环境 获得您想要的设置。 Elastic Beanstalk Documentation on environments 中对此进行了描述。对于您的用例,您将为同一应用程序配置 "production" 和 "test" 环境。

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

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

如何让容器1&2共享EC2实例?

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

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

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

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

需要创建多少个ELB

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

Every environment has a CNAME (URL) that points to a load balancer.

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

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

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