Несколько способов упаковки (сборки) проектов Java (SpringBoot) в образы Docker
Несколько способов упаковки (сборки) проектов Java (SpringBoot) в образы Docker

Предварительное описание

  • Самый оригинальный способ
  • spring-boot-maven-pluginплагин
  • jib-maven-pluginплагин
  • dockerfle-maven-pluginплагин
самый примитивный способ

То есть используйтеDockerиз Пакет Заказидти Пакет,беда,Я не буду здесь много говорить.

упаковка плагина Spring-Boot-Maven-plugin

SpringBootу меня есть встроенныйDockerЗеркало Пакетинструмент,существоватьspring-boot-starter-parentсередина,Нам не нужно быть лишнимиизнастраивать。 преимущество:Нет необходимости писатьDockerFile,Springпредположениеиз Безопасность、Память、Нет необходимости беспокоиться о производительности и других проблемах.

плагин jib-maven-plugin

отGoogleизодин Пакетплагин。 преимущество:Не требуется локальная установкаDocker,также Нет необходимости писатьDockerFile,Jib можно переместить непосредственно вобозначениеизDockerсклад。

плагин dockerfle-maven-plugin

нужно написатьDockerFileТакже требуется местныйDockerсреда,Но лучше всего использовать из,Самый стабильный,Максимально свободное управление из. Достоинства: Стабильный, не подвержен сетевым ограничениям, DockerFile пишется самостоятельно и имеет высокую степень свободы. Вы можете менять его как хотите.

Упакованный образ SpringBoot

Нам не нужно вводить зависимости,SpringBootПринес свой собственный。

Пакет Заказ:

Язык кода:javascript
копировать
mvn spring-boot:build-image

Но я не люблю пользоваться Заказом,IDEA дает вам визуализацию,Зачем стучать?Заказ Шерстяная ткань?и ЗаказвозвращатьсянуждатьсянастраиватьMavenсредапеременная。

Просто сражайсяJARТа же сумка,Давайте просто нажмем на него.

Однако упаковка SpringBoot не удастся из-за перегрузки сети.

Упаковка комплектуется так:

Проверим, есть ли локальное зеркало.

Запустите тест.

Честно говоря, мне не удалось добежать,Потому что в моем проекте есть что-то, с чем сложно справиться.,Например, оплата WeChatизфайл сертификата иKEYдокумент,Вообще говоря, проекты SpringBoot могут,Но я просто не могу этого сделать,мне нужно написать это самомуDockerFileидти Просто создайте сопоставление томов。

Упакованный образ JIB

Настройте зависимости плагина:

Язык кода:javascript
копировать
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.3.7.RELEASE</version>
                <configuration>
                    <mainClass>com.toemail.smtp.ToEmailApplication</mainClass>
                </configuration>
                <executions>
                    <execution>
                        <id>repackage</id>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>com.google.cloud.tools</groupId>
                <artifactId>jib-maven-plugin</artifactId>
                <version>3.3.1</version>
                <configuration>
                    <!--fromУзел используется длянастраивать Зеркалоиз База Зеркало,ЭквивалентноDocerkfileсерединаизFROMКлючевые слова-->
                    <from>
                        <!--База Зеркалоимя(предположение Используйте отечественную общественность Зеркало,Быстрая скорость загрузки,более стабильный) -->
                        <image>java:8u172-jre-alpine</image>
                    </from>
                    <to>
                        <!--Зеркалоимя和tag,Использована встроенная переменная mvn ${project.version}.,Указывает текущий проектизversion-->
                        <image>demo:${project.version}</image>
                    </to>
                    <!--Связанные с контейнеромизсвойство-->
                    <container>
                        <!--jvmПамятьпараметр-->
                        <jvmFlags>
                            <jvmFlag>-Xms4g</jvmFlag>
                            <jvmFlag>-Xmx4g</jvmFlag>
                        </jvmFlags>
                        <!--быть разоблаченнымизпорт-->
                        <ports>
                            <port>8899</port>
                        </ports>
                    </container>
                </configuration>
            </plugin>

Здесь я использую последнюю версию.

кроме того,Я написал комментарии ко многим конфигурациям.,Если вы хотите узнать больше, вы можете проверить этоJIBиз Связанные документы。

Заказ
Язык кода:javascript
копировать
mvn compile com.google.cloud.tools:jib-maven-plugin:2.3.0:dockerBuild
IDEA
Сообщить об ошибке

Если возникает эта ошибка:

Просто добавьте следующую конфигурацию:

