задний план
В нашем процессе разработки, чтобы поддерживать контейнеризацию 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.10
Docker 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