Contents
see List개요
Docker Compose v2는 기존 Python 기반의 docker-compose를 Go로 완전히 재작성한 버전으로, Docker CLI의 플러그인으로 통합되었습니다. 더 빠른 실행 속도와 향상된 빌드 기능, 그리고 Docker Engine과의 긴밀한 통합을 제공합니다. 멀티 컨테이너 애플리케이션을 정의하고 관리하는 데 필수적인 도구입니다.
핵심 개념
Docker Compose v2는 YAML 파일로 멀티 컨테이너 환경을 선언적으로 정의합니다. v1과의 주요 차이점을 이해하는 것이 중요합니다.
- CLI 통합: docker-compose 대신 docker compose로 실행 (하이픈 없음)
- BuildKit 기본 활성화: 병렬 빌드와 캐시 최적화가 기본 적용
- 프로파일(Profiles): 환경별로 서비스 그룹을 나누어 선택적 실행 가능
- Watch 모드: 파일 변경 시 자동 동기화 및 재빌드
- Dry-run: 실제 실행 없이 변경 사항을 미리 확인
실전 예제
Next.js + PostgreSQL + Redis 스택의 Compose 파일을 작성해보겠습니다.
# docker-compose.yml
services:
app:
build:
context: .
dockerfile: Dockerfile
target: development
ports:
- "3000:3000"
volumes:
- .:/app
- /app/node_modules
environment:
- DATABASE_URL=postgresql://user:pass@db:5432/mydb
- REDIS_URL=redis://cache:6379
depends_on:
db:
condition: service_healthy
cache:
condition: service_started
develop:
watch:
- action: sync
path: ./src
target: /app/src
- action: rebuild
path: package.json
db:
image: postgres:16-alpine
volumes:
- pgdata:/var/lib/postgresql/data
- ./init.sql:/docker-entrypoint-initdb.d/init.sql
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: pass
POSTGRES_DB: mydb
healthcheck:
test: ["CMD-SHELL", "pg_isready -U user -d mydb"]
interval: 5s
timeout: 5s
retries: 5
profiles:
- full
- backend
cache:
image: redis:7-alpine
command: redis-server --maxmemory 256mb --maxmemory-policy allkeys-lru
volumes:
- redisdata:/data
profiles:
- full
- backend
volumes:
pgdata:
redisdata:프로파일을 활용한 선택적 실행 예시입니다.
# 전체 스택 실행
docker compose --profile full up -d
# 백엔드만 실행 (DB + Redis)
docker compose --profile backend up -d
# Watch 모드로 개발 (파일 변경 시 자동 동기화)
docker compose watch
# Dry-run으로 변경 확인
docker compose up --dry-run
# 특정 서비스만 재빌드
docker compose build --no-cache app
# 로그 실시간 확인 (특정 서비스)
docker compose logs -f app db활용 팁
- Healthcheck 필수: depends_on과 함께 healthcheck를 설정하면 서비스 시작 순서를 보장할 수 있습니다. 특히 DB 초기화가 완료된 후 앱을 시작해야 할 때 유용합니다.
- Watch 모드 활용: docker compose watch는 바인드 마운트보다 성능이 좋고, 특정 파일 변경 시 rebuild 액션으로 node_modules 재설치도 자동화할 수 있습니다.
- 환경 분리: docker-compose.override.yml로 개발 환경 설정을 분리하세요. 기본 파일에는 프로덕션 설정, override에는 볼륨 마운트와 디버그 포트를 추가합니다.
- 리소스 제한: deploy.resources로 CPU/메모리 제한을 설정하여 로컬 환경에서도 프로덕션과 유사한 리소스 조건을 시뮬레이션하세요.
- 네트워크 분리: 프론트엔드/백엔드 네트워크를 분리하여 보안을 강화하세요. DB는 백엔드 네트워크에만 연결합니다.
마무리
Docker Compose v2는 로컬 개발 환경부터 스테이징까지 멀티 컨테이너 애플리케이션을 효율적으로 관리하는 핵심 도구입니다. Profiles, Watch 모드, Healthcheck 등의 기능을 적극 활용하면 개발 워크플로우를 크게 개선할 수 있습니다. Kubernetes로 넘어가기 전 단계로도 충분히 강력한 오케스트레이션 도구입니다.