Как Spring Boot поддерживает Docker?

«Как Spring Boot поддерживает Docker?» — вопрос из категории Spring, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Spring Boot предоставляет несколько встроенных возможностей для облегчения работы с Docker-контейнерами:

1. Создание оптимизированных Docker-образов Используйте плагин spring-boot-maven-plugin для сборки образа с помощью Cloud Native Buildpacks.

./mvnw spring-boot:build-image -Dspring-boot.build-image.imageName=my-app:latest

2. Externalized Configuration для 12-факторных приложений Конфигурация выносится во внешние источники, что идеально для Docker.

# application.yml в приложении
spring:
  datasource:
    url: ${DB_URL}

# Переопределение через переменные окружения в Docker
# docker run -e DB_URL=jdbc:postgresql://host/db my-app

3. Health Checks через Actuator Эндпоинты /actuator/health и /actuator/info используются для проверки жизнеспособности (liveness/readiness) в оркестраторах (Kubernetes).

4. Слоистая структура образа (Layered Jars) При сборке JAR-файл разделяется на слои (зависимости, ресурсы, приложение), что ускоряет повторную сборку образов при изменении только кода приложения.

Практический пример Dockerfile:

FROM eclipse-temurin:17-jre-alpine
COPY target/*.jar app.jar
ENTRYPOINT ["java", "-jar", "/app.jar"]

Spring Boot приложения являются stateless и легко контейнеризуются, что соответствует принципам микросервисной архитектуры.