Docker Compose для локальной разработки: полный рецепт
Локальный стенд на Docker Compose экономит часы онбординга: новый разработчик поднимает проект одной командой вместо дня чтения вики. Собрал рецепт, который использую в каждом проекте — с hot-reload, дампом базы и админками.
Ключевая идея — разделить образы на «продовые» и «девовые». Девовые монтируют исходники как volume и запускают процесс в режиме watch. Продовые собираются multi-stage и не содержат ничего лишнего.
services:
api:
build: ./api
volumes:
- ./api:/app
command: uvicorn main:app --reload --host 0.0.0.0
depends_on:
db:
condition: service_healthy
db:
image: postgres:17
healthcheck:
test: ["CMD-SHELL", "pg_isready -U app"]
interval: 5sДампы и сиды
Добавьте сервис migrate, который применяет миграции и заливает анонимизированный дамп прода. depends_on с condition: service_healthy гарантирует порядок запуска — больше никаких «перезапусти ещё раз, сейчас заведётся».
И не храните секреты в compose-файле: env_file плюс локальный .env, который есть в .gitignore, решают проблему раз и навсегда.