Рубрики
Без рубрики

Настройка приложения для загрузки Spring

Автор оригинала: Dhananjay Singh.

Обзор

В этой статье мы рассмотрим процесс создания Docker образа приложения Spring Boot с использованием Dockerfile и Maven , а затем запустим созданный образ.

Исходный код этого руководства можно найти на Github .

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

Если вы хотите узнать больше о Docker, мы подробно рассмотрели его в разделе “Docker: Введение на высоком уровне”.

Приложение Spring Boot

Давайте начнем с простого приложения Spring Boot. Лучший способ начать со скелетного проекта-посетить Spring Initializr . Выберите предпочитаемую версию Spring Boot и добавьте зависимость “Веб”. Создайте его как проект Maven, и все готово!

Проект включает в себя простой контроллер REST с одним отображением, который просто ожидает имя в качестве переменной пути, а затем генерирует строку для приветствия:

@RestController
public class DemoController {

  @GetMapping("/greet/{name}")
  public String greeting(@PathVariable String name) {
    return "Hi!! " + name;
  }
}

Чтобы запустить приложение, используйте следующую команду Maven из корневой папки проекта:

$ mvn spring-boot:run

Как обычно, приложение будет запущено на порту 8080. Чтобы проверить эту конечную точку, перейдите в свой браузер (или используйте curl , postman и т.д.) в ” http://localhost:8080/greet/john “, вы увидите ответ, который выглядит примерно так:

Настройка приложения для загрузки Spring

Теперь давайте закрепим наше ранее созданное приложение Spring Boot. Мы рассмотрим два наиболее часто используемых подхода:

  • Dockerfile – Указание файла, содержащего собственные команды Docker для создания образа
  • Maven – Использование плагина Maven для создания изображения

Докеризация с помощью Dockerfile

Файл Dockerfile-это обычный файл .txt , содержащий собственные команды Docker, которые используются для указания слоев изображения. Для этого давайте создадим текстовый файл с именем “Dockerfile”:

Содержимое самого файла может выглядеть примерно так:

FROM java:8-jdk-alpine

COPY ./target/demo-docker-0.0.1-SNAPSHOT.jar /usr/app/

WORKDIR /usr/app

RUN sh -c 'touch demo-docker-0.0.1-SNAPSHOT.jar'

ENTRYPOINT ["java","-jar","demo-docker-0.0.1-SNAPSHOT.jar"]

Давайте взглянем на команды и полностью поймем их, прежде чем продолжить:

  • FROM – Ключевое слово FROM указывает Докеру использовать данное базовое изображение в качестве базы сборки. Мы использовали “java” с тегом “8-jdk-alpine”. Думайте о теге как о версии. Базовое изображение меняется от проекта к проекту. Вы можете искать изображения в docker-hub .
  • КОПИРОВАТЬ – Это указывает Докеру копировать файлы из локальной файловой системы в определенную папку внутри образа сборки. Здесь мы копируем ваш файл .jar в образ сборки (образ Linux) внутри /usr/app .
  • WORKDIR – Инструкция WORKDIR задает рабочий каталог для любых ЗАПУСК , CMD , ТОЧКА ВХОДА , КОПИРОВАНИЕ и ДОБАВЛЕНИЕ инструкций, которые следуют в файле Dockerfile. Здесь мы переключили рабочий каталог на /usr/app , чтобы нам не приходилось снова и снова писать длинный путь.
  • ВЫПОЛНИТЬ – Это указывает Докеру выполнить командную строку оболочки в целевой системе. Здесь мы практически просто “касаемся” вашего файла, чтобы обновить время его модификации (по умолчанию Docker создает все файлы-контейнеры в “неизмененном” состоянии).
  • ТОЧКА ВХОДА – Это позволяет настроить контейнер, который будет выполняться как исполняемый файл. Здесь вы указываете Докеру, как запустить ваше приложение. Мы знаем , что запускаем наше приложение spring-boot как java-jar <имя приложения>.jar , поэтому помещаем его в массив.

Дополнительную документацию можно найти на странице Ссылка на файл Dockerfile .

Прежде чем двигаться дальше, нам понадобится файл Spring Boot .jar . Этот файл будет использоваться для создания образа Docker, как упоминалось выше.

Выполните команду mvn clean install , чтобы убедиться, что она сгенерирована.

Давайте построим изображение, используя этот файл Dockerfile. Для этого перейдите в корневой каталог приложения и выполните следующую команду:

$ docker build -t greeting-app .

Мы построили изображение с помощью docker build . Мы дали ему имя с флагом -t и указали текущий каталог, в котором находится файл Dockerfile. Образ создается и хранится в нашем локальном реестре докеров.

