11

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

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

这是我目前的流程:

  1. 为了生成我的项目的工件,我使用了sbt-docker插件。此插件在 [app-route]/target/docker 下生成项目工件(jar 和 Dockerfile)。
  2. 我将这些工件(jar 和 Dockerfile)上传到 git 存储库中(目前“手动”执行此操作)。
  3. 由于Amazon 的 Elastic Beanstalk 需要 Docker 多容器,我需要一个在线存储库来“托管”图像:可以是Docker-HubQuay.io。要么要求我有一个 git 存储库,它可以在其中找到能够生成项目图像的工件。
  4. 在 Elastic Beanstalk 中创建了多容器环境后,我继续上传Dockerrun.aws.json文件,如亚马逊文档中所述,以及包含端口设置的 .ebextensions/elb-listeners.config 文件(因为我是运行多个应用程序)
  5. 魔法!亚马逊生成我的环境。我所有应用程序的相同 url,不同端口(如第 4 步中的配置文件中指定的那样) 。

我很想找到一种自动化步骤 2的方法。 因为这要求我每个应用程序都有一个额外的回购。我将我的应用程序托管在一个 git repo 中,并且每个我都有一个“额外”的 repo,我在其中托管在step 1中生成的工件,以便能够执行step 3

4

2 回答 2

3

If you're willing to use a different SBT plugin for step 1, then you can automate step 2.

Although quay.io supports building your image from GitHub, they do not require it. (You can publish a local Docker image directly to your quay.io repository.)

  1. Use the sbt-native-packager plugin in project/plugins.sbt.
  2. Setup the plugin settings in build.sbt, like: dockerRespository := Some("quay.io/myaccount")
  3. Your step 1 becomes: sbt docker:stage
  4. Followed by: sbt docker:publishLocal
  5. Check your image names and tags with docker images. The new image should have a name like quay.io/myaccount/app
  6. Before you can publish to quay.io, you must docker login quay.io. Read their tutorial.
  7. Your step 2 becomes sbt docker:publish. Now your quay.io account should contain the same IMAGE ID as your local Docker daemon.

Proceed with steps 3+ on the AWS side...

于 2015-07-28T20:41:19.527 回答
0

我对 Scala 不是很熟悉,但是我相信工件可以由 Jenkins/CircleCI 在您的容器内生成,该容器基于 Jenkins/CircleCI 构建,然后在您的 Dockerrun.aws.json 中引用适当的图像标签。

希望有帮助。

于 2015-07-23T22:20:56.570 回答