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

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

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

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

这是我目前的流程:

  1. 为了生成项目的工件,我使用了 sbt-docker插入。这个 插件在下生成项目工件(jar 和 Dockerfile) [app-route]/target/docker。
  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 文件,其中包含 端口(因为我正在运行多个应用程序)
  5. 魔法!亚马逊生成我的环境。相同的网址,不同的端口 对于我所有的应用程序(如 步骤中的配置文件中指定的那样 4.

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

最佳答案

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

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

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

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

关于scala - 在 Elasticbeanstalk for Scala Apps 中为 Docker 多容器环境部署和托管工件的最佳实践是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31442385/

相关文章:

ruby - 无法在 Elastic Beanstalk 上使用 Puma 部署 Rails 应用程序

scala - 使用 scala 导入的文件字段中带有换行符 (LF) 的 Spark CSV 问题

docker - 覆盖 Docker 容器中的文件

scala - 如何使用功能状态生成随机数?

ubuntu - Docker build apt-get update 无法获取 403

python - Docker中的小型Miniconda,Keras和TensorFlow

apache - 如何查明 ElasticBeanStalk 中使用的 Apache 或 nginx Web 服务器版本?

deployment - Clojure/环 : How can I integrate my clojure app with a java build process that is out of my control?

algorithm - Scala:测试阵列中等间隔频率的惯用方法是什么?

scala - 如何获取 Spark Dataframe 上按结果分组的元组?