Профілі дають змогу тримати в одному compose.yaml сервіси, які запускаються лише за потреби.
services:
app:
build: .
postgres:
image: postgres:18
mailpit:
image: axllent/mailpit
profiles: [tools]
phpmyadmin:
image: phpmyadmin
profiles: [tools]
horizon:
build: .
command: php artisan horizon
profiles: [queue]
playwright:
image: mcr.microsoft.com/playwright
profiles: [e2e]
Правила:
- сервіс без
profilesзапускається завжди; - сервіс з профілем - лише коли профіль активовано:
docker compose up -d # app, postgres
docker compose --profile tools up -d # + mailpit, phpmyadmin
docker compose --profile tools --profile queue up -d
COMPOSE_PROFILES=tools,queue docker compose up -d
- явно названий сервіс запускається навіть без активного профілю:
docker compose run --rm playwright- профіль не потрібен; - якщо сервіс з профілем залежить (
depends_on) від іншого сервісу з неактивним профілем - Compose повідомить про помилку; залежності мають бути або без профілю, або в тому самому.
Коли профілі зручніші за окремі файли:
- допоміжні інструменти розробки (адмінки баз, перехоплювачі пошти, профайлери), які потрібні не щодня;
- важкі сервіси (Elasticsearch, браузерні тести), що споживають багато пам'яті, - вмикати лише для відповідних задач;
- ролі одного застосунку - вебсервер, воркер черги, планувальник - запускаються за потреби;
- усе в одному файлі - видно повну картину оточення, без пошуку по кількох файлах.
Коли краще окремі файли (-f): коли відрізняється конфігурація тих самих сервісів між оточеннями (розробка, CI, продакшен), а не набір сервісів.
Перевірка: docker compose --profile tools config --services - перелік сервісів, що будуть запущені з цим профілем.