Что делает доклер sbt-native-packager: publishLocal?

Документы говорят:

Чтобы создать образ и сохранить его на локальном сервере Docker, используйте

docker:publishLocal

Я только начинаю с Docker и не знаком с концепцией "локального сервера Docker". Что это такое и где я должен искать вывод docker:publishLocal?

Ответ 1

Сервер докеров

Основные компоненты Docker описаны здесь: https://docs.docker.com/introduction/understanding-docker/#what-are-the-major-docker-components

То, что описывается как "сервер докеров", это "демон Docker" в связанном описании. Демон Docker запускается на вашем локальном компьютере и обычно является основной точкой контакта для команд, которые запускаются двоичным кодом docker.

Демоны Docker выполняют ряд задач, включая:

  • стартовые контейнеры
  • остановки контейнеров
  • запрос состояния контейнера
  • создание изображений ( "файловая система" для контейнера)
  • нажатие изображений на индекс Docker или на другой сервер изображений (чтобы сделать изображение видимым снаружи вашей машины сборки)
  • управление контейнерами, перезапуск их, если они останавливаются

sbt-native-packager сопоставление задач с действиями Docker

publishLocal

SBT использует задачу с именем publishLocal для публикации активов в локальных репозиториях Ivy/Maven (это то, что существует только на вашем компьютере).

Поддержка Docker в sbt-native-packager пытается использовать ту же задачу в контексте Docker, так что sbt docker:publishLocal создает изображение на вашем локальном сервере Docker. Подобно публикации в Ivy или Maven локально, это действие позволяет изображению быть видимым локально для разработки, но не делает его видимым вне вашей локальной машины.

На практике он отображает команду docker build -t "${projectName}:${version}"

Затем вы можете использовать это изображение с docker run "${projectName}:${version}", но только на своей локальной машине.

<публикующие/h2 >

SBT использует задачу с именем publish для публикации активов в удаленных хранилищах Ivy/Maven. Для этого требуется дополнительная настройка, чтобы описать, где можно опубликовать изображение.

sbt-native-packager также пытается сопоставить эту задачу с соответствующим действием в контексте Docker. Таким образом, плагин создает сборку изображения локально, а затем нажимает изображение на соответствующий репозиторий удаленных изображений.

Для этого вам нужно добавить параметр dockerRepository.

Если этот параметр установлен в строку без косой черты, например. "username1", это добавит "имя пользователя1/" к имени изображения. Когда попытка нажать изображение, Docker попытается нажать изображение в общедоступный реестр Docker на https://registry.hub.docker.com/ в учетной записи "username1".

Если он установлен в строку со слэшами, например. "my.server1/username1", это также добавит эту строку в имя изображения. Это похоже на предыдущий случай, за исключением того, что сервер Docker попытается найти сервер под названием "my.server1" в DNS и нажать на него вместо общедоступного реестра Docker.

На практике он отображает

docker build -t "${dockerRepository}/${projectName}:${version}" . // working directory at target/docker docker push "${dockerRepository}/${projectName}:${version}"

Затем вы можете использовать это изображение с вашего локального компьютера или других машин с помощью docker run "${dockerRepository}/${projectName}:${version}".

этап

Задача stage создает каталог, который содержит все файлы для изображения Docker, в формате, готовом для отправки вашему демону Docker. Этот каталог target/docker. Если вы меняете рабочий каталог и запускаете docker build ., вы должны создать изображение, используя содержимое этого каталога.

Ответ 2

Нашел исходный код. Похоже, что docker:publishLocal отображается на docker build -t [dockerTarget]

Я использую Play 2.3, которая, как видно из источника, в настоящее время использует sbt-native-packager 0.7.1. Я не уверен, как подтвердить, что версия, которую я на самом деле использую, с консоли SBT. Поддержка Docker была добавлена в 0.7.2, поэтому я думаю, что почему-то ничего не происходит. Похоже, что молча ничего не делать в 0.7.1. Я не уверен, почему это так. Я ожидаю, что это не получится или что-то в этом роде.

Внес изменения , чтобы обновить Play до 0.7.2, хотя это оказалось сложнее, чем я ожидал. Используя sbt-native-packager 0.7.2, теперь я вижу некоторые выходные данные, расположенные в target/docker/