亚马逊ecs上的集装箱交付

时间:2016-05-13 09:24:53

标签: docker continuous-integration continuous-deployment continuous-delivery amazon-ecs

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

我有一个 REST api,有几个前端客户端

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

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

我很困惑。

3 个答案:

答案 0 :(得分:1)

我会避免在一个容器中包含太多东西。尝试将容器提取到一个过程做一件事。如果你正在做的就是提供一个REST API供你的前端消费,那就把基本的部分放进去,而不是更多。

根据我的经验,您还希望您的ECS任务能够正常处理失败并重新启动,而容器越复杂就越难以实现。

根据您的要求,我会考虑使用ELB而不是nginx,您可以将您的ECS集群指向ELB,而不必处理该部分。

答案 1 :(得分:1)

不要使用ECS - 它太粗糙了。我正在使用它作为我们的登台/生产环境的平台,并且在部署期间遇到了奇怪的问题 - 有时它运行良好,有时候 - 没有(使用相同的Docker镜像)。 ECS没有提供容器部署和维护的明确模型。

还有另一个好的,稳定的和预测性的选择 - Docker Cloud服务。这是Docker收购的新工具(a.k.a. Tutum)。我将CI / CD切换为使用它,我们对它很满意。

  1. 将Amazon用户凭据绑定到Docker Cloud帐户。 Docker Cloud使用AWS(或其他提供商)API来创建适当的计算机实例。
  2. 创建节点。选择Amazon EC2实例类型和存储参数,安全组等。新实例将包含已安装的docker软件和管理容器,用于处理来自Docker Cloud的消息(部署,销毁和其他)。
  3. 创建堆栈文件,请参阅https://docs.docker.com/docker-cloud/apps/stack-yaml-reference/。 Stackfile是您需要的容器组的定义。您可以使用特定的堆栈文件选项(如部署策略)为容器定义不同的扩展/分布模型,请参阅https://docs.docker.com/docker-cloud/apps/stack-yaml-reference/#deployment-strategy-1
  4. 在AWS中为新实例定义ELB配置。
  5. P.S。我不是Docker团队的成员,我喜欢其他AWS服务:)。

答案 2 :(得分:1)

这是关于这个主题的两分钱,这个问题与ecs没有关系,它适用于在docker上部署应用程序的任何机构。

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

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

分隔容器将允许这些平台分别监视这两个进程。当您将两者合并为一个容器时,docker容器只能与前台中的一个进程一起运行,因此您将失去其中一个进程的自动修复优势。

从nginx转移到ELB也不是一个简单的解决方案,你可能在nginx上配置了重定向和其他配置,这在ELB上是不可用的(截止日期)。 如果您还需要ELB,那么将请求从ELB转发到nginx端口没有任何害处。