在亚马逊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来使用它,我们对此感到满意。
- 将Amazon用户凭据绑定到Docker Cloud帐户。 Docker Cloud使用AWS(或其他提供者)API来创build适当的计算机实例。
- 创build节点。 selectAmazon EC2实例types和存储参数,安全组等。 新实例将包含已安装的Docker软件和pipe理处理来自Docker Cloud(部署,销毁等)消息的容器。
- 创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 。
- 在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端口是没有什么坏处的。
- 从docker-compose到AWS
- Docker和“OpenSSL库在部署时报告了一个错误”
- 使用docker composer在AWS beanstalk上部署docker
- 具有Docker和EBS卷的EC2,在初始化期间在容器内安装EBS卷
- Kubernetes是否均匀分布在ec2集群中?
- 为什么我的gunicorn Python / Flask工人退出信号术语?
- 在Docker ECS容器上,Symfony无法连接到mysql数据库
- AWS Elastic Beanstalk Docker PHP应用程序
- 使用预configuration的Docker容器进行Elastic Beanstalk Django部署