
SOFTMOA TECHNOLOGY
Docker Compose v2 고급 활용법: 프로파일, Watch, GPU 지원까지
소프트모아가 정리한 기술 기록입니다.
Contents
작성일 2026. 04. 04.
Docker Compose v2는 단순한 컨테이너 오케스트레이션을 넘어 개발 환경의 핵심 인프라로 자리잡았습니다. 2026년 현재 프로파일 기반 서비스 관리, 파일 동기화(Watch), GPU 지원, 헬스체크 의존성 등 프로덕션 수준의 기능을 제공합니다. 이 글에서는 실무에서 바로 적용할 수 있는 고급 Compose 기법을 다룹니다.
프로파일(Profiles)로 서비스 그룹 관리
프로파일을 사용하면 환경별로 필요한 서비스만 선택적으로 실행할 수 있습니다.
# docker-compose.yml
services:
# 항상 실행되는 핵심 서비스 (프로파일 미지정)
app:
build: .
ports:
- "8080:8080"
depends_on:
db:
condition: service_healthy
db:
image: postgres:17
environment:
POSTGRES_DB: myapp
POSTGRES_PASSWORD: secret
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"]
interval: 5s
timeout: 5s
retries: 5
# 개발 환경에서만 필요한 서비스
adminer:
image: adminer
ports:
- "8081:8080"
profiles:
- dev
mailhog:
image: mailhog/mailhog
ports:
- "1025:1025"
- "8025:8025"
profiles:
- dev
# 모니터링 스택
prometheus:
image: prom/prometheus
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
profiles:
- monitoring
grafana:
image: grafana/grafana
ports:
- "3000:3000"
profiles:
- monitoring
# 테스트용 서비스
test-runner:
build:
context: .
dockerfile: Dockerfile.test
profiles:
- test# 프로파일 사용법
docker compose up # app + db만 실행
docker compose --profile dev up # app + db + adminer + mailhog
docker compose --profile monitoring up # app + db + prometheus + grafana
docker compose --profile dev --profile monitoring up # 전부
# 환경 변수로 기본 프로파일 설정
export COMPOSE_PROFILES=dev,monitoring
docker compose upWatch 모드: 핫 리로드 자동화
docker compose watch는 로컬 파일 변경을 감지하여 컨테이너를 자동 업데이트합니다. 볼륨 마운트보다 성능이 좋고, 빌드 단계를 포함한 동기화가 가능합니다.
services:
web:
build: .
ports:
- "3000:3000"
develop:
watch:
# 소스 코드 변경 -> 컨테이너에 동기화
- action: sync
path: ./src
target: /app/src
ignore:
- node_modules/
- "**/*.test.js"
# package.json 변경 -> 이미지 리빌드 + 재시작
- action: rebuild
path: ./package.json
# 설정 파일 변경 -> 컨테이너만 재시작
- action: sync+restart
path: ./config
target: /app/config
api:
build: ./api
ports:
- "8080:8080"
develop:
watch:
- action: sync
path: ./api/src
target: /app/src
- action: rebuild
path: ./api/go.mod# Watch 모드 실행
docker compose watch
# 백그라운드에서 실행 + 로그 표시
docker compose watch --no-up &
docker compose up -d
docker compose logs -f의존성과 헬스체크 고급 설정
services:
app:
build: .
depends_on:
db:
condition: service_healthy
restart: true # db 재시작 시 app도 재시작
redis:
condition: service_healthy
migrations:
condition: service_completed_successfully # 마이그레이션 완료 후 시작
migrations:
build: .
command: npm run db:migrate
depends_on:
db:
condition: service_healthy
db:
image: postgres:17
healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"]
interval: 5s
timeout: 5s
retries: 10
start_period: 30s # 시작 후 30초간 실패 무시
start_interval: 2s # 시작 기간 중 체크 간격
redis:
image: redis:7-alpine
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 5s
timeout: 3s
retries: 5GPU 지원 (AI/ML 워크로드)
services:
ml-training:
image: pytorch/pytorch:2.5-cuda12.4-cudnn9-runtime
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: all # 모든 GPU 사용
capabilities: [gpu]
volumes:
- ./data:/data
- ./models:/models
inference:
build: ./inference
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: 1 # GPU 1개만
capabilities: [gpu]
limits:
memory: 8G # 메모리 제한
ports:
- "8000:8000"다중 Compose 파일 오버라이드
# docker-compose.yml (기본)
services:
app:
image: myapp:latest
ports:
- "8080:8080"
environment:
NODE_ENV: production
# docker-compose.override.yml (자동 오버라이드)
services:
app:
build: . # 이미지 대신 빌드
volumes:
- ./src:/app/src # 소스 마운트
environment:
NODE_ENV: development
DEBUG: "app:*"
# docker-compose.staging.yml (별도 환경)
services:
app:
image: myapp:staging
environment:
NODE_ENV: staging
DATABASE_URL: ${STAGING_DB_URL}# 사용법
docker compose up # yml + override 자동 병합
docker compose -f docker-compose.yml \
-f docker-compose.staging.yml up # 스테이징 환경
# 병합 결과 미리보기
docker compose config # 최종 설정 출력
docker compose -f docker-compose.yml \
-f docker-compose.staging.yml config유용한 Compose 명령어 모음
# 서비스 상태 확인
docker compose ps -a # 모든 서비스 상태
docker compose top # 프로세스 목록
docker compose stats # 리소스 사용량 (실시간)
# 로그
docker compose logs -f --tail=100 app # 특정 서비스 최근 100줄
docker compose logs --since 5m # 최근 5분
# 실행 중인 컨테이너에 명령 실행
docker compose exec app bash # 셸 접속
docker compose exec db psql -U postgres # DB 접속
# 일회성 명령 실행
docker compose run --rm app npm test # 테스트 실행 후 컨테이너 삭제
# 이미지 관리
docker compose build --no-cache # 캐시 없이 빌드
docker compose pull # 이미지 업데이트
docker compose push # 레지스트리에 푸시
# 정리
docker compose down # 컨테이너 중지 + 삭제
docker compose down -v # 볼륨까지 삭제
docker compose down --rmi all # 이미지까지 삭제Docker Compose v2는 단순한 개발 도구를 넘어 스테이징, 테스트, AI/ML 워크로드까지 아우르는 범용 컨테이너 관리 도구입니다. 프로파일로 환경별 서비스를 유연하게 관리하고, Watch로 개발 생산성을 높이며, 헬스체크 의존성으로 안정적인 서비스 기동을 보장하세요.
Share this
Tool
Showing 1 to 10 of 72 entries
