В этом упражнении мы узнаем, как публиковать изображения Docker в частном репозитории Nexus с помощью плагина Maven Jib. До недавнего времени вам приходилось устанавливать демон Docker на ящик, из которого вы хотите создавать образы Docker. Плагин Jib позволяет создавать образ Docker без установки демона Docker. Это важно для сборки машин с использованием менеджеров задач, таких как Jenkins и Teamcity, так как настройка Docker — еще один посторонний шаг.
В некоторых случаях вы можете захотеть опубликовать свои изображения в частном хранилище, а не в общедоступном хранилище, таком как Dockerhub. Здесь представлен менеджер хранилища Nexus, поскольку он может содержать все типы артефактов, начиная с jar, образов Docker, пакетов npm и т. Д. В этом упражнении предполагается, что у вас есть базовые знания о Docker и репозиториях. Сначала мы настроим репозиторий Nexus на локальном компьютере, а затем настроим процесс сборки для публикации образа в том же репозитории Nexus.
Вам также могут понравиться: изображения и контейнеры Docker
глоссарий
Этот глоссарий поможет вам с соответствующими понятиями, если вы совершенно незнакомы.
докер
Docker — это легкий контейнер, используемый для публикации приложений со всей экосистемой, упакованной в один пакет.
кливер
Jib — это фреймворк для сборки и компиляции образов Docker с демоном Docker, доступным в системе, и без него. Для этого есть два плагина: один для Maven, другой для Gradle. В этом упражнении мы собираемся использовать плагин Jib Maven для публикации образа Docker.
нексус
Nexus — это инструмент управления репозиторием, используемый для размещения различных типов артефактов, таких как jar, пакеты npm и образы Docker / OCI.
необходимое условие
Для этого урока необходимо выполнить некоторые предварительные условия.
1. Загрузите Nexus из нижеуказанного местоположения, вам нужно выбрать версию операционной системы.
2. Распакуйте его в определенное место; назовите это install_location
например.
3. Запустите Nexus, выполнив эту команду от имени администратора.
Оболочка
xxxxxxxxxx
1
install_location\nexus-3.20.1-01\bin\nexus /run
Если на третьем шаге произойдет сбой из-за конфликта портов, в Nexus Start будет создан файл nexus.properties по адресу
install_location \ Sonatype-работа \ nexus3 \ и т.д. \ nexus.properties
Вам нужно изменить порт на любой порт, не конфликтующий с портом 9081. Обратите внимание, что этот файл будет создан только после успешного запуска Nexus
4. Войдите в Nexus как администратор. Ваш пароль находится в файле admin.password, который создается после запуска Nexus. Вам нужно найти пароль по умолчанию для администратора, который вы можете найти в этом месте.
После входа в систему нажмите на вкладку «Перейти к хранилищам» в левом меню и нажмите кнопку «Создать хранилище», показанную ниже.
На втором экране выберите «Docker hosted» в качестве типа рецепта.
Теперь введите имя реестра и порт HTTP, оставьте остальные по умолчанию и нажмите кнопку «Создать репозиторий» в нижней части экрана. Этот порт HTTP используется в pom.xml для публикации.
меры
Теперь перейдите на https://start.spring.io/ и загрузите базовое приложение Spring Boot с Maven в качестве инструмента для сборки.
Вам также нужно настроить Maven в вашем classpath или использовать mvnw
команду.
Теперь откройте проект Spring Initializer в редакторе по вашему выбору. Я использовал код Visual Studio, но вы можете использовать любой.
Нам нужно добавить следующие вещи в pom.xml проекта. Плагин Jib и правильные записи для реестра Docker, которые мы создали в разделе предварительных требований. Конфиг часть очень важна, так как этот шаг сделает или нарушит это упражнение.
Найдите раздел плагинов в pom.xml и добавьте следующую запись в pom.xml. Обратите внимание, что вам нужно изменить пароль на тот же, что вы создали при настройке Nexus.
HTML
xxxxxxxxxx
1
<plugin>
2
<groupId>com.google.cloud.tools</groupId>
3
<artifactId>jib-maven-plugin</artifactId>
4
<version>0.9.9</version>
5
<configuration>
6
<from>
7
<image>openjdk:8u171-alpine</image>
8
<auth>
9
<username><!—docker-hub-username-- ></username>
10
<password><!—docker-hub-password-- ></password>
11
</auth>
12
</from>
13
<to>
14
<image><!—docker-hud-userid--->/${project.artifactId}:${project.version}</image>
15
<auth>
16
<username><!—docker-hub-username-- ></username>
17
<password>><!—docker-hub-password-- ></password>
18
</auth>
19
</to>
20
<container>
21
<jvmFlags>
22
<jvmFlag>-Xms512m</jvmFlag>
23
<jvmFlag>-Xmx512m</jvmFlag>
24
</jvmFlags>
25
</container>
26
</configuration>
27
</plugin>
Сохраните файл и выполните приведенную ниже команду из командной строки в каталоге, в который вы распаковали приложение Spring Boot.
Оболочка
xxxxxxxxxx
1
mvn compile jib:build -DsendCredentialsOverHttp=true -Djib.httpTimeout=0
Приведенная выше команда создаст ваш первый образ Docker без установки демона Docker на ваш компьютер и отправит его в репозиторий Nexus. Этот флаг httpTimeout
стоит упомянуть, поскольку по умолчанию для этого значения в 2 секунды обычно репо занимают больше времени, чем это, я держал его до бесконечности. Этот флаг SendCredentialsOverHttp
используется для разрешения HTTP и аутентификации, поскольку Jib использует HTTPS и credshelper
. Здесь идея состоит в том, чтобы начать все и посмотреть, как все закончится.
Завершив это упражнение, вы узнали, как настроить менеджер хранилища Nexus, работающий по HTTP. Вы также узнали, как создать репозиторий Docker под Nexus. Наконец, мы изменили pom.xml для публикации образов Docker во время процесса сборки в репозитории Nexus с помощью плагина Jib. Созданный образ может использоваться любым клиентом Docker для запуска на его / ее компьютере с помощью docker run
команды.
Дальнейшее чтение
Команды Docker для разработки на развертывание
Создание образа Docker для приложения Spring Boot с Jib