用于多容器 docker 的 Elastic beanstalk 与 ECS

Posted

技术标签:

【中文标题】用于多容器 docker 的 Elastic beanstalk 与 ECS【英文标题】:Elastic beanstalk vs ECS for multi container docker 【发布时间】:2017-05-07 01:27:01 【问题描述】:

在多容器系统上工作。我正在评估弹性豆茎和 ECS 的优缺点。有很多类似this 的问题说ECS 与EB 相比对容器的控制更精确,但他们没有列出来。在我看来,这是它们之间的区别:

+--------------------------------------------+--------------------------------------------------+
|              Elastic Beanstalk             |                        ECS                       |
+--------------------------------------------+--------------------------------------------------+
| Natively support auto-scaling and load     | Auto-scaling can be done with                    |
| balancing. Has the ability to deploy       | some extra efforts. But other AWS resources      |
| other AWS resources along with the         | cannot be deployed with ECS.                     |
| containers.                                |                                                  |
+--------------------------------------------+--------------------------------------------------+
| Container definitions are written in       | Container definitions has to be written in a     |
| dockerrun.aws.json file. All the links     | separate task definition file. Scaling of the    |
| can be written here. This is more like     | container can be specified in                    |
| docker compose file.                       | service definitions.                             |
+--------------------------------------------+--------------------------------------------------+
| Scaling happens based on CloudWatch        | Here, we have a precise control to scale         |
| metric. But when a new instance is         | a particular task (container). This is more      |
| launched, the whole containers in          | like declarative. It does not take in to account |
| task definition file will be launched      | about the instances, it maintains the count of   |
| again (imperative), even though some       | tasks correctly. Scales based on the             |
| of the containers actually has no traffic. | CPU/Memory usage of a specific container.        |
+--------------------------------------------+--------------------------------------------------+

我不确定第三点。纠正我如果我错了。如果这两者之间还有其他差异,请告诉我。

【问题讨论】:

【参考方案1】:

第一点:如果您不使用 Elastic Beanstalk 并希望在您的应用程序中部署其他 AWS 资源,请创建一个 CloudFormation 模板并使用 CloudFormation 更改集来启动、升级和拆除您的应用程序。

关于第三点,Elastic Beanstalk 使用了 AWS Auto Scaling 功能,该功能仅适用于创建和删除 EC2 实例的级别。因此,如果您在 Elastic Beanstalk 中使用单容器/多容器环境,则向上扩展不仅会创建另一个容器,还会创建一个运行 Docker 的整个 EC2 实例以及所有相同的容器。也可以从 CloudFormation 模板使用 Auto Scaling,而无需使用 Elastic Beanstalk。它仍然只适用于 EC2 实例级别。

另一个选项是使用 Elastic Beanstalk 及其 Auto Scaling,将环境设置为带有您要扩展的容器的单个容器 docker,然后将其他容器添加为 AWS::ECS::Service custom resources。例如,您的单个容器可以是处理繁重的前端,而另一个容器可以是共享数据存储。这样,您可以从 Elastic Beanstalk 获得良好的版本控制/部署/推出,但拥有单实例容器(每个 Elastic Beanstalk 环境)。

【讨论】:

以上是关于用于多容器 docker 的 Elastic beanstalk 与 ECS的主要内容,如果未能解决你的问题,请参考以下文章

Elastic Beanstalk 多容器 Docker 环境变量

Elastic Beanstalk 上的 NodeJS 多容器 Docker

Elastic Beanstalk 上的多容器 Docker 环境中的容器连接被拒绝

具有私有存储库的 Elastic Beanstalk 多容器 Docker CannotPullContainerError

使用 cloudformation 在 Elastic Beanstalk 上启动 docker 多容器

如何在 Elastic Beanstalk 多容器 Docker 环境中安装 composer 依赖项