Развертывание приложений Spring Boot в контейнерах

Гибкие варианты упаковки Spring Boot предоставляют большой выбор при развертывании вашего приложения. Вы можете развертывать приложения Spring Boot на различных облачных платформах, в контейнерах (например, Docker) или на виртуальных/реальных машинах.

Развертывание

Если вы запускаете свое приложение из контейнера, вы можете использовать исполняемый файл jar, но также часто бывает полезно разбить его и запустить по-другому. Некоторые реализации PaaS могут также распаковать архивы до их запуска. Например, Cloud Foundry работает таким образом. Самый простой способ запустить распакованный архив - запустить соответствующий модуль запуска следующим образом:

$ jar -xf myapp.jar
$ java org.springframework.boot.loader.JarLauncher

Это на самом деле немного быстрее при запуске (в зависимости от размера jar), чем при запуске из неразвернутого архива. Во время выполнения вы не должны ожидать каких-либо различий.

После распаковки jar-файла вы также можете увеличить время запуска, запустив приложение с помощью своего "естественного" main метода вместо JarLauncher. Например:

$ jar -xf myapp.jar
$ java -cp BOOT-INF/classes:BOOT-INF/lib/* com.example.MyApplication

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

FROM openjdk:8-jdk-alpine AS builder
WORKDIR target/dependency
ARG APPJAR=target/*.jar
COPY ${APPJAR} app.jar
RUN jar -xf ./app.jar

FROM openjdk:8-jre-alpine
VOLUME /tmp
ARG DEPENDENCY=target/dependency
COPY --from=builder ${DEPENDENCY}/BOOT-INF/lib /app/lib
COPY --from=builder ${DEPENDENCY}/META-INF /app/META-INF
COPY --from=builder ${DEPENDENCY}/BOOT-INF/classes /app
ENTRYPOINT ["java","-cp","app:app/lib/*","com.example.MyApplication"]

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

docker build --build-arg APPJAR=path/to/myapp.jar .


Читайте также:


Комментарии

Популярные сообщения из этого блога

Методы класса Object в Java

Как получить текущий timestamp в Java

Основные опции JVM для повышения производительности и отладки