在AWS上使用Docker Compose的最佳方法是什么?

53次阅读
没有评论

问题描述

没有使用AWS的经验,想知道在使用Docker Compose构建的环境嵌入时,最佳方法是什么(一个包含两个服务的简单应用程序,API和Redis)。他目前遇到了以下可能性:
– 创建一个EC2实例,通过SSH连接,配置环境并手动构建和运行环境(是否可以自动化?)
– 创建一个ECS,将Docker镜像上传到ECR,设置集群和负载均衡器,以便根据来自ECR的镜像开始构建环境
– 使用Elastic Beanstalk,使用Docker创建应用程序,并从CLI级别进行管理(eb init,create,deploy),它们有什么不同?(另外连接CodePipeline和可能的GH Actions)

在这种情况下,你们公司在这些情况下采用的方法是什么,你们应该特别注意什么?

解决方案

请注意以下操作注意版本差异及修改前做好备份。

最佳方法:使用AWS Fargate

根据你的需求,每种实现方式都会产生不同的环境。如果你只是部署了一个由几个可以组合的服务组成的应用程序,那么最好使用AWS Fargate。

以下是使用AWS Fargate的步骤:
1. 如果需要,创建一个VPC。
2. 定义安全组,用于定义允许的流量。
3. 为应用程序堆栈中的镜像设置ECR存储库。
4. 将docker-compose文件中的服务转换为ECS任务定义。
5. 决定如何管理持久数据。如果应用程序中包含Redis,可以考虑在堆栈中使用ElasticCache组件。
6. 决定如何公开服务(ENI?负载均衡器?)。
7. 还需要将IAM策略附加到各个实体,以便读取/写入ECR等。

你可以将上述步骤编写为一个或两个Terraform模块。一个用于网络配置(VPC,子网),一个用于应用程序本身(ECS集群,容量提供者,负载均衡器,ECR存储库等)。当然,这只是个人选择,你也可以使用CloudFormation堆栈来创建。

如果你的代码存储在Github上,可以使用Github Actions进行持续部署。

其他方法

  • 使用EC2实例:这种方法可能需要一些工作来自动化。服务器需要访问你的Docker仓库。此外,你需要设置一个虚拟私有云(VPC)和安全组(SG)来限制对它的访问。数据需要以某种方式持久化。你还需要维护服务器。
  • 使用Elastic Beanstalk:你需要直接上传代码并从那里配置部署。

AWS还提供了托管的API服务和Redis服务,这也是一个选择。

以上是一些建议,具体的最佳方法取决于你的业务需求。

正文完