Как был развернут Docker в вашем последнем проекте?

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

Ответ

В проекте использовался Docker для контейнеризации приложения и его зависимостей с последующим развертыванием в облаке.

Стек и процесс:

  1. Сборка образа:

    # Dockerfile
    FROM eclipse-temurin:17-jdk-alpine AS builder
    WORKDIR /app
    COPY . .
    RUN ./mvnw clean package -DskipTests
    
    FROM eclipse-temurin:17-jre-alpine
    WORKDIR /app
    COPY --from=builder /app/target/*.jar app.jar
    EXPOSE 8080
    ENTRYPOINT ["java", "-jar", "app.jar"]
  2. Локальная разработка: Использовался docker-compose.yml для поднятия всего стека (приложение + БД + кэш).

    version: '3.8'
    services:
      app:
        build: .
        ports:
          - "8080:8080"
        depends_on:
          - postgres
      postgres:
        image: postgres:15
        environment:
          POSTGRES_DB: mydb
  3. Развертывание (Deployment): Образы хранились в Amazon ECR (Container Registry). Для оркестрации использовался AWS ECS (Elastic Container Service) в режиме Fargate (бессерверные контейнеры), что избавило от управления серверами.

  4. Инфраструктура как код (IaC): Конфигурация ECS (кластер, сервисы, задачи) описывалась с помощью Terraform.

  5. CI/CD: Сборка, тестирование и деплой автоматизированы через GitHub Actions.

Преимущества такого подхода: воспроизводимость, изоляция зависимостей, масштабируемость и согласованность сред (dev/prod).