← Назад к вопросам
Какие знаешь стадии по передаче 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).