화. 8월 12th, 2025

D: 개발을 하다 보면 웹 서버, 데이터베이스, 캐시 서버 등 여러 서비스를 동시에 운영해야 하는 경우가 많죠.
이런 복잡한 멀티 컨테이너 환경을 Docker Compose로 효율적으로 관리하는 방법을 상세하게 알아보겠습니다!

1. Docker Compose가 왜 필요할까? 🤔

기존 Docker는 단일 컨테이너를 실행하는 데 최적화되어 있습니다.
하지만 현대 애플리케이션은 여러 구성 요소가 유기적으로 연결되어 동작하죠.

예를 들어:

  • 웹 앱 (Node.js/Python)
  • 데이터베이스 (MySQL/PostgreSQL)
  • 캐시 시스템 (Redis)
  • 메시지 큐 (RabbitMQ)

이 모든 서비스를 수동으로 하나씩 실행하면?

docker run -d --name db mysql
docker run -d --name cache redis
docker run -d --name app -p 3000:3000 my-app

➡️ 명령어가 길어지고, 의존성 관리가 어려워집니다!

2. Docker Compose의 핵심 기능 🔥

YAML 파일 하나로 전체 서비스 스택을 정의합니다.

주요 장점:

  • 단일 명령으로 모든 컨테이너 실행/정지
  • 서비스 간 의존성 자동 관리
  • 네트워크/볼륨 설정 통합
  • 환경 변수 중앙 관리

3. 실전 예제: 웹 앱 + DB + Redis 구성 🛠️

docker-compose.yml 파일 예시:

version: '3.8'

services:
  web:
    build: .
    ports:
      - "5000:5000"
    depends_on:
      - redis
      - db
    environment:
      - DB_HOST=db
      - REDIS_HOST=redis

  redis:
    image: redis:alpine
    volumes:
      - redis_data:/data

  db:
    image: postgres:13
    environment:
      POSTGRES_PASSWORD: example
    volumes:
      - db_data:/var/lib/postgresql/data

volumes:
  db_data:
  redis_data:

4. 주요 기능 상세 설명 📚

▶ 서비스 의존성 관리

depends_on:
  - db
  - redis
  • 웹 서비스는 DB와 Redis가 준비된 후에 실행됩니다.

▶ 볼륨 관리

volumes:
  db_data:
  redis_data:
  • 데이터 영구 저장을 위해 볼륨을 사용합니다.

▶ 환경 변수 주입

environment:
  POSTGRES_PASSWORD: "secret"
  • 민감한 정보는 별도 .env 파일에서 관리할 수 있습니다.

5. 고급 활용 팁 💡

1) 멀티 스테이지 빌드

web:
  build:
    context: .
    target: production
  • 개발/운영 환경별로 다른 Dockerfile 스테이지 사용

2) 헬스 체크

healthcheck:
  test: ["CMD", "curl", "-f", "http://localhost"]
  interval: 30s
  timeout: 10s
  retries: 3
  • 컨테이너 상태를 주기적으로 확인

3) 리소스 제한

deploy:
  resources:
    limits:
      cpus: '0.50'
      memory: 512M
  • CPU/메모리 사용량 제한 설정

6. 실제 운영 시 주의사항 ⚠️

  1. 프로덕션 환경에서는 restart: always 추가
  2. 비밀번호는 절대 하드코딩하지 말고 .env 사용
  3. 로그 관리를 위해 로그 드라이버 설정
    logging:
     driver: "json-file"
     options:
       max-size: "200k"
       max-file: "10"

7. 실행 방법 🚀

# 전체 서비스 시작
docker-compose up -d

# 특정 서비스만 빌드
docker-compose build web

# 로그 확인
docker-compose logs -f

# 서비스 정지
docker-compose down

마무리 ✨

Docker Compose는 복잡한 멀티 컨테이너 환경을 선언적으로 관리할 수 있는 강력한 도구입니다.
이제 여러분도 YAML 파일 하나로 전체 인프라를 관리하는 DevOps 엔지니어의 세계로 들어가 보세요!

궁금한 점이 있다면 댓글로 남겨주세요. 함께 고민해 보겠습니다 😊

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다