在Elasticbeanstalk for Scala应用程序中部署和托pipeDocker多容器环境的最佳实践是什么?

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

整个过程似乎有点复杂,我期待。 所以我非常期待听到最佳实践和其他方法的反馈,以改善我的整个过程,并能够“自动化”一些步骤(如果可能的话)。

这是我目前的过程:

  1. 为了生成我的项目的工件,我使用了sbt-docker插件。 这个插件在[app-route] / target / docker下生成项目工件(jar和Dockerfile)。
  2. 我将这些工件(jar子和Dockerfile)上传到一个git仓库(目前这样做“手动”)。
  3. 由于Amazon的Elastic Beanstalk需要Docker多容器 ,因此我需要一个联机存储库来“托pipe”这些映像:可能是Docker-Hub或Quay.io。 要么我需要一个git仓库,在这个仓库中可以find工件来生成项目的图像。
  4. 在Elastic Beanstalk中创build了多容器环境之后,我继续上传Dockerrun.aws.json文件,详细信息请参阅Amazon的文档以及.ebextensions / elb-listeners.config文件中的端口设置(因为我是运行多个应用)
  5. 魔法! 亚马逊产生我的环境。 相同的url,为我所有的应用程序不同的端口(在第4步中的configuration文件中指定)。

我很想find一种方法来自动化步骤2 因为这要求我每个应用程序都有额外的回购。 我有我的应用程序托pipe在一个git回购,我有一个“额外”回购每个我主办的步骤1中产生的工件能够做第3步

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

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

  1. 在project / plugins.sbt中使用sbt-native-packager插件 。
  2. 在build.sbt中设置插件设置,如: dockerRespository := Some("quay.io/myaccount")
  3. 你的第一步变成: 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+ …

我对Scala并不熟悉,但是我相信这些工件可以由Jenkins / CircleCI内build的Jenkins / CircleCI生成,然后在Dockerrun.aws.json中引用相应的图片标签。

希望有所帮助。

Interesting Posts