Что такое файл docker-compose.yml?

«Что такое файл docker-compose.yml?» — вопрос из категории DevOps, который задают на 24% собеседований PHP Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

Базовый пример для веб-приложения (PHP + Nginx + MySQL):

version: '3.8'
services:
  # Сервис веб-сервера
  webserver:
    image: nginx:alpine
    ports:
      - "8080:80" # Проброс порта localhost:8080 -> 80 в контейнере
    volumes:
      - ./src:/var/www/html # Монтирование кода проекта
      - ./nginx.conf:/etc/nginx/nginx.conf:ro # Кастомная конфигурация Nginx
    depends_on:
      - app # Запускать после сервиса 'app'

  # Сервис приложения (PHP-FPM)
  app:
    build: . # Собрать образ из Dockerfile в текущей директории
    volumes:
      - ./src:/var/www/html
    environment:
      DB_HOST: database

  # Сервис базы данных
  database:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword
      MYSQL_DATABASE: myapp
    volumes:
      - db_data:/var/lib/mysql # Сохранение данных в именованном томе

# Определение томов для хранения данных
volumes:
  db_data:

Ключевые возможности:

  • Запуск всего стека: docker-compose up -d создаст и запустит все сервисы.
  • Управление: docker-compose down остановит и удалит контейнеры.
  • Просмотр логов: docker-compose logs -f app.
  • Переменные окружения: Можно выносить в отдельный файл .env.
  • Сети: Автоматически создаётся изолированная сеть для сервисов, они могут обращаться друг к другу по имени сервиса (например, app может подключиться к database по хосту database).

Этот файл — стандарт для описания окружения для локальной разработки, тестирования и иногда для простых продакшен-развёртываний.