все еще Сообщить об ошибке

Похоже, этот официальный репозиторий требует аутентификации для входа. Блин, мне очень не нравится этот ломаный плагин, это херня (он втайне выругался).

внезапно решено

это зеркало,нуждатьсяобозначениеспецифическийскладURLадресиз。

Но у меня это сейчас не работает, поэтому хочу перейти на склад Алибаба.

Изменено на это:

Язык кода:javascript
копировать
<to>
  <image>registry.cn-qingdao.aliyuncs.com/jibjava/jibfirst</image>
</to>

Alibaba Cloud иногда требует пароль для частных складов, который также можно изменить на другие частные склады.

Язык кода:javascript
копировать
        <from>
            <image>registry.cn-qingdao.aliyuncs.com/jibjava/jibfirst</image>
            <auth>
              <username>Облачный аккаунт Алибаба</username>
              <password>Пароль к облаку Алибаба</password>
            </auth>
          </from>
Подробное объяснение тегов XML

from: Конфигурация извлеченного образа, по умолчанию — gcr.io/distroless/java. to: Конфигурация создаваемого изображения. изображение: имя извлеченного или сгенерированного изображения. auth: информация аутентификации, соответственно имя пользователя и пароль. контейнер: свойства контейнера jvmFlgs: параметры контейнера JVM, такие же, как ENTRYPOINT в Dockerfile. mainClass: полное имя класса запуска. args: входящие параметры основного метода порты: порты, предоставляемые контейнером, которые имеют ту же функцию, что и EXPOSE Dockerfile.

успех

Упаковка DockerFileMaven

ПисатьDockerFile

Язык кода:javascript
копировать
FROM c9katayama/java8:latest
# Создать каталог
RUN mkdir -p /dashboard
# Копировать файлы
COPY dashboard.jar /dashboard/dashboard.jar
# открытый порт
EXPOSE 8099
# Начать заказ
CMD ["java", "-jar", "/dashboard/dashboard.jar"]

DockerFileНе так много сказать,Пожалуйста, учитесь самостоятельно.

Отображение зависимостей:

Язык кода:javascript
копировать
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>0.4.11</version>
                <dependencies>
                    <dependency>
                        <groupId>javax.activation</groupId>
                        <artifactId>javax.activation-api</artifactId>
                        <version>1.2.0</version>
                        <scope>compile</scope>
                    </dependency>
                </dependencies>
                <configuration>
                    <imageName>${docker.image.prefix}/${project.artifactId}</imageName>
                    <dockerDirectory>src/main/docker</dockerDirectory>
                    <resources>
                        <resource>
                            <targetPath>/</targetPath>
                            <directory>${project.build.directory}</directory>
                            <include>${project.build.finalName}.jar</include>
                        </resource>
                    </resources>
                    <imageTags>
                        <imageTag>${project.version}</imageTag>
                        <imageTag>latest</imageTag>
                    </imageTags>
                </configuration>
            </plugin>

ноэтот разделплагинизXMLНе используйте это,потому что этоrocketmqВизуальная консольизчиновник Писатьиз,Вы можете настроить его самостоятельно.

нормальныйизв целомплагинизXMLвот и все:

Язык кода:javascript
копировать
        <plugin>
            <groupId>com.spotify</groupId>
            <artifactId>docker-maven-plugin</artifactId>
            <version>1.0.0</version>
            <configuration>
                <imageName>${project.artifactId}:${project.version}</imageName>
                <!-- обозначение Dockerfile путь-->
                <dockerDirectory>${basedir}/docker</dockerDirectory> 
                <!-- Это копировать jar Доставка docker Конфигурация каталога отображения контейнера,также可以Писатьприезжать Docokerfile середина -->
                <resources>
                    <resource>
                        <targetPath>/ROOT</targetPath>
                        <directory>${project.build.directory}</directory>
                        <include>${project.build.finalName}.jar</include>
                    </resource>
                </resources>
            </configuration>
        </plugin>

Оставшуюся часть конфигурации вы можете найти в своем браузере.:docker-maven-pluginЭлементы конфигурации

Заказ сборки
Язык кода:javascript
копировать
mvn package
попробуй упаковать

Я здесь прямоIDEAНажмите Пакет,Ненавижу заказ.

Уведомление:нуждаться Доступно локальноDocker,и включить удаленное подключение,WindowsизDockerУстановить Маленький Предыдущая статья Джейн Писать Проходитьиз,Вы можете взглянуть,Linuxизбез Писать。

Гораздо проще в использовании, как только успех.

