Docker Compose — что это, как работает, синтаксис YAML | Глоссарий FREEHOSTING

docker-compose

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

Определение простыми словами

Docker Compose — это надстройка над Docker, которая позволяет описать в одном файле сразу несколько связанных контейнеров: например, веб-сервер, базу данных и кеш. Вместо десятка длинных docker run вы пишете YAML и запускаете весь стек одной командой.

Compose чаще всего используют для локальной разработки и небольших продакшен-серверов. Для оркестрации десятков узлов берут Kubernetes или Docker Swarm.

Сравнение Compose и оркестраторов

Параметр Docker Compose Docker Swarm Kubernetes
Сложность входа Низкая Средняя Высокая
Кол-во узлов 1 До 10–20 Без ограничений
Авто-рестарт Базовый Есть Полный
Балансировка Нет Встроенная Service + Ingress
Когда выбирать Dev, малый прод Простой кластер Прод от 5+ серверов

Кейсы использования

  • Поднять локально стек WordPress + MariaDB + Redis за 30 секунд.
  • Развернуть на VPS Telegram-бота с Postgres и pgAdmin без копирования команд.
  • Передать разработчику полный стек проекта одним git clone и docker compose up.
  • CI/CD: запустить интеграционные тесты в изолированном окружении на каждом коммите.

Когда Compose не подойдёт:

  • Высоконагруженный продакшен с авто-масштабированием — нужен Kubernetes.
  • Распределённая инфраструктура на десятки серверов — Compose не умеет в multi-host.
  • Сложные политики безопасности, secrets management — лучше HashiCorp Nomad или k8s.

Технические детали

Минимальный docker-compose.yml для WordPress:

# docker-compose.yml
services:
  db:
    image: mariadb:11
    environment:
      MARIADB_ROOT_PASSWORD: secret
      MARIADB_DATABASE: wp
    volumes:
      - db_data:/var/lib/mysql
  wordpress:
    image: wordpress:latest
    depends_on: [db]
    ports: ["8080:80"]
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: root
      WORDPRESS_DB_PASSWORD: secret
volumes:
  db_data:

# запуск
docker compose up -d
docker compose logs -f wordpress
docker compose down

Частые вопросы

Чем docker compose отличается от docker-compose?

Старый <code>docker-compose</code> на Python был отдельным бинарником v1, новый <code>docker compose</code> — плагин на Go версии v2, встроенный в Docker CLI. Синтаксис YAML почти одинаковый, но v2 быстрее, поддерживает Compose Spec и не требует отдельной установки.

Можно ли использовать Compose в продакшене?

Да, для одного сервера это нормальная практика: маленькие SaaS, корпоративные сайты, боты. Только включите <code>restart: always</code>, настройте бэкап томов и мониторинг логов. Для нескольких серверов уже нужен Swarm или Kubernetes.

Где хранить пароли — в самом yml или в .env?

В файле <code>.env</code> рядом с docker-compose.yml. Compose автоматически подставит переменные через <code>${VAR}</code>, а сам .env добавьте в .gitignore. Для критичных секретов в проде используйте Docker secrets или HashiCorp Vault.

Как обновить контейнер без простоя?

<code>docker compose pull && docker compose up -d</code> — Compose сам пересоздаст только изменённые сервисы. Для нулевого даунтайма поставьте перед стеком reverse-proxy с healthcheck (Traefik, Nginx) и используйте две версии контейнера параллельно.