Что такое Docker Compose и как его использовать?

Ответ

Docker Compose — это инструмент для определения и запуска мультиконтейнерных приложений Docker. Вместо ручного запуска каждого контейнера отдельными командами, вы описываете всю инфраструктуру (сервисы, сети, тома) в одном декларативном YAML-файле (docker-compose.yml), а затем управляете ею едиными командами.

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

version: '3.8'
services:
  web:
    image: nginx:alpine
    ports:
      - "8080:80"
    volumes:
      - ./html:/usr/share/nginx/html
    depends_on:
      - db
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: secret
      MYSQL_DATABASE: app_db
    volumes:
      - db_data:/var/lib/mysql

volumes:
  db_data:

Основные команды и преимущества:

  • docker-compose up -d — запускает все сервисы в фоне.
  • docker-compose down — останавливает и удаляет контейнеры, сети (но не тома по умолчанию).
  • docker-compose logs -f [service] — просмотр логов.
  • Автоматическое создание сети: Все сервисы из одного файла попадают в общую сеть и могут обращаться друг к другу по имени сервиса (например, db).
  • Управление зависимостями: Параметр depends_on гарантирует порядок запуска.
  • Переменные окружения: Можно использовать файл .env для параметризации конфигурации.

В продакшене для оркестрации часто используют Kubernetes, но Docker Compose идеален для локальной разработки, тестирования и простых CI/CD пайплайнов.

Ответ 18+ 🔞

А, Docker Compose! Ну это ж просто сказка для ленивых, как я. Вместо того чтобы вручную каждый контейнер, как последний распиздяй, запускать, ты пишешь один файлик на YAML. Ёпта, это как инструкция для сборки мебели, только тут всё работает с первого раза и не остаётся лишних винтиков.

Вот смотри, как это выглядит. Берёшь файл docker-compose.yml и пишешь там, кто у тебя в этом цирке выступает.

version: '3.8'
services:
  web:
    image: nginx:alpine
    ports:
      - "8080:80"
    volumes:
      - ./html:/usr/share/nginx/html
    depends_on:
      - db
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: secret
      MYSQL_DATABASE: app_db
    volumes:
      - db_data:/var/lib/mysql

volumes:
  db_data:

Видишь? Весь этот балаган — веб-сервер и база данных — описан в одном месте. Красота, ёперный театр!

А дальше магия начинается. Вместо кучи команд, от которых терпения ноль, ебать, пишешь одну: docker-compose up -d — и всё, поехали, сервисы в фоне запустились. Хочешь всё вырубить? docker-compose down — и цирк уехал, контейнеры и сети удалились. Логи посмотреть? docker-compose logs -f web. Всё на блюдечке.

И самое охуенное — он сам для этих сервисов сеть создаёт. Твоя веб-морда внутри может просто по имени db к базе стучаться, не надо никаких IP-адресов вспоминать. Доверия, ебать, ноль было к этой магии, пока не попробовал.

Для продакшена, конечно, уже другие звери, вроде Kubernetes, нужны. Но для разработки, тестов или какого-нибудь простенького пайплайна — это идеально. Да похуй на сложные системы, когда нужно быстро поднять среду. Всё в одном файле, как в старом добром инвентаре. Сам от себя охуел, насколько это удобно.