在 Elasticbeanstalk for Scala Apps 中为 Docker 多容器环境部署和托管工件的最佳实践是什么?

What are the best practices to deploy and host artifacts for a Docker Multicontainer environment in Elasticbeanstalk for Scala Apps?

我有几个 Scala 应用程序,我想在 Amazon 的 Elastic Beanstalk 上的 Docker 多容器环境中部署它们。

整个过程似乎比我预期的要复杂一些。 所以我真的很期待听到一些关于最佳实践和其他方法的反馈,以改进我的整个流程并能够 "automate" 一些步骤(如果可能的话)。

这是我当前的流程:

  1. 为了生成我项目的工件,我使用了 sbt-docker 插件。这个 插件在下面生成项目工件(罐子和 Docker 文件) [应用程序路由]/target/docker.
  2. 我将这些工件(罐子和 Docker 文件)上传到 git 存储库(目前正在这样做 "manually")。
  3. 因为 Amazon 的 Elastic Beanstalk 需要 Docker 多容器,我需要一个在线存储库来 "host" 图片:可能是 Docker-Hub or Quay.io。要么需要我 拥有一个 git 存储库,它可以在其中找到要创建的工件 能够生成项目的图像。
  4. 在 Elastic Beanstalk 中创建了多容器环境, 我继续上传 Dockerrun.aws.json 文件,详见 亚马逊的文档以及 .ebextensions/elb-listeners.config 文件的设置 端口(因为我 运行 多个应用程序)
  5. 神奇!亚马逊生成我的环境。相同 url,不同的端口 对于我所有的应用程序(在 step 中的配置文件中指定 4.

我很想找到一种方法来自动化 第 2 步 因为这需要我有一个额外的每个应用程序的回购协议。我将我的应用程序托管在 git 存储库中,并且每个应用程序都有一个 "extra" 存储库,其中我托管了在 步骤 1 中生成的工件,以便能够执行步骤 3.

我对 Scala 不是很熟悉,但我相信这些工件可能是由 Jenkins/CircleCI 在你的容器中生成的,它是在 Jenkins/CircleCI 上构建的,然后在你的 [=16] 中引用适当的图像标签=].

希望对您有所帮助。

如果您愿意为第 1 步使用不同的 SBT 插件,那么您可以自动执行第 2 步。

虽然 quay.io 支持从 GitHub 构建图像,但他们 不需要它 。 (您可以将本地 Docker 图像直接发布到您的 quay.io 存储库。)

  1. 使用 project/plugins.sbt.
  2. 中的 sbt-native-packager plugin
  3. 在build.sbt中设置插件设置,例如:dockerRespository := Some("quay.io/myaccount")
  4. 您的第 1 步变为:sbt docker:stage
  5. 其次是:sbt docker:publishLocal
  6. 使用 docker images 检查您的图像名称和标签。新图像的名称应类似于 quay.io/myaccount/app
  7. 在发布到 quay.io 之前,您必须 docker login quay.io。阅读 their tutorial.
  8. 您的第 2 步变为 sbt docker:publish。现在,您的 quay.io 帐户应该包含与本地 Docker 守护程序相同的图像 ID。

在 AWS 端继续执行步骤 3+...