Каковы наилучшие методы развертывания и размещения артефактов для среды Docker Multicontainer в Elasticbeanstalk для приложений Scala?

У меня есть несколько приложений Scala, которые я хочу развернуть в многоконтейнерной среде Docker на Amazon Elastic Beanstalk.

Кажется, что весь процесс немного сложнее, чем я ожидал. Итак, я очень рад услышать отзывы о лучших практиках и других способах улучшения всего процесса и возможности "автоматизировать" некоторые шаги (если это возможно).

Это мой текущий процесс:

  • Чтобы создать артефакты моих проектов, я использую плагин sbt-docker. Эта плагин генерирует артефакты проектов (jars и Dockerfile) под [Приложение маршрутное]/цель/докер.
  • Я загружаю эти артефакты (jars и Dockerfile) в git репозиторий (в настоящее время выполняется "вручную" ).
  • Как Амазонный эластичный бобовый шлейф требует для Докера многоконтейнеры, мне нужен онлайн-репозиторий для "размещения" images: Может быть Docker-Hub или Quay.io. Либо мне нужно иметь репозиторий git, в котором он может найти артефакты способный генерировать изображение проекта.
  • Создав многоконтейнерную среду в Elastic Beanstalk, Я приступаю к загрузке файла Dockerrun.aws.json, как описано в Amazon, а также .ebextensions/elb-listeners.config с настройками порты (поскольку я запускаю несколько приложений)
  • Магия! Amazon генерирует мою среду. Тот же URL-адрес, разные порты для всех моих приложений (как указано в файлах конфигурации на этапе 4.

Мне бы хотелось найти способ автоматизировать шаг 2. Так как для этого требуется, чтобы у меня было дополнительное репо для каждого приложения. У меня есть мои приложения, размещенные в репозитории git, и у меня есть "дополнительное" репо для каждого, где я размещаю артефакты, сгенерированные на шаге 1, чтобы выполнить шаг 3.

Ответ 1

Если вы хотите использовать другой плагин SBT для шага 1, вы можете автоматизировать шаг 2.

Хотя quay.io поддерживает создание образа из GitHub, он не требует его. (Вы можете опубликовать локальное изображение Docker непосредственно в репозитории quay.io.)

  • Используйте плагин sbt-native-packager в проекте /plugins.sbt.
  • Настройка параметров плагина в файле 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. Прочитайте их учебник.
  • Ваш шаг 2 станет sbt docker:publish. Теперь ваша учетная запись quay.io должна содержать тот же IMAGE ID, что и ваш локальный демон Docker.

Выполните шаги 3+ со стороны AWS...

Ответ 2

Я действительно не знаком с Scala, но я считаю, что артефакты могут быть созданы Jenkins/CircleCI внутри вашего контейнера, который построен на Jenkins/CircleCI, а затем соответствующие теги изображений, на которые ссылается ваш Dockerrun.aws.json.

Надеюсь, что это поможет.