Зачем нужен Docker Compose?

«Зачем нужен Docker Compose?» — вопрос из категории Docker, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Docker Compose — это инструмент для определения и запуска мультиконтейнерных приложений Docker. В DevOps-практике он служит нескольким ключевым целям.

Основные сценарии использования:

  1. Локальная разработка и тестирование: Быстро поднять полный стек приложения (приложение, БД, кэш, очередь) одной командой, что гарантирует идентичность окружения у всех разработчиков и на CI/CD.
  2. Упрощенное прототипирование и демонстрация: Позволяет легко описать и поделиться конфигурацией сложного сервиса.
  3. Запуск интеграционных тестов в CI/CD: На этапе сборки можно запустить docker-compose up, чтобы провести тесты взаимодействия сервисов в изолированном окружении.

Пример docker-compose.yml для типового веб-приложения:

version: '3.8'
services:
  app:
    build: .
    ports:
      - "8080:8080"
    environment:
      - DB_HOST=postgres
      - REDIS_HOST=redis
    depends_on:
      - postgres
      - redis
    volumes:
      - ./app:/app:cached # Для hot-reload в разработке

  postgres:
    image: postgres:15-alpine
    environment:
      POSTGRES_DB: myapp
      POSTGRES_PASSWORD: secure_password
    volumes:
      - postgres_data:/var/lib/postgresql/data

  redis:
    image: redis:7-alpine
    command: redis-server --appendonly yes
    volumes:
      - redis_data:/data

volumes:
  postgres_data:
  redis_data:

Важное ограничение: Docker Compose предназначен в первую очередь для работы на одной ноде (хост-машине). Для оркестрации контейнеров в продакшн-среде на кластере используются инструменты вроде Kubernetes (с манифестами) или Docker Swarm.