본문 바로가기
Infra2025년 11월 20일7분 읽기

Docker Compose V2 심화 — profiles와 watch 모드

YS
김영삼
조회 213

Docker Compose V2 신기능

Docker Compose V2는 Go로 재작성되어 성능이 크게 향상되었고, profiles와 watch 같은 실용적인 기능이 추가되었습니다. 개발 환경 구성의 효율성을 한 단계 높일 수 있습니다.

Profiles로 환경별 서비스 관리

services:
  app:
    build: .
    ports:
      - "3000:3000"
    depends_on:
      - db
      - redis

  db:
    image: postgres:16-alpine
    environment:
      POSTGRES_DB: myapp
      POSTGRES_PASSWORD: secret
    volumes:
      - pgdata:/var/lib/postgresql/data

  redis:
    image: redis:7-alpine

  adminer:
    image: adminer
    ports:
      - "8080: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:
      - "3001:3000"
    profiles: [monitoring]

  test-db:
    image: postgres:16-alpine
    environment:
      POSTGRES_DB: myapp_test
      POSTGRES_PASSWORD: test
    profiles: [test]

volumes:
  pgdata:

Profiles 사용법

# 기본 서비스만 실행
docker compose up -d

# 개발 도구 포함
docker compose --profile dev up -d

# 여러 프로필 동시
docker compose --profile dev --profile monitoring up -d

# 환경 변수로 기본 프로필 설정
COMPOSE_PROFILES=dev docker compose up -d

Watch 모드 — 파일 변경 자동 반영

services:
  app:
    build:
      context: .
      dockerfile: Dockerfile
    ports:
      - "3000:3000"
    develop:
      watch:
        - action: sync
          path: ./src
          target: /app/src
          ignore:
            - "**/*.test.ts"

        - action: rebuild
          path: ./package.json

        - action: sync+restart
          path: ./config
          target: /app/config

# watch 모드 실행
docker compose watch

# 또는 백그라운드 실행 + watch
docker compose up -d --watch

멀티 스테이지 빌드와 조합

FROM node:20-alpine AS base
WORKDIR /app
COPY package*.json ./

FROM base AS development
RUN npm install
COPY . .
CMD ["npm", "run", "dev"]

FROM base AS build
RUN npm ci
COPY . .
RUN npm run build

FROM node:20-alpine AS production
WORKDIR /app
COPY --from=build /app/dist ./dist
COPY --from=build /app/node_modules ./node_modules
CMD ["node", "dist/server.js"]

유용한 Compose V2 명령어

명령어설명
docker compose up --wait헬스체크 통과까지 대기
docker compose alpha dry-run실행 전 시뮬레이션
docker compose stats리소스 사용량 모니터링
docker compose cp호스트-컨테이너 파일 복사
docker compose config최종 합성된 설정 확인
docker compose events실시간 이벤트 스트림

여러 Compose 파일 합성

# 기본 설정 + 환경별 오버라이드
docker compose -f docker-compose.yml \
  -f docker-compose.dev.yml up -d

# docker-compose.dev.yml (오버라이드)
services:
  app:
    build:
      target: development
    volumes:
      - .:/app
      - /app/node_modules
    environment:
      - DEBUG=true
      - NODE_ENV=development
  • profiles는 하나의 Compose 파일로 dev/staging/prod를 관리할 수 있게 합니다
  • watch 모드는 볼륨 마운트보다 성능이 좋고, macOS/Windows에서도 안정적입니다
  • depends_oncondition: service_healthy를 사용하면 순서 보장이 확실합니다
  • V2에서는 docker-compose 대신 docker compose(하이픈 없음)을 사용합니다

Docker Compose V2의 profiles와 watch는 개발 환경 관리를 크게 개선합니다. 특히 watch 모드는 로컬 개발 시 컨테이너와의 파일 동기화를 자동화하여 생산성을 높입니다.

댓글 0

아직 댓글이 없습니다.
Ctrl+Enter로 등록