화. 8월 12th, 2025

D: 🚀 도커 컴포즈(Docker Compose)를 처음 접하는 분들을 위한 완벽 가이드
복잡한 멀티 컨테이너 애플리케이션을 쉽게 관리할 수 있는 Docker Compose의 핵심인 docker-compose.yml 파일의 구조를 차근차근 알아보겠습니다!


1. Docker Compose란?

“여러 컨테이너를 하나의 파일로 정의하고 관리하는 도구”

  • 단일 호스트에서 여러 서비스(DB, 웹 서버, 캐시 등)를 YAML 파일로 한 번에 설정
  • docker run 명령어를 매번 입력할 필요 없음 → 생산성 ⬆️
  • 개발, 테스트, 배포 환경을 일관되게 유지

👉 예시 시나리오: 웹 애플리케이션(Python) + MySQL DB + Redis 캐시를 한 번에 실행!


2. YAML 파일 기본 구조 살펴보기

기본 템플릿은 다음과 같아요. 주석(#)으로 각 부분을 설명했습니다!

version: "3.8"  # Docker Compose 버전 (3.x 권장)

services:       # 실행할 서비스(컨테이너) 목록
  web:          # 서비스 이름 (예: 웹 서버)
    image: nginx:latest  # 사용할 이미지
    ports:
      - "80:80"           # 호스트:컨테이너 포트 매핑
    volumes:
      - ./html:/usr/share/nginx/html  # 볼륨 마운트

  db:
    image: mysql:5.7
    environment:          # 환경 변수
      MYSQL_ROOT_PASSWORD: my-secret-pw

3. 주요 섹션 상세 설명

🔹 version

  • 의미: Docker Compose 파일 형식 버전
  • 예시: version: "3.8" (최신 버전 사용 권장)

🔹 services

  • 의미: 실행할 컨테이너들을 정의하는 곳
  • 예시:
    frontend:
    image: my-web-app:1.0
    depends_on:  # 의존성 설정
      - backend

🔹 networks (선택 사항)

  • 의미: 사용자 정의 네트워크 생성
  • 예시:
    networks:
    my-network:
      driver: bridge

🔹 volumes (선택 사항)

  • 의미: 데이터 영구 저장을 위한 볼륨 설정
  • 예시:
    volumes:
    db-data:  # 이름만 지정하면 도커가 자동 관리

4. 실전 예제: 웹 앱 + MySQL 구성

version: "3.8"

services:
  app:
    build: .  # 현재 디렉토리의 Dockerfile로 빌드
    ports:
      - "5000:5000"
    environment:
      FLASK_ENV: development

  mysql:
    image: mysql:8.0
    environment:
      MYSQL_DATABASE: mydb
      MYSQL_USER: user
      MYSQL_PASSWORD: password
    volumes:
      - mysql-data:/var/lib/mysql  # DB 데이터 보존

volumes:
  mysql-data:

5. 주의사항 & 팁

⚠️ 들여쓰기에 유의하세요! YAML은 공백(스페이스 2칸 권장)으로 구조를 구분합니다.
💡 docker-compose up -d로 백그라운드 실행, docker-compose down으로 정리
🔥 docker-compose logs로 로그 확인 가능


📌 마무리: 이제 docker-compose.yml 파일을 직접 작성해 보세요!
간단한 설정부터 시작해 점점 복잡한 시스템도 쉽게 관리할 수 있을 거예요. 🎉

도움이 되셨다면 공유해 주세요! 더 궁금한 점은 댓글로 남겨주시면 답변드립니다.

답글 남기기

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