Quick Flow
services:
app:
build: . # profile 없음 → 항상 실행
adminer:
image: adminer
profiles:
- debug # --profile debug 할 때만 실행
prometheus:
image: prom/prometheus
profiles:
- monitoring # --profile monitoring 할 때만 실행# 기본 서비스만 실행
docker compose up -d
# debug 프로파일 포함
docker compose --profile debug up -d
# 여러 프로파일 동시 활성화
docker compose --profile debug --profile monitoring up -dprofile이 없는 서비스는 항상 활성화됩니다. profile 서비스는 활성 profile과 일치할 때만 포함되지만, 그 서비스를 명시적으로 실행하면 해당 서비스와 필요한 depends_on만 시작됩니다.
프로필 활성화
프로파일 없는 서비스는 항상 실행된다 — 핵심 서비스를 기본으로 유지하는 원칙
profiles 키가 없는 서비스는 docker compose up만 해도 항상 시작됩니다. profiles에 이름을 지정한 서비스는 해당 프로파일을 명시하지 않으면 시작되지 않습니다. 이 규칙 덕분에 앱과 DB 같은 핵심 서비스는 기본으로 두고, 보조 도구만 프로파일로 분리할 수 있습니다.
services:
app:
build: .
# profile 없음 → 항상 포함
db:
image: postgres:16
# profile 없음 → 항상 포함
mailhog:
image: mailhog/mailhog
profiles:
- tools # docker compose --profile tools up 해야 실행됨--profile 플래그와 COMPOSE_PROFILES 환경변수 — 두 가지 방식으로 프로파일을 활성화한다
CLI에서는 --profile 플래그로, 환경 파일에서는 COMPOSE_PROFILES 변수로 활성화할 프로파일을 지정합니다. .env 파일에 COMPOSE_PROFILES=debug,tools처럼 적어 두면 매번 플래그를 입력하지 않아도 됩니다. 이 방식은 개발자 개인 설정을 .env 파일로 관리할 때 편리합니다.
# CLI 플래그 방식
docker compose --profile debug up -d
# 환경변수 방식 (.env 파일)
echo "COMPOSE_PROFILES=debug,tools" >> .env
docker compose up -d # debug와 tools 프로파일이 자동 활성화profiles와 override 파일
profiles와 override 파일은 해결하는 문제가 다르다
profiles는 "어떤 서비스를 켤지"를 고르는 기능이고, override 파일은 "같은 서비스 설정을 어떻게 바꿀지"를 고르는 기능입니다. Adminer 같은 보조 서비스를 선택적으로 띄우는 건 profiles가 맞고, app 서비스에 개발용 bind mount나 디버그 포트를 덧붙이는 건 override 파일이 더 맞습니다.
# 선택적 서비스는 profiles
services:
adminer:
image: adminer
profiles: [tools]
# 같은 app 서비스의 개발 설정은 override 파일에서 조정실전 활용 — tools, monitoring, debug 프로파일로 선택적 구성을 나눈다
프로파일은 개발 팀이 공통으로 쓰는 Compose 파일에서 "항상 필요한 것"과 "상황에 따라 필요한 것"을 명확히 구분하는 도구입니다. DB 관리 UI, 메일 테스트 서버, 모니터링 스택처럼 선택적으로 필요한 서비스를 프로파일로 묶어 기본 실행 구성을 가볍게 유지합니다.
services:
app:
build: .
db:
image: postgres:16
# 개발 편의 도구
adminer:
image: adminer
ports:
- "8080:8080"
profiles: [tools]
# 개발용 메일 서버
mailhog:
image: mailhog/mailhog
profiles: [tools]
# 모니터링 스택
prometheus:
image: prom/prometheus
profiles: [monitoring]
grafana:
image: grafana/grafana
profiles: [monitoring]의존성 경계
프로필이 의존 서비스를 자동으로 모두 켜 준다고 가정하지 마세요. 비활성 profile 서비스가 활성 서비스의 depends_on에 들어 있으면 Compose가 오류를 낼 수 있습니다. profile 서비스를 직접 target하면 그 서비스와 선언된 의존성은 시작되지만, 같은 profile의 다른 서비스까지 함께 활성화되지는 않습니다.
참고 링크
1 sources