화. 8월 12th, 2025

D: 🚀 도커 컴포즈(Docker Compose)는 여러 개의 컨테이너를 하나의 파일로 정의하고, 한 번에 관리할 수 있는 강력한 도구입니다. 복잡한 애플리케이션을 구성하는 웹 서버, 데이터베이스, 캐시 서버 등을 간편하게 배포할 수 있죠! 이번 포스팅에서는 실무에서 바로 활용할 수 있는 Docker Compose 파일 작성법을 상세히 알아보겠습니다.

1. Docker Compose 기본 구조 이해하기

version: '3.8'  # 사용할 Compose 파일 버전

services:  # 실행할 서비스(컨테이너) 정의
  web:
    image: nginx:latest
    ports:
      - "80:80"
  db:
    image: postgres:13
    environment:
      POSTGRES_PASSWORD: example

🔍 주요 필드 설명:

  • version: Compose 파일 형식 버전
  • services: 배포할 서비스 목록
  • image: 사용할 도커 이미지
  • ports: 포트 매핑 (호스트:컨테이너)
  • environment: 환경 변수 설정

2. 실전 예제 3가지 💻

예제 1: 웹 애플리케이션 + MySQL

version: '3.8'

services:
  frontend:
    build: ./frontend  # Dockerfile이 있는 디렉토리
    ports:
      - "3000:3000"
    depends_on:
      - backend

  backend:
    build: ./backend
    ports:
      - "8000:8000"
    environment:
      DB_HOST: db
      DB_USER: root
      DB_PASSWORD: password

  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_DATABASE: myapp
    volumes:
      - db_data:/var/lib/mysql

volumes:
  db_data:  # 데이터 영구 저장을 위한 볼륨

예제 2: WordPress + MariaDB

version: '3.8'

services:
  wordpress:
    image: wordpress:latest
    ports:
      - "8080:80"
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: wpuser
      WORDPRESS_DB_PASSWORD: wppassword
    depends_on:
      - db

  db:
    image: mariadb:10.5
    environment:
      MYSQL_ROOT_PASSWORD: rootpass
      MYSQL_USER: wpuser
      MYSQL_PASSWORD: wppassword
      MYSQL_DATABASE: wordpress
    volumes:
      - db_data:/var/lib/mysql

volumes:
  db_data:

예제 3: Redis 캐시 서버 포함

version: '3.8'

services:
  app:
    build: .
    ports:
      - "5000:5000"
    environment:
      REDIS_HOST: redis

  redis:
    image: redis:alpine
    ports:
      - "6379:6379"
    volumes:
      - redis_data:/data

volumes:
  redis_data:

3. 고급 기능 활용법 ⚡

1) 네트워크 사용자 정의

networks:
  app_network:
    driver: bridge

services:
  service1:
    networks:
      - app_network
  service2:
    networks:
      - app_network

2) 자원 제한 설정

services:
  web:
    image: nginx
    deploy:
      resources:
        limits:
          cpus: '0.50'
          memory: 512M

3) 로그 설정

services:
  web:
    image: nginx
    logging:
      driver: "json-file"
      options:
        max-size: "200k"
        max-file: "10"

4. Docker Compose 명령어 모음 📌

명령어 설명
docker-compose up 서비스 시작
docker-compose up -d 백그라운드 실행
docker-compose down 서비스 중지 및 리소스 정리
docker-compose ps 실행 중인 컨테이너 확인
docker-compose logs 로그 확인
docker-compose build 이미지 재빌드

5. 주의사항 및 팁 🔥

  1. 의존성 관리: depends_on은 컨테이너 시작 순서만 제어할 뿐, 서비스 준비 상태는 확인하지 않습니다.
  2. 볼륨 사용: 데이터베이스 같은 상태 유지가 필요한 서비스는 반드시 볼륨을 사용하세요!
  3. 환경 변수: 민감한 정보는 .env 파일로 분리하는 것이 안전합니다.
  4. 버전 호환성: Docker Engine 버전과 Compose 파일 버전을 확인하세요.

💡 실무 팁: docker-compose.yml 파일을 버전 관리 시스템에 포함시키고, 개발/테스트/운영 환경별로 별도의 파일을 관리하면 효율적입니다!

이제 여러분도 복잡한 멀티 컨테이너 애플리케이션을 Docker Compose로 쉽게 관리할 수 있게 되었습니다 🎉 실제 프로젝트에 적용해보시고, 더 궁금한 점이 있다면 댓글로 남겨주세요!

답글 남기기

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