Docker Compose — это инструмент для описания и запуска многоконтейнерных приложений с помощью единого конфигурационного файла (обычно
docker-compose.yml
Основная идея
Вместо того чтобы вручную запускать каждый контейнер и связывать их сетью и томами, вы описываете всю инфраструктуру приложения в YAML-файле:
- Сервисы (services) — отдельные контейнеры с указанием образа или .
Dockerfile
- Сети (networks) — как контейнеры будут общаться друг с другом.
- Тома (volumes) — куда сохраняются данные.
- Переменные окружения (environment) — настройки для каждого сервиса.
- Порты (ports) — маппинг между хостом и контейнером.
Пример конфигурации
version: "3.9" services: app: build: . ports: - "8080:8080" environment: DB_HOST: db DB_USER: appuser depends_on: - db db: image: postgres:16-alpine environment: POSTGRES_USER: appuser POSTGRES_PASSWORD: secret POSTGRES_DB: appdb volumes: - db_data:/var/lib/postgresql/data volumes: db_data:
Ключевые возможности
- Быстрый запуск окружений— и всё приложение поднимается за один шаг.
docker compose up -d
- Локальная разработка
Легко эмулировать продакшн-среду у каждого разработчика. - Версионирование конфигурации
Файлхранится в Git, что делает конфигурацию воспроизводимой.docker-compose.yml
- Изоляция окружений
Каждое окружение (dev, test, stage) может иметь свой compose-файл или override.
Практические приёмы
- Override-файлы () — для настройки параметров в dev-режиме (маппинг исходников, hot-reload).
docker-compose.override.yml
- .env файл — вынос чувствительных данных и параметров окружения.
- Профили (profiles) — запуск только нужных сервисов ().
docker compose --profile debug up
- Мульти-stage build в связке с Compose для оптимизации образов.
- Поддержка нескольких файлов:
docker compose -f docker-compose.yml -f docker-compose.prod.yml up
Интеграция с другими инструментами
- Docker Swarm — можно масштабировать сервисы на нескольких узлах с теми же конфигами.
- CI/CD — автоматический запуск Compose-окружения для тестов.
- Kubernetes — через утилиты типа Kompose можно конвертировать в манифесты K8s.
docker-compose.yml
Безопасность и удобство
- Не храните пароли прямо в YAML — используйте или секреты (
.env
).docker secrets
- Для production лучше разделять образы и конфиги, избегая dev-инструментов в рантайме.
- Мониторьте версии образов и регулярно пересобирайте сервисы.
Для чего это клиенту
Compose делает инфраструктуру приложения прозрачной, воспроизводимой и управляемой. Клиент или команда разработки получают среду, которую можно поднять на любом компьютере или сервере за минуты, без «сюрпризов» в настройках. Это сокращает время на развёртывание, упрощает онбординг новых сотрудников и минимизирует человеческий фактор.