«Новые возможности Spring Boot 2.4» Образ Docker для сборки в один клик

Spring Boot Java

задний план

В нашем процессе разработки, чтобы поддерживать контейнеризацию Docker, мы обычно используем Maven для компиляции и упаковки, а затем создания образов, что может значительно повысить эффективность работы в Интернете и в то же время может быстро и динамично расширяться и быстро откатывать, что действительно удобно. Плагин docker-maven-plugin помогает нам автоматически генерировать образы и отправлять их на склад с помощью простой настройки в проекте Maven.

спотифай, ткань8

  • Здесь используются два основных плагина:spotify,fabric8, ... — настроить файл Docker, определенный в xml, или смонтировать внешний файл Docker для создания образа, вызвав удаленный API Docker.

  • микросервисная платформа свиньи[1]Вся контейнеризация построена на этом


<plugin>
  <groupId>com.spotify</groupId>
  <artifactId>docker-maven-plugin</artifactId>
  ...  -配置通过 xml 定义出 Dockerfile 或者挂载外部 Dockerfile
</plugin>


<plugin>
  <groupId>io.fabric8</groupId>
  <artifactId>docker-maven-plugin</artifactId>
   ...  -配置通过 xml 定义出 Dockerfile 或者挂载外部 Dockerfile
</plugin>

  • Выполнить соответствующий цикл плагинаmvn docker:build && mvn docker:push

jib

  • На самом деле количество кода, изменяемого каждый раз при выпуске проекта, невелико, особенно зависимые jar-файлы меняются с меньшей вероятностью.Если для сборки образа используются первые два плагина, это приведет к полной сборке каждый времени, что приведет к пустой трате ресурсов хранения и полосы пропускания.

  • jib — это инструмент для сборки образов для Java-приложений (с поддержкой Maven и Gradle), выпущенный Google в июле 2018 года. Преимущество в том, что он может повторно использовать кеш сборки, что может ускорить сборку и уменьшить объем передачи.

<!--配置通过 xml 定义出 Dockerfile ,本质上和外挂 Dockerfile 并无区别-->
<plugin>
    <groupId>com.google.cloud.tools</groupId>
    <artifactId>jib-maven-plugin</artifactId>
</plugin>

mvn jib:dockerBuild

Проблемы с тремя вышеуказанными решениями

  • В фактическом процессе разработки большинство файлов Docker для сборки проектов весенней загрузки одинаковы, им не нужно передавать XML или переопределять через подключаемый файл Dockerfile.

  • Вышеупомянутые плагины требуют относительного знания определения Dockerfile, что не очень удобно для разработки.

  • После Spring Boot 2.3 нет веских причин для технологии многоуровневого хранения Jar.

решение

  • Spring Boot 2.4[2]Запущен собственный инструмент сборки докеров, интегрированный в оригиналspring-boot-maven-plugin, вам нужно только настроить соответствующее целевое хранилище и информацию о хосте, чтобы завершить создание образа.
  • Следующая конфигурация может дополнить приведенный выше рисунок: через машину для разработки, без установки Docker, через192.168.0.10Docker Remote API завершает сборку образа и публикует его в192.168.0.20зеркальный репозиторий
 <plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
    <configuration>
        <image>
            <name>192.168.0.20/pig4cloud/${project.artifactId}</name>
            <!-- 执行完build 自动push -->
            <publish>true</publish>
        </image>
        <!--配置构建宿主机信息,本机不用配置-->
        <docker>
   <host>http://192.168.0.10:2375</host>
            <tlsVerify>false</tlsVerify>
            <publishRegistry>
                <username>username</username>
                <password>password</password>
                <url>192.168.0.20</url>
            </publishRegistry>
        </docker>
    </configuration>
</plugin>
  • Выполните следующие команды, чтобы завершить сборку образа и автоматический выпуск.
mvn spring-boot:build-image

другие инструкции

конфигурация хоста докера не вступает в силу

  • Узел настроен на ①, как показано на рисунке ниже, но ② сообщение об ошибке указывает на то, что хост несовместим
  • Проверьте, настроена ли локально переменная окружения $DOCKER_HOST.После чтения исходного кода обнаруживается, что эта переменная читается первой.
⋊> ~ echo $DOCKER_HOST                                                  11:07:51
tcp://172.17.0.111:2375

Поддержка сети

  • Перехватите некоторые логи в процессе сборки.Следующие зависимости нужно скачать с github.Около 100M, этот процесс с большой вероятностью завершится с ошибкой. Для ее решения рекомендуется настроить прокси или использовать чужой ECS.
 :: Spring Boot ::                (v2.4.0)
[INFO]  > Running creator
[INFO]     [creator]         Downloading from https://github.com/bell-sw/Liberica/releases/download/8u275+1/bellsoft-jre8u275+1-linux-amd64.tar.gz
[INFO]     [creator]       JVMKill Agent 1.16.0: Contributing to layer
[INFO]     [creator]         Downloading from https://github.com/cloudfoundry/jvmkill/releases/download/v1.16.0.RELEASE/jvmkill-1.16.0-RELEASE.so
[INFO]     [creator]         Downloading from https://repo.spring.io/release/org/springframework/cloud/spring-cloud-bindings/1.6.0/spring-cloud-bindings-1.6.0.jar
[INFO]     [creator]         Verifying checksum
[INFO]     [creator]           192.168.0.20/pig4cloud/demo:latest
[INFO]
[INFO] Successfully built image '192.168.0.20/pig4cloud/demo:latest'
[INFO]  > Pushing image '192.168.0.20/pig4cloud/demo:latest' 100%
[INFO]  > Pushed image '192.168.0.20/pig4cloud/demo:latest'
[INFO] BUILD SUCCESS

использованная литература

[1]

микросервисная платформа свиньи:https://gitee.com/log4j/pig

[2]

Spring Boot 2.4 Docker: https://docs.spring.io/spring-boot/docs/2.4.0/maven-plugin/reference/htmlsingle/#build-image-example-publish