Ответ
Dockerfile — это текстовый файл с инструкциями для автоматической сборки Docker-образа. Для Java-приложения он выполняет следующие ключевые шаги:
-
Выбор базового образа: Определяет среду выполнения. Для Java это обычно образ с JDK или JRE.
FROM openjdk:17-jdk-slim -
Копирование артефакта: Переносит скомпилированное приложение (например, JAR-файл) внутрь образа.
COPY target/myapp.jar /app.jar -
Определение точки входа: Задает команду, которая будет выполнена при запуске контейнера.
ENTRYPOINT ["java", "-jar", "/app.jar"]
Пример полного Dockerfile:
FROM openjdk:17-jdk-slim
WORKDIR /app
COPY target/myapp.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]
Best Practices и нюансы:
- Многоступенчатая сборка: Используйте
multi-stage buildдля создания минимального финального образа, копируя только JAR-файл из промежуточного образа-сборщика. - Выбор образа: Для продакшена предпочтительнее использовать JRE-образы (
openjdk:17-jre-slim), а не полный JDK, чтобы уменьшить размер и поверхность атаки. - Конкретные версии: Всегда указывайте конкретный тег базового образа (не
latest) для воспроизводимости сборок. - Spring Boot: Для приложений на Spring Boot можно использовать плагин
spring-boot-maven-pluginс цельюspring-boot:build-imageдля создания оптимизированных Cloud Native Buildpack-образов.