Что должно содержаться в Dockerfile для создания образа Java-приложения?

«Что должно содержаться в Dockerfile для создания образа Java-приложения?» — вопрос из категории DevOps, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Типичный Dockerfile для Spring Boot приложения включает:

# 1. Базовый образ с JDK
FROM openjdk:17-jdk-slim

# 2. Рабочая директория в контейнере
WORKDIR /app

# 3. Копирование собранного JAR-файла
COPY target/myapp-*.jar app.jar

# 4. Экспорт порта приложения
EXPOSE 8080

# 5. Команда запуска
ENTRYPOINT ["java", "-jar", "app.jar"]

Ключевые элементы:

  • Базовый образ — минимальный образ с нужной версией JDK (например, openjdk:17-jdk-slim)
  • Копирование артефакта — JAR/WAR файл, собранный заранее
  • Точка входа — команда запуска приложения
  • Экспорт порта — документация о используемом порте

Multi-stage сборка (рекомендуется):

# Этап сборки
FROM maven:3.8.6 AS build
WORKDIR /app
COPY pom.xml .
COPY src ./src
RUN mvn clean package -DskipTests

# Этап выполнения
FROM openjdk:17-jdk-slim
WORKDIR /app
COPY --from=build /app/target/*.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]

Преимущества multi-stage:

  • Финальный образ содержит только runtime, без инструментов сборки
  • Уменьшение размера образа
  • Повышение безопасности