화. 8월 12th, 2025

D:

도커 컴포즈(Docker Compose)는 여러 컨테이너를 한 번에 관리할 수 있는 강력한 도구입니다. 🐳 이 가이드에서는 YAML 문법 기초부터 실무에서 바로 쓸 수 있는 고급 설정까지 단계별로 설명합니다. 워드프레스+MySQL 연동, 로드 밸런서 구성 등 5가지 실전 예제로 복잡한 개념도 쉽게 이해할 수 있습니다. “도커 컴포즈 파일이 왜 필요한가요?”라는 질문부터 시작해보죠!

🔍 Docker Compose 기본 개념 이해

도커 컴포즈는 다중 컨테이너 애플리케이션을 정의하고 실행하기 위한 도구로, docker-compose.yml 파일에 모든 서비스 설정을 기록합니다. 단일 docker run 명령어로는 구현하기 어려운 복잡한 구성을 간편하게 관리할 수 있는 것이 핵심 장점입니다.

주요 기능 3가지

  • ✅ 서비스 간 의존성 관리 (depends_on)
  • ✅ 환경 변수 공유 (environment)
  • ✅ 볼륨/네트워크 공유 설정

📝 YAML 파일 작성법

도커 컴포즈 파일은 들여쓰기(indentation)가 생명! 기본 구조를 알아봅시다.


version: '3.8'  # 사용할 도커 컴포즈 버전

services:       # 컨테이너 서비스 정의
  web:
    image: nginx:latest
    ports:
      - "80:80"

주요 필드 설명

필드 설명 예시
build Dockerfile 위치 지정 build: ./app
environment 환경 변수 설정 MYSQL_ROOT_PASSWORD: password

🚀 실전 예제 5선

1. 워드프레스 + MySQL 연동


version: '3.8'

services:
  db:
    image: mysql:5.7
    volumes:
      - db_data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: wordpress
      MYSQL_DATABASE: wordpress

  wordpress:
    depends_on:
      - db
    image: wordpress:latest
    ports:
      - "8000:80"
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: root

volumes:
  db_data:

2. 로드 밸런서 구성 (Nginx + 3개 웹 서버)


version: '3.8'

services:
  web1:
    build: ./webapp
    environment:
      - NODE_ID=1

  web2:
    build: ./webapp
    environment:
      - NODE_ID=2

  nginx:
    image: nginx
    ports:
      - "8080:80"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
    depends_on:
      - web1
      - web2

⚠️ 주의사항 & 트러블슈팅

  • depends_on은 컨테이너 실행 순서만 제어할 뿐, 서비스 준비 상태는 확인하지 않음
  • ❗ 볼륨 사용 시 호스트와 컨테이너 간 권한 충돌 발생 가능 (특히 Linux/Mac)
  • 💡 docker-compose config 명령으로 YAML 파일 검증 가능

🔮 고급 활용 팁

  1. 다중 컴포즈 파일 사용: docker-compose -f base.yml -f prod.yml
  2. 환경별 변수 관리: .env 파일 활용
  3. 리소스 제한: mem_limit, cpus 설정

## 결론 ##

이 가이드로 도커 컴포즈의 핵심 개념과 실무 적용법을 모두 익히셨습니다. 🎉 지금 바로 docker-compose up 명령어를 실행해 첫 번째 멀티 컨테이너 애플리케이션을 구동해보세요! 궁금한 점은 댓글로 남겨주시면 상세히 답변드리겠습니다. 다음 단계로는 도커 스웜이나 쿠버네티스 학습을 추천합니다.

답글 남기기

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