Это по-прежнему лучшее, рекомендую! ! !

Подвести итог

Сяо Цзянь решает быть последним,С первым все в порядке, да?,ноGoogleЭто ненуждаться Доступно локальноDockerсреда,Первым я все-таки включил волшебный Пакетиз,Последний очень хорош.

Это зависит от ситуации. Давно не обновлялся! Мне становится лень, эй, увидимся в следующей статье.

boy illustration
RasaGpt — платформа чат-ботов на основе Rasa и LLM.
boy illustration
Nomic Embed: воспроизводимая модель внедрения SOTA с открытым исходным кодом.
boy illustration
Улучшение YOLOv8: EMA основана на эффективном многомасштабном внимании, основанном на межпространственном обучении, и эффект лучше, чем у ECA, CBAM и CA. Малые цели имеют очевидные преимущества | ICASSP2023
boy illustration
Урок 1 серии Libtorch: Тензорная библиотека Silky C++
boy illustration
Руководство по локальному развертыванию Stable Diffusion: подробные шаги и анализ распространенных проблем
boy illustration
Полностью автоматический инструмент для работы с видео в один клик: VideoLingo
boy illustration
Улучшения оптимизации RT-DETR: облегченные улучшения магистрали | Support Paddle облегченный rtdetr-r18, rtdetr-r34, rtdetr-r50, rtdet
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | Деформируемое внимание с большим ядром (D-LKA Attention), большое ядро ​​​​свертки улучшает механизм внимания восприимчивых полей с различными функциями
boy illustration
Создано Datawhale: выпущено «Руководство по тонкой настройке развертывания большой модели GLM-4»!
boy illustration
7B превышает десятки миллиардов, aiXcoder-7B с открытым исходным кодом Пекинского университета — это самая мощная модель большого кода, лучший выбор для корпоративного развертывания.
boy illustration
Используйте модель Huggingface, чтобы заменить интерфейс внедрения OpenAI в китайской среде.
boy illustration
Оригинальные улучшения YOLOv8: несколько новых улучшений | Сохранение исходной информации — алгоритм отделяемой по глубине свертки (MDSConv) |
boy illustration
Второй пилот облачной разработки | Быстро поиграйте со средствами разработки на базе искусственного интеллекта
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция с нулевым кодированием и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
Решенная Ошибка | Загрузка PyTorch медленная: TimeoutError: [Errno 110] При загрузке факела истекло время ожидания — Cat Head Tiger
boy illustration
Brother OCR, библиотека с открытым исходным кодом для Python, которая распознает коды проверки.
boy illustration
Новейшее подробное руководство по загрузке и использованию последней демонстрационной версии набора данных COCO.
boy illustration
Выпущен отчет о крупной модели финансовой отрасли за 2023 год | Полный текст включен в загрузку |
boy illustration
Обычные компьютеры также могут работать с большими моделями, и вы можете получить личного помощника с искусственным интеллектом за три шага | Руководство для начинающих по локальному развертыванию LLaMA-3
boy illustration
Одной статьи достаточно для анализа фактора транскрипции SCENIC на Python (4)
boy illustration
Бросая вызов ограничениям производительности небольших видеокарт, он научит вас запускать большие модели глубокого обучения с ограниченными ресурсами, а также предоставит полное руководство по оценке и эффективному использованию памяти графического процессора!
boy illustration
Команда Fudan NLP опубликовала 80-страничный обзор крупномасштабных модельных агентов, в котором в одной статье представлен обзор текущего состояния и будущего агентов ИИ.
boy illustration
[Эксклюзив] Вы должны знать о новой функции JetBrains 2024.1 «Полнострочное завершение кода», чтобы решить вашу путаницу!
boy illustration
Краткое изложение базовых знаний о регистрации изображений 1.0
boy illustration
Новейшее подробное руководство по установке и использованию библиотеки cv2 (OpenCV, opencv-python) в Python.
boy illustration
Легко создайте локальную базу знаний для крупных моделей на основе Ollama+AnythingLLM.
boy illustration
[Решено] ошибка установки conda. Среда решения: не удалось выполнить первоначальное зависание решения. Повторная попытка с помощью файла (графическое руководство).
boy illustration
Одна статья поможет вам понять RAG (Retrival Enhanced Generation) | Введение в концепцию и теорию + практику работы с кодом (включая исходный код).
boy illustration
Эволюция архитектуры шлюза облачной разработки
boy illustration
Docker и Kubernetes [Разработка контейнерных приложений с помощью Python]