假设我有两个 Docker 容器 1 和 2。我想使用多容器 Docker 镜像将它们部署到 AWS Elastic Beanstalk,以便拥有以下 EC2 实例来降低成本:
测试环境
生产环境
所以我的问题是:
最佳答案
我需要创建多少个 Elastic Beanstalk 应用程序?
您可以使用具有多个环境的单个应用程序获得所需的设置。这在 Elastic Beanstalk Documentation 中有描述。关于环境。对于您的用例,您将为同一应用程序配置“生产”和“测试”环境。
您的环境可以有不同的配置,因此您可以为您的测试环境使用更小(更便宜)的 EC2 实例。
您还可以有不同的自动扩展规则,因此在您描述的环境中,您将在测试环境中指定至少 1 个 EC2 实例,但在生产环境中至少指定 2 个 EC2 实例。
如何让 Container 的 1 & 2 共享 EC2 实例?
我想您是在问如何将两个 Docker 容器部署到充当 Docker 主机的单个 EC2 实例上?
这在 Dockerrun.aws.json
中定义。文件,记录在 Elastic Beanstalk guide .注意 - 对于多容器 Docker 应用程序,您应该引用版本 2。
该文件声明了您希望如何配置您的环境。您的问题的相关位是 containerDefinitions
它包含一组 Docker 容器,您可以将它们部署到您的主机(底层 EC2 实例)。
当 Elastic Beanstalk 扩展您的环境时,它会将 Dockerrun 文件中的配置应用于新实例。因此,如果您的示例生产环境扩展为具有三个实例,您最终会得到第三个实例运行相同的两个容器。
需要创建多少个 ELB
根据 documentation ,您将在每个环境中拥有一个 Elastic Load Balancer:
Every environment has a CNAME (URL) that points to a load balancer.
内
containerDefinition
您可以在上面提到的 Dockerrun 文件的部分定义容器的端口映射。因此,如果您的示例中的容器之一正在运行 Nginx,您的 Dockerrun 文件中将具有与此类似的配置:"name": "nginx-proxy",
"image": "nginx",
"essential": true,
"memory": 128,
"portMappings": [
{
"hostPort": 80,
"containerPort": 80
}
],
然后将此配置应用于运行您的容器配置的任何实例 - 当负载均衡器将请求路由到该特定实例时,它会转发到监听端口 80 的容器。
关于amazon-web-services - 如何与 Elastic Beanstalk 多容器环境共享 AWS EC2 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45056437/