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

时间:2015-07-15 22:32:52

标签: scala docker elastic-beanstalk dockerhub sbt-docker

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

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

这是我目前的流程:

  1. 要生成我的项目工件,我正在使用sbt-docker插件。这个 插件生成项目工件(jar和Dockerfile) [应用路由] /目标/搬运工。
  2. 我将这些工件(jar和Dockerfile)上传到git中 存储库(目前正在“手动”执行此操作)。
  3. 作为Amazon's Elastic Beanstalk requires for Docker multi-containers,我需要一个在线存储库来“托管” 图片:可以是Docker-HubQuay.io。要么我 有一个git存储库,在其中可以找到工件 能够生成项目的图像。
  4. 在Elastic Beanstalk中创建了多容器环境, 我继续上传详细信息的Dockerrun.aws.json文件 亚马逊的文档也是 .ebextensions / elb-listeners.config文件的设置 ports(因为我正在运行多个应用程序)
  5. 魔法!亚马逊生成我的环境。相同的网址,不同的端口 对于我的所有应用程序(在步骤中的配置文件中指定) 4
  6. 我很想找到一种方法来自动执行第2步 因为这需要我为每个应用设置一个额外的回购。我的应用程序托管在一个git仓库中,每个托管步骤1 中生成的工件以便能够执行第3步的每个仓库都有一个“额外”仓库

2 个答案:

答案 0 :(得分:3)

如果您愿意在步骤1中使用其他SBT插件,则可以自动执行第2步。

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

  1. 使用project / plugins.sbt中的sbt-native-packager plugin
  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。阅读their tutorial
  7. 您的第2步变为sbt docker:publish。现在,您的quay.io帐户应包含与本地Docker守护程序相同的IMAGE ID。
  8. 在AWS方面继续执行步骤3+ ...

答案 1 :(得分:0)

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

希望有所帮助。