Docker Compose — инструмент оркестрации контейнеров на уровне одного хоста. Конфигурация приложения описывается в файле docker-compose.yml, содержащем описание сервисов (контейнеров), их зависимостей, сетей, томов и переменных окружения. Compose обеспечивает воспроизводимое развёртывание стека: одна команда создаёт все контейнеры и настраивает сети между ними.
Пример docker-compose.yml
version: '3.9'
services:
nginx:
image: nginx:alpine
ports: ["80:80", "443:443"]
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
depends_on: [php]
php:
build: ./php
volumes:
- ./site:/var/www/html
depends_on: [mysql]
mysql:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: secret
volumes:
- db_data:/var/lib/mysql
volumes:
db_data:
Основные команды
docker compose up -d # Запустить в фоне
docker compose down # Остановить и удалить
docker compose logs -f # Следить за логами
docker compose ps # Статус контейнеров
docker compose exec php bash # Войти в контейнер
История
Docker Compose создан компанией Orchard Laboratories в 2013 году как fig. Docker Inc. купила Orchard в 2014 году и переименовала в Docker Compose. Compose V2 (2021) переписан на Go и интегрирован в Docker CLI как docker compose (без дефиса) вместо docker-compose. Docker Desktop включает Compose по умолчанию.
Связь с хостингом
Docker Compose — стандарт для development-окружений и небольших production-деплоев на VDS. Для production на одном сервере Compose достаточен; для кластеров переходят на Kubernetes или Docker Swarm. Типичный стек для WordPress: nginx + php-fpm + mysql + redis, описанный в одном compose.yml. В CI/CD (GitHub Actions) Compose используется для тестовых окружений.
История Docker Compose
Docker Compose создан компанией Orchard (инструмент Fig) в 2013 году. Docker приобрёл Orchard в 2014 году и переименовал продукт в Docker Compose. Формат docker-compose.yml v1 появился в 2015 году, v2 — в 2016 году с поддержкой сетей и volumes. В 2022 году Docker Compose v2 стал плагином для Docker CLI (docker compose без дефиса). Поддерживает Compose Spec, принятый как открытый стандарт. Используется в >60% проектов, развёртываемых на Docker.
Пример docker-compose.yml для LAMP
version: "3.9"
services:
web:
image: php:8.2-apache
ports: ["80:80"]
volumes: [./src:/var/www/html]
depends_on: [db]
db:
image: mysql:8.0
environment:
MYSQL_ROOT_PASSWORD: secret
MYSQL_DATABASE: myapp
volumes: [db_data:/var/lib/mysql]
volumes:
db_data:
Типичные ошибки при работе с Docker Compose
- Хранение паролей в
docker-compose.ymlв открытом виде — используйте Docker Secrets или.env-файлы. - Не указан
restart: unless-stopped— сервисы не поднимаются после перезагрузки VPS. - Версия Compose file 2.x и 3.x несовместимы по некоторым параметрам (memory limits).
- Забыть удалить orphan-контейнеры:
docker compose up -d --remove-orphans.
Для production Docker Compose используется совместно с Nginx-прокси (nginx-proxy, Traefik) для маршрутизации трафика между контейнерами. Compose-файлы рекомендуется хранить в git-репозитории и деплоить через git deploy.