【问题标题】:Continuous Deployment of Docker Compose App to AWS/EC2将 Docker Compose 应用程序持续部署到 AWS/EC2
【发布时间】:2019-05-04 00:23:40
【问题描述】:

我一直在尝试寻找一种有效的方法来处理使用 Docker compose 设置和 AWS 托管的持续部署。

到目前为止,我已经研究了 CodeDeploy、S3 存储桶和 ECS。我的应用程序相对较小,只有 3 个 docker 服务、一个 Django 应用程序、NGINX 和 PostgreSQL。我找不到任何将 CodeDeploy 与 Docker compose 结合使用的可靠信息,而且由于 ECS 规模小,似乎不切实际。我考虑过使用 S3 存储桶,但这似乎比仅使用 git 或 scp 部署我的应用程序更好。

在 AWS 上部署 docker compose 设置的标准方法是什么?如果可能的话,我想在运行测试后使用 Bitbucket Pipelines 或 CircleCI 在手动触发的步骤中执行部署。但是我一直无法找到一个可以轻松让我复制代码的解决方案(它位于生产分支的 git repo 中,并且是我目前将代码放到生产服务器上的方式)。

【问题讨论】:

  • 复制代码的标准方法是 docker build 将其放入图像并将其推送到存储库(在 AWS 上下文中,可能是 ECR)。
  • 这个后面的问题可能会对你有所帮助:stackoverflow.com/questions/61122181/…

标签: amazon-web-services docker amazon-ec2 docker-compose


【解决方案1】:

在你的情况下我会做的是:

1 - 如果需要,请将您的 docker-compose.yml 文件(或您所称的)更新到版本 3 或更高版本,以使用 swarm

2 - 在您的管道构建所需的所有图像,并将它们推送到注册表。

3 - 在您的管道中scp 您的撰写文件到管理器节点。

4 - 使用 swarm (docker stack deploy -c <your-docker-compose-file> your_app_name) 部署您的应用程序。这样您就可以轻松处理滚动更新和扩展。

注意如果要使用多个节点you need to open a few ports in them

【讨论】:

  • 对于像这样的小应用来说,使用 swarm 似乎有些过火。没有它我能实现同样的目标吗?
【解决方案2】:

我想为@gasc 回答添加一些可能性

  1. 如果您制作一个 cloudformation 模板来部署您的 EC2 资源以及所有必需的组、自动扩展和其他东西会更好。

  2. 然后创建安装了 docker compose 的 AMI,或者您的 ec2 环境所需的任何其他东西。

  3. 然后你就可以使用code deploy pipeline了,这里也aws提供了private container registry可能你想用那个

  4. 其余步骤相同,只是将撰写文件 SCP 导入 EC2 启动 docker-compose up 命令,你就完成了。

如果您需要更多帮助,请告诉我,我愿意讨论

【讨论】:

  • 这正是我正在寻找的解决方案。但是,我尝试实现它,但在弄清楚如何设置模板和 appspec.yml 文件时遇到了麻烦。您能否提供一些设置模板、编码部署的 appspec 以及在 AMI 上设置 compose 的示例?
  • 请在 appspec.yml 中更具体一些,您只需启动一个 cloudfomation 模板并使用命令构建您的新 docker 镜像,然后将您的代码文件和 docker-compose.yml 复制到您的 ec2,您还需要创建您的 AMI,这些事情很简单,可以从 aws 官方文档中理解,但如果您需要有关特定内容的帮助,请告诉我
【解决方案3】:

我看到您提到,ECS 对于如此小的规模似乎不切实际——在我看来,并非必须如此。它需要您将 docker-compose.yml 重写为任务和服务定义,但由于服务不多,因此不会花费您太多时间。

【讨论】:

  • 我想试一试。你能提供一个简单的例子来说明我需要如何更改我的撰写文件吗?
  • 原来ecs-cli直接支持compose文件! docs.aws.amazon.com/AmazonECS/latest/developerguide/… 我个人没有使用这种方法,我通过 CloudFormation 使用任务和服务定义,类似于本示例中介绍的方法:github.com/aws-samples/ecs-refarch-cloudformation/blob/master/…。任务定义对应于 compose 文件中的单个服务定义,并且大部分参数都可以直观地映射。
  • @Progressive 所以我只需要写一个任务定义 YAML 文件?我正在查看文档,我对如何编写任务定义配置文件有点困惑。我只想在主机上运行 docker compose,最好能够从 CircleCI 和/或 bitbucket 管道自动部署到它。此外,似乎 ecs-cli 只是使用 docker compose 语法进行自己的任务管理,实际上并不支持 docker compose。
  • 您可以使用您的 docker-compose 文件通过 ecs-cli 在 ECS 上运行任务,这是来自文档 docs.aws.amazon.com/AmazonECS/latest/developerguide/… 的一些参考(我知道 AWS 的文档有时可以,让我们说,不好)。
  • 如果你想跳过使用撰写文件,那么是的,你必须为任务定义编写 yaml,从这个 yaml 规范创建一个任务定义(例如使用docs.aws.amazon.com/cli/latest/reference/ecs/…),然后,你可以实际使用docs.aws.amazon.com/cli/latest/reference/ecs/run-task.html 运行您的任务。
猜你喜欢
  • 1970-01-01
  • 2020-10-12
  • 2012-04-04
  • 2016-09-29
  • 2017-07-07
  • 2021-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多