在亚马逊ecs上的集装箱交货

我正在使用Amazon ECS在uat / production上自动部署容器。 什么是最好的方法来做到这一点?

我有几个前端客户端REST API

我应该使用nginx将我的api容器打包在同一个容器中吗? 并与其他前端客户端做同样的事情。

或者我必须写一个大的任务定义,以汇集所有我的容器(db,nginx,php,api,clients):(但是这意味着我应该在每次push uat / prod时重新部署所有的基础设施

我很困惑。

我会避免在一个容器中包含太多。 尝试和蒸馏你的容器一个进程做一件事。 如果您所做的只是为您的前端提供一个REST API供您使用,那么只需将其中的重要内容放入即可。

根据我的经验,您还希望您的ECS任务能够正常处理故障并重新启动,而且容器越复杂,越难做到。

根据你的要求,我会考虑使用ELB而不是nginx,你可以让你的ECS集群指向一个ELB,而不必处理那件作品。

不要使用ECS – 这太粗糙了。 我曾经把它当作舞台/制作环境的一个平台,在部署过程中出现了一些奇怪的问题 – 有时候它运行得很好,有时候也不行(有着相同的Docker镜像)。 ECS没有提供明确的集装箱部署和维护模型。

还有一个好的,稳定的和预测性的select – Docker Cloud服务。 这是Docker收购的新工具(又名Tutum)。 我换了CI / CD来使用它,我们对此感到满意。

  1. 将Amazon用户凭据绑定到Docker Cloud帐户。 Docker Cloud使用AWS(或其他提供者)API来创build适当的计算机实例。
  2. 创build节点。 selectAmazon EC2实例types和存储参数,安全组等。 新实例将包含已安装的Docker软件和pipe理处理来自Docker Cloud(部署,销毁等)消息的容器。
  3. 创build堆栈文件,请参阅https://docs.docker.com/docker-cloud/apps/stack-yaml-reference/ 。 Stackfile是你需要的容器组的定义。 您可以使用特定的Stackfile选项(如部署策略)为容器定义不同的缩放/分布模型,请参阅https://docs.docker.com/docker-cloud/apps/stack-yaml-reference/#deployment-strategy-1
  4. 在AWS中为新实例定义ELBconfiguration。

PS我不是Docker团队的成员,我喜欢其他AWS服务:)。

这里是我关于这个话题的两分钱,这个问题与ecs没有什么关系,它适用于在Docker上部署应用的任何机构。

我build议将容器分开,一个用于nginx,一个用于API。 如果他们需要位于同一个实例上,那么在ECS上,您可以将它们定义为同一任务的一部分,在kubernetes上可以使它们成为同一个pod的一部分。 定义nginx和api容器之间的docker链接。 这将允许nginx进程与api容器进行通信,而不将api容器暴露给主机。

使用容器运行平台(如kubernetes和ecs)的一个优点是,它们可以确保每个容器始终运行,并在其中一个进程/容器停止运行时dynamic重新启动。

分离容器将允许这些平台分别监视这两个过程。 将两者合并到一个容器中时,泊坞窗容器只能在其中一个进程中运行,因此您将失去其中一个进程的自动修复优势。

从nginx移动到ELB也不是一个简单的解决scheme,你可能在nginx上configuration了redirect和其他东西,这在ELB(截止date)是不可用的。 如果您还需要ELB,将ELB的请求转发到nginx端口是没有什么坏处的。