Docker Compose (оркестрация контейнеров на одном хосте)
Docker Compose (оркестрация контейнеров на одном хосте) (Docker Compose) — компоновка Docker
Контекст термина
Термин используется в контексте контейнеризации и DevOps (Docker-стек на одном сервере). Не относится к Kubernetes-кластерам и не является полноценным кластерным оркестратором.
Суть в одном предложении
Docker Compose — это инструмент для описания и запуска нескольких контейнеров как единого приложения через один YAML-файл.
Краткое определение
Docker Compose позволяет управлять многоконтейнерным приложением (например, Nginx + PHP + MySQL) через файл docker-compose.yml, определяющий сервисы, сети и тома.
Где используется
- Локальная разработка
- Dev / Test окружения
- Малые продакшен-серверы
- CI-сборки
- Монолитные приложения
Архитектурное значение
Docker запускает один контейнер. Compose управляет несколькими связанными контейнерами как стеком.
Пример стека:
- nginx
- php-fpm
- mysql
- redis
Вместо 4 отдельных команд — один YAML-файл.
Пример docker-compose.yml
version: "3.9"
services:
app:
build: .
container_name: php_app
volumes:
- .:/var/www
depends_on:
- db
db:
image: mysql:8
environment:
MYSQL_ROOT_PASSWORD: root
volumes:
- db_data:/var/lib/mysql
volumes:
db_data:
Запуск:
docker compose up -d
Остановка:
docker compose down
Что делает Docker Compose
- Запускает несколько контейнеров
- Создаёт внутреннюю сеть
- Управляет зависимостями
- Подключает volumes
- Позволяет масштабировать сервис
Масштабирование:
docker compose up --scale app=3 -d
Compose vs Kubernetes
| Docker Compose | Kubernetes |
|---|---|
| Один хост | Кластер |
| Простой YAML | Более сложная модель |
| Dev / small prod | High-load, cloud |
| Нет авто-recovery | Есть auto-healing |
Compose — лёгкий уровень оркестрации.
Compose V1 vs V2
Раньше:
docker-compose up
Теперь (официальный синтаксис):
docker compose up
Compose V2 встроен в Docker CLI.
Важные элементы docker-compose.yml
- services
- volumes
- networks
- depends_on
- environment
- restart
Пример restart policy:
restart: always
Где особенно полезен
- Laravel + MySQL + Redis
- WordPress + Nginx + PHP-FPM
- Django + PostgreSQL
- Микросервисы на одном сервере
Для одного контейнера Compose избыточен. Для кластера — недостаточен.
Частые ошибки
❌ Использовать latest без версий ❌ Хранить секреты в YAML ❌ Не использовать volumes для данных ❌ Пытаться заменить Kubernetes в high-load
Безопасность
Нельзя:
- Публиковать .env в репозитории
- Хранить пароли в docker-compose.yml
Лучше:
env_file: - .env
Что не является Docker Compose
- Оркестратор уровня Kubernetes
- CI/CD система
- Docker Engine
- Контейнер
Аналоги и связанные термины
- Docker
- Container
- Docker Image
- Kubernetes
- Volume
- CI/CD
Пример использования
«Проект запускается через Docker Compose: три сервиса (nginx, php-fpm, mysql) в одном стеке.»
Мини-FAQ
Можно ли использовать Compose в продакшене? Да, для небольших проектов или single-node инфраструктуры.
Можно ли масштабировать сервисы? Да, но без полноценного авто-восстановления.
Compose заменяет Kubernetes? Нет. Это инструмент другого уровня.
Смотри также
- Docker
- Container
- Docker Image
- Kubernetes
- CI/CD