0

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

我有一个带有几个前端客户端的 REST api

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

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

我很困惑。

4

3 回答 3

1

不要使用 ECS - 它太粗糙了。我将它用作我们的暂存/生产环境的平台,并且在部署过程中遇到了奇怪的问题 - 有时它运行良好,有时 - 不是(使用相同的 Docker 映像)。ECS 提供了不明确的容器部署和维护模型。

还有另一个好的、稳定的和可预测的选择——Docker 云服务。它是被 Docker 收购的新工具(又名 Tutum)。我将 CI/CD 切换为使用它,我们对此感到满意。

  1. 将 Amazon 用户凭证绑定到 Docker Cloud 帐户。Docker Cloud 使用 AWS(或其他提供商)API 来创建适当的计算机实例。
  2. 创建节点。选择 Amazon EC2 实例类型和存储、安全组等参数。新实例将包含已安装的 docker 软件和管理容器,用于处理来自 Docker Cloud 的消息(部署、销毁等)。
  3. 创建 Stackfile,请参阅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 中为您的新实例定义 ELB 配置。

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

于 2016-05-13T23:15:34.123 回答
1

我会避免在一个容器中包含太多。尝试将您的容器提炼成一个过程来做一件事。如果您所做的只是提供一个 REST API 供您的前端使用,那么只需为此添加必要的部分即可。

根据我的经验,您还希望您的 ECS 任务能够优雅地处理故障并重新启动,并且您的容器越复杂,就越难做到这一点。

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

于 2016-05-13T21:34:59.060 回答
1

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

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

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

分离容器将允许这些平台分别监控这两个进程。当您将两者组合到一个容器中时,docker 容器只能在前台进程之一运行,因此您将失去自动修复其中一个进程的优势。

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

于 2016-05-14T18:59:07.357 回答