← Назад к вопросам

Какие знаешь стадии по передаче Java приложения в Dockerfile?

1.0 Junior🔥 131 комментариев
#Docker, Kubernetes и DevOps

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Стадии передачи Java приложения в Dockerfile

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

1. Стадия сборки (Build Stage)

Это первый этап multi-stage build процесса. На этой стадии:

  • Создаётся полное окружение для компиляции Java кода
  • Устанавливаются все необходимые инструменты: JDK, Maven/Gradle
  • Выполняется сборка проекта: mvn clean package или gradle build
  • Генерируются артефакты: JAR или WAR файлы
FROM maven:3.8.1-openjdk-17 as builder
WORKDIR /app
COPY . .
RUN mvn clean package -DskipTests

Здесь мы используем образ с Maven и JDK 17, копируем исходный код и выполняем сборку. На выходе получаем готовый JAR файл в директории target/.

2. Стадия выполнения (Runtime Stage)

Второй этап multi-stage build, который содержит только необходимое для запуска:

  • Использует минимальный базовый образ (только JRE, не JDK)
  • Копирует только скомпилированное приложение из стадии сборки
  • Исключает все инструменты разработки
  • Значительно уменьшает размер финального образа
FROM openjdk:17-jdk-slim
WORKDIR /app
COPY --from=builder /app/target/*.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]

3. Стадия подготовки зависимостей (Dependencies Cache Layer)

Дополнительная оптимизация для ускорения пересборок:

  • Копируются файлы зависимостей отдельно (pom.xml, build.gradle)
  • Скачиваются все зависимости до копирования исходного кода
  • Использует Docker кэширование слоёв
  • При изменении только кода пересборка выполняется быстрее
FROM maven:3.8.1-openjdk-17 as builder
WORKDIR /app
COPY pom.xml .
RUN mvn dependency:resolve
COPY src src
RUN mvn clean package -DskipTests

Преимущества multi-stage подхода

Этот подход предлагает множество преимуществ:

  • Размер образа: Финальный образ содержит только JRE и приложение, без инструментов разработки
  • Безопасность: Исключены исходные коды и инструменты, что снижает уязвимости
  • Скорость сборки: Кэширование слоёв ускоряет повторные сборки
  • Простота обслуживания: Раздельные стадии легче изменять и тестировать

Типичный размер образа: вместо 1.2GB (с JDK) получаем 400-500MB (с JRE).