如何与 Elastic Beanstalk 多容器环境共享 AWS EC2 实例
How to Share AWS EC2 Instances with Elastic Beanstalk Multi-Container Environments
假设我有两个 Docker 容器 1 和 2。我想使用多容器 Docker 图像将它们部署到 AWS Elastic Beanstalk,以便我拥有以下 EC2 实例以降低成本:
测试环境
- ELB 应用程序负载均衡器(多少?)
- EC2 实例 1
- Docker 容器 1
- Docker 容器 2
生产环境
- ELB 应用程序负载均衡器(多少?)
EC2 实例 2
- Docker 容器 1
- Docker 容器 2
EC2 实例 3
- Docker 容器 1
- Docker 容器 2
所以我的问题是:
- 我需要创建多少个 Elastic Beanstalk 应用程序?从文档中不清楚。
- 如何让容器 1 和 2 共享 EC2 实例。
- 负载均衡器已为您创建,但每个 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 的容器。
假设我有两个 Docker 容器 1 和 2。我想使用多容器 Docker 图像将它们部署到 AWS Elastic Beanstalk,以便我拥有以下 EC2 实例以降低成本:
测试环境
- ELB 应用程序负载均衡器(多少?)
- EC2 实例 1
- Docker 容器 1
- Docker 容器 2
生产环境
- ELB 应用程序负载均衡器(多少?)
EC2 实例 2
- Docker 容器 1
- Docker 容器 2
EC2 实例 3
- Docker 容器 1
- Docker 容器 2
所以我的问题是:
- 我需要创建多少个 Elastic Beanstalk 应用程序?从文档中不清楚。
- 如何让容器 1 和 2 共享 EC2 实例。
- 负载均衡器已为您创建,但每个 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 的容器。