В этой статье представлены 3 способа сборки приложения SpringBoot в образ Docker с помощью Maven.
(1)Использование встроенного в spring-boot-maven-plugin build-image.
(2)Использовать предоставляемый Google jib-maven-plugin。
(3)Использование dockerfle-maven-plugin。
Приложение Spring Boot
Для удобства практической работы потребуется проект Spring Boot.
Адрес демонстрационного проекта:
https://github.com/davelms/me...
Окружение проекта:
Java 11
Maven 3.6.3
Использование mvn package можно успешно собрать jar-пакет.
Также работает корректно:
java -jar target/demo-application-0.0.1-SNAPSHOT.jar
Тестовая страница:
http://localhost:8080/hello

Демонстрационный проект готов, теперь опробуем 3 способа сборки образа.
I、build-image плагина Spring Boot для Maven
В Spring Boot уже включён собственный плагин для сборки образов Docker, поэтому нам ничего не нужно менять:он находится в spring-boot-starter-parent в pom.xml.
Вам не нужно писать Dockerfile или беспокоиться о чём-либо ещё: плагин всё сделает за вас, в том числе учтёт рекомендации Spring по безопасности, памяти, производительности и другим вопросам.
Достаточно просто выполнить:
mvn spring-boot:build-image
После завершения выполнения появится сообщение об успехе:

Тестирование запуска контейнера:
docker run -p 9090:8080 -t demo-application:0.0.1-SNAPSHOT
Примечание:здесь сопоставленный локальный порт — 9090。

Два、jib-maven-plugin
Jib — плагин для Maven и Gradle, предназначенный для создания образов Docker.
У этого плагина есть одна очень заметная особенность:Локальная установка Docker не требуется,что очень удобно для непрерывной интеграции: Jib может напрямую отправлять образы в указанный реестр Docker.
Jib также не требует написания Dockerfile.
Пользоваться этим тоже очень удобно:не нужно менять код, и можно обойтись без изменений в pom.xml.
Достаточно выполнить:
mvn compile com.google.cloud.tools:jib-maven-plugin:2.3.0:dockerBuild
mvn compile
— знакомая нам команда компиляции maven.
com.google.cloud.tools:jib-maven-plugin:2.3.0
Указано использование плагина Jib
dockerBuild
— цель выполнения плагина Jib,dockerBuild Указано, что Jib должен использовать установленный у нас локально Docker.
После завершения выполнения появится сообщение об успехе:

Тест запуска контейнера:
docker run -p 9091:8080 -t demo-application:0.0.1-SNAPSHOT
Примечание:здесь сопоставленный локальный порт — 9091。

Три、dockerfile-maven-plugin
Этот плагин требует, чтобы мы написали Dockerfile; в проекте Domo он уже подготовлен.
Dockerfile необходимо разместить в корневом каталоге проекта, рядом с pom.xml.

Затем нужно добавить в pom.xml настройки, чтобы указать репозиторий, метку tag, а также определённые в приведённом выше Dockerfile JAR_FILE。

Выполнить mvn package автоматически начнётся сборка образа, а после завершения выполнения появится сообщение:

Запуск контейнера:
docker run -p 9092:8080 -t demo-application:0.0.1-SNAPSHOT
Обратите внимание:сопоставленный порт локального компьютера — 9092。

Итоги

Из этих 3 способов удобнее всего встроенный способ SpringBoot:ничего не нужно делать самостоятельно, им можно пользоваться сразу.
Особенно выделяется Jib: он не требует локальной установки Docker, позволяет отправлять образы прямо в указанный реестр и при этом очень прост в использовании.
Похоже, больше всего хлопот доставляет плагин dockerfile-maven-plugin: нужно написать Dockerfile и добавить настройки,Однако,на деле он удобнее всего, поскольку первые 2 зависят от сетевого окружения(вы понимаете), и даже при настроенном зеркале Docker будут возникать ошибки — можете попробовать сами.
