Определение простыми словами
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) и используйте две версии контейнера параллельно.