在 Elasticbeanstalk for Scala Apps 中为 Docker 多容器环境部署和托管工件的最佳实践是什么?
What are the best practices to deploy and host artifacts for a Docker Multicontainer environment in Elasticbeanstalk for Scala Apps?
我有几个 Scala 应用程序,我想在 Amazon 的 Elastic Beanstalk 上的 Docker 多容器环境中部署它们。
整个过程似乎比我预期的要复杂一些。 所以我真的很期待听到一些关于最佳实践和其他方法的反馈,以改进我的整个流程并能够 "automate" 一些步骤(如果可能的话)。
这是我当前的流程:
- 为了生成我项目的工件,我使用了 sbt-docker 插件。这个
插件在下面生成项目工件(罐子和 Docker 文件)
[应用程序路由]/target/docker.
- 我将这些工件(罐子和 Docker 文件)上传到 git
存储库(目前正在这样做 "manually")。
- 因为 Amazon 的 Elastic Beanstalk 需要 Docker
多容器,我需要一个在线存储库来 "host"
图片:可能是 Docker-Hub or Quay.io。要么需要我
拥有一个 git 存储库,它可以在其中找到要创建的工件
能够生成项目的图像。
- 在 Elastic Beanstalk 中创建了多容器环境,
我继续上传 Dockerrun.aws.json 文件,详见
亚马逊的文档以及
.ebextensions/elb-listeners.config 文件的设置
端口(因为我 运行 多个应用程序)
- 神奇!亚马逊生成我的环境。相同 url,不同的端口
对于我所有的应用程序(在 step 中的配置文件中指定
4.
我很想找到一种方法来自动化 第 2 步。 因为这需要我有一个额外的每个应用程序的回购协议。我将我的应用程序托管在 git 存储库中,并且每个应用程序都有一个 "extra" 存储库,其中我托管了在 步骤 1 中生成的工件,以便能够执行步骤 3.
我对 Scala 不是很熟悉,但我相信这些工件可能是由 Jenkins/CircleCI 在你的容器中生成的,它是在 Jenkins/CircleCI 上构建的,然后在你的 [=16] 中引用适当的图像标签=].
希望对您有所帮助。
如果您愿意为第 1 步使用不同的 SBT 插件,那么您可以自动执行第 2 步。
虽然 quay.io 支持从 GitHub 构建图像,但他们 不需要它 。 (您可以将本地 Docker 图像直接发布到您的 quay.io 存储库。)
- 使用 project/plugins.sbt.
中的 sbt-native-packager plugin
- 在build.sbt中设置插件设置,例如:
dockerRespository := Some("quay.io/myaccount")
- 您的第 1 步变为:
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 守护程序相同的图像 ID。
在 AWS 端继续执行步骤 3+...
我有几个 Scala 应用程序,我想在 Amazon 的 Elastic Beanstalk 上的 Docker 多容器环境中部署它们。
整个过程似乎比我预期的要复杂一些。 所以我真的很期待听到一些关于最佳实践和其他方法的反馈,以改进我的整个流程并能够 "automate" 一些步骤(如果可能的话)。
这是我当前的流程:
- 为了生成我项目的工件,我使用了 sbt-docker 插件。这个 插件在下面生成项目工件(罐子和 Docker 文件) [应用程序路由]/target/docker.
- 我将这些工件(罐子和 Docker 文件)上传到 git 存储库(目前正在这样做 "manually")。
- 因为 Amazon 的 Elastic Beanstalk 需要 Docker 多容器,我需要一个在线存储库来 "host" 图片:可能是 Docker-Hub or Quay.io。要么需要我 拥有一个 git 存储库,它可以在其中找到要创建的工件 能够生成项目的图像。
- 在 Elastic Beanstalk 中创建了多容器环境, 我继续上传 Dockerrun.aws.json 文件,详见 亚马逊的文档以及 .ebextensions/elb-listeners.config 文件的设置 端口(因为我 运行 多个应用程序)
- 神奇!亚马逊生成我的环境。相同 url,不同的端口 对于我所有的应用程序(在 step 中的配置文件中指定 4.
我很想找到一种方法来自动化 第 2 步。 因为这需要我有一个额外的每个应用程序的回购协议。我将我的应用程序托管在 git 存储库中,并且每个应用程序都有一个 "extra" 存储库,其中我托管了在 步骤 1 中生成的工件,以便能够执行步骤 3.
我对 Scala 不是很熟悉,但我相信这些工件可能是由 Jenkins/CircleCI 在你的容器中生成的,它是在 Jenkins/CircleCI 上构建的,然后在你的 [=16] 中引用适当的图像标签=].
希望对您有所帮助。
如果您愿意为第 1 步使用不同的 SBT 插件,那么您可以自动执行第 2 步。
虽然 quay.io 支持从 GitHub 构建图像,但他们 不需要它 。 (您可以将本地 Docker 图像直接发布到您的 quay.io 存储库。)
- 使用 project/plugins.sbt. 中的 sbt-native-packager plugin
- 在build.sbt中设置插件设置,例如:
dockerRespository := Some("quay.io/myaccount")
- 您的第 1 步变为:
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 守护程序相同的图像 ID。
在 AWS 端继续执行步骤 3+...