Какой у вас опыт работы с Docker?

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

Ответ

Использовал Docker для контейнеризации приложений, создания легковесных и воспроизводимых сред разработки и деплоя.

Основные задачи и навыки:

  1. Создание образов: Написание Dockerfile для упаковки приложения и его зависимостей.
  2. Управление контейнерами: Запуск, остановка, инспекция контейнеров через CLI.
  3. Работа с Docker Compose: Оркестрация многоконтейнерных приложений (например, приложение + БД).
  4. Работа с томами (Volumes) и сетями: Для сохранения данных и организации взаимодействия между контейнерами.

Пример Dockerfile для Spring Boot приложения:

# Многостадийная сборка для уменьшения итогового образа
FROM openjdk:17-jdk-slim AS build
WORKDIR /app
COPY . .
RUN ./mvnw clean package -DskipTests

FROM openjdk:17-jdk-slim
WORKDIR /app
# Копируем только готовый JAR-файл из стадии сборки
COPY --from=build /app/target/*.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]

Ключевые команды:

docker build -t my-app:latest .  # Сборка образа
docker run -d -p 8080:8080 my-app:latest # Запуск контейнера в фоне
docker ps # Просмотр запущенных контейнеров
docker-compose up -d # Запуск стека через Compose

Преимущества: Изоляция зависимостей, консистентность сред от разработки до продакшена, эффективное использование ресурсов.