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

Ответ

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).

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

Ответ 18+ 🔞

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

Вот смотри, как для простого веба (PHP, Nginx, MySQL) это выглядит. Сам от себя охуеешь, насколько проще:

version: '3.8'
services:
  # Веб-сервер
  webserver:
    image: nginx:alpine
    ports:
      - "8080:80" # С локального компа на 8080 порту лезешь, а внутри у него 80
    volumes:
      - ./src:/var/www/html # Твой код тупо в контейнер засовывается
      - ./nginx.conf:/etc/nginx/nginx.conf:ro # А это чтоб свою конфигурацию впендюрить
    depends_on:
      - app # Чтоб стартанул только после приложения, логично же

  # Само приложение на PHP
  app:
    build: . # Собирает образ из Dockerfile, который тут же лежит
    volumes:
      - ./src:/var/www/html
    environment:
      DB_HOST: database # И он тупо по имени "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 вынести, чтоб в репозиторий не светить.
  • Сеть своя: Она сама создаёт изолированную сеть для этих сервисов, и они там друг друга по именам находят. Не надо никаких IP адресов вспоминать, ебать копать.

В общем, файл docker-compose.yml — это такая хитрая жопа, без которой сейчас в разработке никуда. Идеально для локальной среды, чтобы не ебаться с установкой всего на комп. Запустил один раз настроил — и потом хоть сто раз всё сноси и поднимай заново.