我有几个 Scala 应用程序,我想将它们部署在 Amazon 的 Elastic Beanstalk 上的 Docker 多容器环境中。
整个过程似乎比我预期的要复杂一些。 所以我真的很期待听到一些关于最佳做法和其他方法的反馈,以改进我的整个流程并能够“自动化”某些步骤(如果可能的话)。
这是我目前的流程:
- 为了生成项目的工件,我使用了 sbt-docker插入。这个 插件在下生成项目工件(jar 和 Dockerfile) [app-route]/target/docker。
- 我将这些工件(jar 和 Dockerfile)上传到 git 存储库(目前“手动”执行此操作)。
- 作为 Amazon's Elastic Beanstalk requires for Docker multi-containers ,我需要一个在线存储库来“托管” 图片:可能是 Docker-Hub或 Quay.io .要么要求我 拥有一个 git 存储库,它可以在其中找到要放置的工件 能够生成项目的图像。
- 在 Elastic Beanstalk 中创建了多容器环境后, 我继续上传Dockerrun.aws.json文件中详细说明 亚马逊的文档以及 .ebextensions/elb-listeners.config 文件,其中包含 端口(因为我正在运行多个应用程序)
- 魔法!亚马逊生成我的环境。相同的网址,不同的端口 对于我所有的应用程序(如 步骤中的配置文件中指定的那样 4.
我很想找到一种方法来自动化第 2 步。 因为这需要我为每个应用程序提供一个额外的存储库。我将我的应用程序托管在一个 git 存储库中,并且每个我都有一个“额外”存储库,我在其中托管 步骤 1 中生成的工件,以便能够执行 步骤 3 .
最佳答案
如果您愿意为第 1 步使用不同的 SBT 插件,那么您可以自动执行第 2 步。
虽然 quay.io 支持从 GitHub 构建您的图像,但它们不需要它。 (您可以将本地 Docker 镜像直接发布到您的 quay.io 存储库。)
- 使用 sbt-native-packager plugin在 project/plugins.sbt 中。
- 在 build.sbt 中设置插件设置,例如:
dockerRespository := Some("quay.io/myaccount")
- 你的第一步变成:
sbt docker:stage
- 后跟:
sbt docker:publishLocal
- 使用
docker images
检查您的图像名称和标签。新图像的名称应类似于quay.io/myaccount/app
- 在发布到 quay.io 之前,您必须
docker login quay.io
。阅读 their tutorial . - 您的第 2 步变为
sbt docker:publish
。现在,您的 quay.io 帐户应该包含与本地 Docker 守护程序相同的 IMAGE ID。
在 AWS 端继续执行步骤 3+...
关于scala - 在 Elasticbeanstalk for Scala Apps 中为 Docker 多容器环境部署和托管工件的最佳实践是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31442385/