我正在使用Amazon ECS在 uat/production 上自动部署我的容器。最好的方法是什么?
我有一个带有几个前端客户端的 REST api
我应该将我的 api 容器与 nginx 打包在同一个容器中吗?并对其他前端客户端做同样的事情。
或者我必须编写一个大任务定义来汇集我所有的容器(db、nginx、php、api、客户端):(,但这意味着我应该在每次推送 uat/prod 时重新部署我的所有基础设施
我很困惑。
我正在使用Amazon ECS在 uat/production 上自动部署我的容器。最好的方法是什么?
我有一个带有几个前端客户端的 REST api
我应该将我的 api 容器与 nginx 打包在同一个容器中吗?并对其他前端客户端做同样的事情。
或者我必须编写一个大任务定义来汇集我所有的容器(db、nginx、php、api、客户端):(,但这意味着我应该在每次推送 uat/prod 时重新部署我的所有基础设施
我很困惑。
不要使用 ECS - 它太粗糙了。我将它用作我们的暂存/生产环境的平台,并且在部署过程中遇到了奇怪的问题 - 有时它运行良好,有时 - 不是(使用相同的 Docker 映像)。ECS 提供了不明确的容器部署和维护模型。
还有另一个好的、稳定的和可预测的选择——Docker 云服务。它是被 Docker 收购的新工具(又名 Tutum)。我将 CI/CD 切换为使用它,我们对此感到满意。
PS 我不是 Docker 团队的成员,我喜欢其他 AWS 服务 :)。
我会避免在一个容器中包含太多。尝试将您的容器提炼成一个过程来做一件事。如果您所做的只是提供一个 REST API 供您的前端使用,那么只需为此添加必要的部分即可。
根据我的经验,您还希望您的 ECS 任务能够优雅地处理故障并重新启动,并且您的容器越复杂,就越难做到这一点。
根据您的要求,我会考虑使用 ELB 而不是 nginx,您可以将您的 ECS 集群指向 ELB,而根本不必处理该部分。
这是我关于这个话题的两分钱,这个问题与 ecs 并没有真正的关系,它适用于任何在 docker 上部署他们的应用程序的机构。
我建议将容器分开,一个用于 nginx,一个用于 API。如果它们需要位于同一个实例上,在 ECS 上,您可以将它们定义为同一任务的一部分,在 kubernetes 上,您可以使它们成为同一个 pod 的一部分。在 nginx 和 api 容器之间定义一个 docker 链接。这将允许 nginx 进程与 api 容器对话,而 api 容器不会将其端口暴露给主机。
使用容器运行平台(如 kubernetes 和 ecs)的一个优点是,它们确保每个容器始终运行,并在其中一个进程/容器出现故障时动态重启。
分离容器将允许这些平台分别监控这两个进程。当您将两者组合到一个容器中时,docker 容器只能在前台进程之一运行,因此您将失去自动修复其中一个进程的优势。
从 nginx 迁移到 ELB 也不是一个简单的解决方案,您可能在 nginx 上配置了重定向和其他东西,这些在 ELB 上不可用(截至日期)。如果您还需要 ELB,将请求从 ELB 转发到 nginx 端口是没有害处的。