Docker Compose — это инструмент для запуска нескольких связанных контейнеров одной командой. Он особенно полезен, когда приложение состоит не только из backend, но и из базы данных, кэша, очереди или frontend.
Когда нужен Docker Compose
- локальная разработка
- быстрый запуск стенда
- тестирование микросервисов
- единая конфигурация для команды
Вместо длинных docker run вы описываете сервисы в docker-compose.yml или compose.yaml.
Простой пример
Допустим, есть приложение app и PostgreSQL.
services:
app:
build: .
ports:
- "8000:8000"
depends_on:
- db
environment:
DB_HOST: db
DB_PORT: 5432
DB_NAME: mydb
DB_USER: user
DB_PASSWORD: password
db:
image: postgres:16
restart: always
environment:
POSTGRES_DB: mydb
POSTGRES_USER: user
POSTGRES_PASSWORD: password
volumes:
- pgdata:/var/lib/postgresql/data
volumes:
pgdata:
Как запустить
docker compose up -d— запуск в фонеdocker compose ps— список контейнеровdocker compose logs -f— просмотр логовdocker compose down— остановкаdocker compose down -v— остановка с удалением томов
Что важно понимать
- 🔹 services — список контейнеров
- 🔹 build — собрать образ из Dockerfile
- 🔹 image — использовать готовый образ
- 🔹 ports — проброс портов с хоста в контейнер
- 🔹 depends_on — порядок запуска сервисов
- 🔹 volumes — постоянное хранение данных
- 🔹 environment — переменные окружения
Частые ошибки
- думать, что depends_on ждёт полной готовности БД — это не так, он ждёт только запуск контейнера
- хранить пароли прямо в файле — лучше использовать .env
- не подключать volume для БД — данные пропадут после пересоздания контейнера
- путать localhost и имя сервиса: внутри сети Compose приложение должно обращаться к БД по имени db, а не 127.0.0.1
Полезные практики
- ✅ использовать .env для конфигурации
- ✅ разделять dev и prod настройки
- ✅ называть сервисы понятно: api, db, redis
- ✅ добавлять healthcheck для критичных сервисов
- ✅ не тащить Compose в production без понимания ограничений
Почему Compose любят разработчики
Он упрощает onboarding, делает окружение воспроизводимым и снижает количество ошибок “у меня работает”. Один файл описывает всю инфраструктуру проекта для локального запуска 🚀
Если вы изучаете Docker, Compose — обязательный шаг после базовых контейнеров: именно здесь начинается работа с реальными приложениями, а не с одиночными образами.
📌 Ниже стоит посмотреть подборку каналов про IT — там много полезного по Docker, DevOps, backend и инфраструктуре.