استفاده از Profiles در Docker Compose
profiles در Docker Compose برای این است که بعضی سرویسها فقط در شرایط خاص اجرا شوند.
یعنی لازم نیست هر بار همه سرویسها بالا بیایند.
به زبان ساده:
پروفایل = دستهبندی سرویسها برای اجراهای مختلف
مثلاً:
- حالت development
- حالت production
- ابزارهای debug
- سرویسهای اختیاری مثل monitoring
ایده اصلی
فرض کن این سرویسها را داری:
- api
- postgres
- redis
- adminer (UI برای دیتابیس)
- prometheus (monitoring)
در development شاید همه را بخواهی. در production شاید فقط بعضیها.
اینجاست که profiles کمک میکند.
مثال ساده
services:
api:
build: .
db:
image: postgres
adminer:
image: adminer
profiles:
- dev
الان اگر بزنی:
docker compose up
فقط اینها بالا میآیند:
api
db
چرا؟ چون adminer داخل پروفایل dev است.
اگر بخواهی adminer هم اجرا شود:
docker compose --profile dev up
حالا اجرا میشود:
api
db
adminer
چند پروفایل
مثلاً:
services:
api:
build: .
db:
image: postgres
redis:
image: redis
profiles:
- cache
adminer:
image: adminer
profiles:
- dev
حالا چند حالت داریم.
بدون پروفایل:
docker compose up
اجرا میشود: api, db
اگر dev:
docker compose --profile dev up
اجرا: api, db, adminer
اگر cache:
docker compose --profile cache up
اجرا: api, db, redis
اگر چند پروفایل:
docker compose --profile dev --profile cache up
اجرا: api, db, adminer, redis
نکته مهم
سرویسهایی که profile ندارند همیشه اجرا میشوند.
این خیلی مهم است.
پس معمولاً:
بدون profile → core services
با profile → optional services
مثال واقعی development
یک پروژه واقعی:
services:
api:
build: .
db:
image: postgres
redis:
image: redis
adminer:
image: adminer
profiles:
- dev
mailhog:
image: mailhog/mailhog
profiles:
- dev
prometheus:
image: prom/prometheus
profiles:
- monitoring
grafana:
image: grafana/grafana
profiles:
- monitoring
حالت عادی:
docker compose up
اجرا: api, db, redis
حالت dev:
docker compose --profile dev up
اجرا: api, db, redis, adminer, mailhog
حالت monitoring:
docker compose --profile monitoring up
اجرا: api, db, redis, prometheus, grafana
یک تریک خیلی خوب
میتوانی profile را با env کنترل کنی.
مثلاً:
COMPOSE_PROFILES=dev
docker compose up
یا داخل .env
COMPOSE_PROFILES=dev
این برای تیمها خیلی خوب است.
فرق profiles با compose override
خیلیها این دو را قاطی میکنند.
profiles → فعال/غیرفعال کردن سرویس
override file → تغییر config
مثلاً:
docker-compose.yml
docker-compose.dev.yml
ولی profiles داخل یک فایل است.
یک الگوی خیلی حرفهای
پروژههای بزرگ معمولاً این پروفایلها را دارند:
dev
debug
monitoring
worker
tools
مثلاً:
tools:
adminer
pgadmin
redis-insight
debug:
jaeger
zipkin
monitoring:
prometheus
grafana