Давайте проверим наше изображение:

$ docker images

И, наконец, давайте запустим наш образ:

$ docker run -p 8090:8080 greeting-app 

Git Essentials

Ознакомьтесь с этим практическим руководством по изучению Git, содержащим лучшие практики и принятые в отрасли стандарты. Прекратите гуглить команды Git и на самом деле изучите это!

Мы можем запускать изображения Docker с помощью команды docker run .

Мы знаем, что каждый контейнер сам по себе является изолированной средой, и мы должны сопоставить порт операционной системы хоста – 8090 и порт внутри контейнера – 8080 , который указан в качестве аргумента -p 8090:8080 .

Теперь мы можем получить доступ к конечной точке на http://localhost:8080/greet/john :

Наше приложение Spring Boot успешно запущено в контейнере Docker!

Докеризация с использованием Maven

В предыдущем разделе мы написали простой файл Dockerfile и построили наше приложение, используя собственную команду docker build . Однако есть несколько проблем, с которыми мы можем столкнуться в наших проектах, использующих этот метод:

  • .jar имя – Мы должны упомянуть имя jar (вместе с версией) в файле. По мере роста нашего приложения наши версии будут меняться, и нам придется снова и снова обновлять этот файл Dockerfile.
  • Использование терминала – Мы должны вручную открыть терминал и выполнить команды Docker. Было бы неплохо, если бы мы могли сделать это частью жизненного цикла Maven, чтобы мы могли создавать изображения как часть наших конвейеров CI/CD (Непрерывная интеграция/Непрерывная доставка).

Существует множество доступных плагинов Maven, которые мы можем использовать в вашем pom.xml файл, который значительно облегчил бы нашу жизнь. Способ, которым работает этот плагин Maven, заключается в том, что он внутренне создает файл Dockerfile на основе конфигурации в pom.xml файл, а затем использует сгенерированный файл Dockerfile для создания образа.

Используя этот метод, нам не нужно вручную обновлять имя или запускать терминал.

Мы будем использовать fabric8 io/docker-maven-плагин .

Плагин должен быть расположен в нашем pom.xml файл после тега build . Это будет дополнительный плагин для сборки с использованием профилей Maven. Всегда рекомендуется использовать это через профили, потому что мы хотим, чтобы обычная команда mvn clean install работала на компьютере разработчика, на котором также не установлен Docker:


   
      
         
            docker
         
      
      
         
            
               io.fabric8
               docker-maven-plugin
               0.26.0
               true
               
                  true
                  
                     
                        ${project.artifactId}
                        
                           java:8-jdk-alpine
                           
                              
                                 java
                                 -jar
                                 /maven/${project.artifactId}-${project.version}.jar
                              
                           
                           
                              artifact
                           
                        
                     
                  
               
               
                  
                     build
                     post-integration-test
                     
                        build
                     
                  
               
            
         
      
   

Давайте рассмотрим это поближе:

  • Наш профиль называется docker – Если нам нужно создать изображение с помощью Maven, мы должны запустить команду с помощью -Docker .
  • Тег <имя> – Этот тег указывает имя изображения, которое является artifactId – в нашем случае это демо-докер .
  • Тег | | - Этот тег указывает базовое изображение java:8-jdk-alpine . Тег
  • | | – Этот тег используется для указания того, как должно выполняться изображение.

Теперь давайте построим образ:

$ mvn clean install -Ddocker 

Давайте проверим наше изображение:

$ docker images

Наконец, мы запустим наш образ:

$ docker run -p 8090:8080 demo-docker 

Теперь проверьте конечную точку REST ( http://localhost:8090/greet/john ) в браузере.

Примечание: Вы должны остановить ранее запущенные контейнеры, использующие порт 8090 , иначе вы получите сообщение об ошибке.

Вы можете легко проверить, какие контейнеры запущены с помощью:

$ docker ps 

Теперь, если порт уже используется, вы можете либо изменить порт, либо удалить старый контейнер с помощью:

$ docker rm -f 

Еще один простой способ-остановить все контейнеры:

 $ docker rm -f $(docker ps -a -q) 

Вывод

В этой статье мы рассмотрели два наиболее часто используемых способа контейнеризации приложения Spring Boot с помощью Docker.

Первый подход был реализован с помощью простого файла Dockerfile для создания изображения, а второй подход заключается в использовании плагина Maven.

Как только образ создан, существует множество способов его запуска. В этой статье мы полагались на собственную команду docker run . Более доступный способ-использовать docker-compose , если у вас много изображений, которые вам нужно запустить.

Для производственной среды мы обычно выбираем Kubernetes или Docker-swarm , чтобы автоматически масштабировать наше приложение на основе сетевого трафика.