← Назад к вопросам
Как организована работа с Docker Compose
1.0 Junior🔥 241 комментариев
#Docker и контейнеризация
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Как организована работа с Docker Compose
Docker Compose — это инструмент для определения и запуска мультиконтейнерных Docker приложений. Он позволяет описать весь stack (базу данных, приложение, кэш, очередь сообщений) в одном YAML файле и управлять им как единым целым.
Базовая структура docker-compose.yml
version: '3.9'
services:
# Frontend приложение
web:
build:
context: ./frontend
dockerfile: Dockerfile
ports:
- "3000:3000"
environment:
- NODE_ENV=development
- API_URL=http://api:8000
depends_on:
- api
volumes:
- ./frontend:/app
- /app/node_modules
networks:
- app-network
# Backend приложение
api:
build:
context: ./backend
dockerfile: Dockerfile
ports:
- "8000:8000"
environment:
- DATABASE_URL=postgresql://user:password@db:5432/myapp
- REDIS_URL=redis://redis:6379
depends_on:
- db
- redis
volumes:
- ./backend:/app
networks:
- app-network
# PostgreSQL база данных
db:
image: postgres:15-alpine
environment:
- POSTGRES_USER=user
- POSTGRES_PASSWORD=password
- POSTGRES_DB=myapp
volumes:
- postgres_data:/var/lib/postgresql/data
networks:
- app-network
healthcheck:
test: ["CMD-SHELL", "pg_isready -U user"]
interval: 10s
timeout: 5s
retries: 5
# Redis для кэширования
redis:
image: redis:7-alpine
networks:
- app-network
volumes:
postgres_data:
networks:
app-network:
driver: bridge
Основные команды Docker Compose
# Запуск всех сервисов в фоне
docker compose up -d
# Просмотр логов в реальном времени
docker compose logs -f api
# Логи конкретного сервиса
docker compose logs db
# Остановка всех сервисов
docker compose stop
# Перезапуск сервисов
docker compose restart api
# Удаление контейнеров, сетей (volumes остаются)
docker compose down
# Удаление всего включая volumes
docker compose down -v
# Запуск одного сервиса
docker compose up db
# Выполнение команды в контейнере
docker compose exec api bash
# Просмотр статуса сервисов
docker compose ps
Лучшие практики организации
Разделение окружений — использую разные compose файлы:
docker-compose.yml # базовый файл
docker-compose.dev.yml # переопределение для dev
docker-compose.prod.yml # для production
# Запуск с переопределениями:
docker compose -f docker-compose.yml -f docker-compose.dev.yml up
Environment файлы — не коммитить чувствительные данные:
# .env.example (коммитится в Git)
DATABASE_PASSWORD=changeme
API_KEY=changeme
# .env (в .gitignore)
DATABASE_PASSWORD=real_password
API_KEY=real_key
# При запуске:
docker compose --env-file .env up
Volumes для development — для live reload кода:
services:
api:
volumes:
- ./backend:/app # mount source code
- /app/node_modules # но не node_modules
Health checks — для правильного порядка запуска:
services:
db:
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost"]
interval: 30s
timeout: 10s
retries: 3
Workflow разработки
# 1. Клонирование репозитория
git clone ...
cd project
# 2. Подготовка .env файла
cp .env.example .env
# редактируем .env с реальными значениями
# 3. Запуск всего stack
docker compose up -d
# 4. Проверка логов
docker compose logs -f
# 5. Запуск миграций БД
docker compose exec api python manage.py migrate
# 6. Работа в веб браузере
# http://localhost:3000 - frontend
# http://localhost:8000 - API
# 7. Остановка при завершении
docker compose down
Docker Compose незаменим для локальной разработки, интеграционного тестирования и быстрого развертывания всей инфраструктуры локально. Это экономит часы на настройку окружения для новых разработчиков.