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

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

假设我有两个 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 应用程序?从文档中不清楚。
  • 如何让 Container 的 1 和 2 共享 EC2 实例。
  • 为您创建了负载均衡器,但每个 docker 容器都需要它自己的端口 80,因此需要创建多少 ELB。这是如何运作的?
  • 最佳答案

    我需要创建多少个 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/

    相关文章:

    python - 寻找一种方法来取消引用包含在 python 命令调用中的 bash var

    java - 了解 tomcat docker 文件

    django - NGINX 不提供收集的静态文件

    docker:来自守护程序的错误响应:无法在网络 nat 上创建端点 nd:HNS 失败并出现错误:未指定的错误

    MySQL 索引创建缓慢(在 EC2 上)

    amazon-web-services - AWS CloudFormation 'UserData' 似乎不起作用

    node.js - AWS SAM CLI 单元测试 Lambda 函数 NodeJS

    Redshift 的 REST API

    amazon-web-services - 如何将 AWS Nitro Enclave 与 ECS 结合使用?

    docker - 如何在Windows上访问minikube docker守护程序?