在AWS Elastic Beanstalk中使用Docker有什么优势?

我在AWS Elastic Beanstalk上部署了几个网站,然后我听说Docker,所以我想我可以尝试一下这个小企业电子商务网站(Lumen + Angularjs)。 我在互联网上search了所有的东西,但是由于没有使用Docker的经验,所以很难理解在AWS上使用Docker的好处。 我能find的是这样的一些描述:

优点

  • 依赖关系和服务器硬件的分离pipe理
  • 开发环境与生产环境相同(内部)
  • 依赖pipe理意味着不是每个人都需要关于技术堆栈的每个部分的深入了解
  • 使用AWS开发工具包或第三方工具轻松进行定制任务和服务调度
  • 充分利用可用资源与ECS将任务分配给具有足够可用资源的EC2在任务需要更多资源时使用自动扩展function

缺点

  • Build会产生一个需要上传的大文件
  • Docker NAT可以增加networking延迟(使用docker run -net = host,更多的docker性能信息请看这里)
  • 有些开发人员在提到docker这个词时已经适用
  • 有些应用程序需要修复才能在Docker上工作

有人能给我一些简单的例子或解释吗?

我认为Docker在Elastic Beanstalk上的主要优势在于,与在Elastic Beanstalk支持的特定运行时环境之一上运行应用程序相比,它提供的灵活性。

从官方文档 :

Elastic Beanstalk支持从Docker容器中部署Web应用程序。 使用Docker容器,您可以定义自己的运行时环境。 您可以select自己的平台,编程语言和其他平台不支持的任何应用程序依赖项(如程序包pipe理器或工具)。 Docker容器是自包含的,并包含您的Web应用程序运行所需的所有configuration信息和软件。

例如,我看到很多人问如何在Elastic Beanstalk上部署使用Tomcat以外的Java应用程序。 在添加Docker支持之前,您无法做到这一点。

如果您使用的是正式支持的Elastic Beanstalk运行时,那么我推荐使用Docker很困难。 它会将您的应用程序与AWS特定应用程序分开,理论上允许您在AWS之外轻松地运行应用程序。 如果您想要不惜一切代价避免供应商locking,或者只是想要了解最新的技术,那么Doc​​ker是一个不错的select。 否则,如果您已经在Elastic Beanstalk上运行了您的应用程序,则没有太多理由将其转换为Docker。

编辑:请注意,我的回复与使用Elastic Beanstalk专门使用Docker相关,正如您的问题标题所要求的那样。 我在你的问题中看到,你也可以参考ECS服务和AWS上更普遍的使用Docker。 这是一个更大的讨论,使用Docker而不是普通的EC2实例肯定有一些优势。

考虑到弹性豆杆有一定的环境。 为了添加额外的configuration,并在这些环境中有自定义的东西,你必须利用。 ebextensions 。

然而,ebextensions正在执行弹性beanstalk服务器的创build。 另外.eexxtensions并不像Docker镜像那样容易实现。

通过在弹性beanstalk上使用docker,您可以在不需要任何额外configuration的情况下准备好您的映像设置,而且当您需要不可变的架构时,docker非常棒。