На данный момент мы не разрабатываем и не принимаем новые функции и даже не исправляем некритические ошибки.
Этот плагин Maven интегрирует Maven с Docker.
Цели проектирования:
Dockerfile
— это то, как вы создаете проекты Docker; это то, что использует этот плагин. Они обязательны.mvn package
вы получите образ Docker. Когда вы вводите mvn deploy
, ваш образ отправляется.mvn dockerfile:build
и более поздние версии mvn dockerfile:tag
и более поздние версии mvn dockerfile:push
. Это также устраняет необходимость в чем-то вроде mvn dockerfile:build -DalsoPush
; вместо этого вы можете просто сказать mvn dockerfile:build dockerfile:push
.Этот проект придерживается Открытого кодекса поведения. Принимая участие, вы должны соблюдать этот кодекс.
Список выпусков см. в журнале изменений.
Для этого плагина требуется Java 7 или более поздняя версия и Apache Maven 3 или более поздняя версия (dockerfile-maven-plugin <=1.4.6 требует Maven >= 3, а в других случаях — Maven >= 3.5.2). Для запуска интеграционных тестов или использования плагина на практике необходима работающая настройка Docker.
Дополнительные примеры см. в каталоге интеграционных тестов.
В частности, расширенный тест демонстрирует полный сервис, состоящий из двух микросервисов, которые проходят интеграционное тестирование с помощью helios-testing
.
Это настраивает фактический плагин для создания вашего образа с помощью mvn package
и отправки его с помощью mvn deploy
. Конечно, вы также можете явно указать mvn dockerfile:build
.
< plugin >
< groupId >com.spotify</ groupId >
< artifactId >dockerfile-maven-plugin</ artifactId >
< version >${dockerfile-maven-version}</ version >
< executions >
< execution >
< id >default</ id >
< goals >
< goal >build</ goal >
< goal >push</ goal >
</ goals >
</ execution >
</ executions >
< configuration >
< repository >spotify/foobar</ repository >
< tag >${project.version}</ tag >
< buildArgs >
< JAR_FILE >${project.build.finalName}.jar</ JAR_FILE >
</ buildArgs >
</ configuration >
</ plugin >
Соответствующий Dockerfile
может выглядеть так:
FROM openjdk:8-jre
MAINTAINER David Flemström <[email protected]>
ENTRYPOINT ["/usr/bin/java", "-jar", "/usr/share/myservice/myservice.jar"]
# Add Maven dependencies (not shaded into the artifact; Docker-cached)
ADD target/lib /usr/share/myservice/lib
# Add the service itself
ARG JAR_FILE
ADD target/${JAR_FILE} /usr/share/myservice/myservice.jar
Важное примечание
Наиболее похожим на Maven способом ссылки на артефакт сборки, вероятно, будет использование переменной project.build.directory
для ссылки на «целевой» каталог. Однако в результате получается абсолютный путь, который не поддерживается командой ADD в файле Dockerfile. Любой такой источник должен находиться внутри контекста сборки Docker, и поэтому на него должен ссылаться относительный путь . См. № 101.
Не используйте ${project.build.directory}
как способ ссылки на каталог сборки.
Использование этого плагина для ваших сборок имеет множество преимуществ.
Этот плагин позволяет более последовательно использовать кеш Docker, значительно ускоряя сборки, позволяя кэшировать зависимости Maven в вашем образе. Также рекомендуется избегать плагина maven-shade-plugin
, который также значительно ускоряет сборку.
Вам больше не придется говорить что-то вроде:
mvn package
mvn dockerfile:build
mvn verify
mvn dockerfile:push
mvn deploy
Вместо этого достаточно просто сказать:
mvn deploy
При базовой конфигурации это гарантирует, что образ будет создан и отправлен в нужное время.
Вы можете зависеть от информации Docker другого проекта, поскольку этот плагин присоединяет метаданные проекта при создании образов Docker. Просто добавьте эту информацию в любой проект:
< dependency >
< groupId >com.spotify</ groupId >
< artifactId >foobar</ artifactId >
< version >1.0-SNAPSHOT</ version >
< type >docker-info</ type >
</ dependency >
Теперь вы можете прочитать информацию об образе Docker проекта, от которого вы зависели:
String imageName = getResource ( "META-INF/docker/com.spotify/foobar/image-name" );
Это отлично подходит для интеграционного теста, когда вам нужна последняя версия образа Docker другого проекта.
Обратите внимание, что вам необходимо зарегистрировать расширение Maven в вашем POM (или родительском POM), чтобы поддерживать тип docker-info
:
< build >
< extensions >
< extension >
< groupId >com.spotify</ groupId >
< artifactId >dockerfile-maven-extension</ artifactId >
< version >${version}</ version >
</ extension >
</ extensions >
</ build >
Ваши проекты выглядят так:
a/
Dockerfile
pom.xml
b/
Dockerfile
pom.xml
Теперь вы можете использовать эти проекты с Fig, docker-compose или какой-либо другой системой, работающей с Dockerfiles. Например, файл docker-compose.yml
может выглядеть так:
service-a :
build : a/
ports :
- ' 80 '
service-b :
build : b/
links :
- service-a
Теперь docker-compose up
и docker-compose build
будут работать как положено.
См. документацию по использованию.
См. документацию по аутентификации.
Чтобы вырезать выпуск Maven:
mvn clean [-B -Dinvoker.skip -DskipTests -Darguments='-Dinvoker.skip -DskipTests']
-Dgpg.keyname=<key ID used for signing artifacts>
release:clean release:prepare release:perform
Мы используем gren
для создания релизов в Github:
gren release