在Elasticbeanstalk for Scala应用程序中为Docker Multicontainer环境部署和托管工件的最佳实践是什么?

may*_*r86 11 scala docker amazon-elastic-beanstalk dockerhub sbt-docker

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

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

这是我目前的流程:

  1. 要生成我的项目的工件我正在使用sbt-docker插件.此插件在[app-route]/target/docker下生成项目工件(jar和Dockerfile).
  2. 我将这些工件(jar和Dockerfile)上传到git存储库(目前正在"手动"执行此操作).
  3. 作为亚马逊的弹性魔豆需要多克多的容器,我需要一个网上信息库,以"托管"的图像:可能是码头工人,集线器Quay.io.要么我有一个git存储库,在其中可以找到能够生成项目图像的工件.
  4. 在Elastic Beanstalk中创建了多容器环境之后,我继续上传Amazon的文档中详述的Dockerrun.aws.json文件以及.ebextensions/elb-listeners.config文件以及端口的设置(因为我是运行多个应用)
  5. 魔法!亚马逊生成我的环境.相同的URL,我的所有应用程序的不同端口(在步骤4中的配置文件中指定).

我很想找到一种自动化第2步的方法. 因为这需要我为每个应用程序添加一个额外的回购.我的应用程序托管在一个git仓库中,我每个都有一个"额外"的仓库,我托管在步骤1中生成的工件,以便能够执行第3步.

Eri*_*ger 3

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

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

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

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