본문 바로가기
IT 개발/클라우드

[도커] Docker Compose 완벽 가이드

by 이것 저것 모든것 2025. 2. 2.
728x90

목차

  1. Docker Compose 소개
  2. 설치 및 환경 설정
  3. docker-compose.yml 파일 작성법
  4. 주요 명령어
  5. 실전 예제
  6. 베스트 프랙티스
  7. 문제 해결 가이드

1. Docker Compose 소개

Docker Compose는 다중 컨테이너 Docker 애플리케이션을 정의하고 실행하기 위한 도구입니다. YAML 파일을 사용하여 애플리케이션의 서비스, 네트워크, 볼륨을 구성하고, 단일 명령으로 모든 서비스를 생성하고 시작할 수 있습니다.

주요 특징

  • 단일 호스트에서 여러 격리된 환경 실행
  • 컨테이너 생성 시 볼륨 데이터 보존
  • 변경된 컨테이너만 재생성
  • 환경 변수 지원 및 구성 관리

2. 설치 및 환경 설정

Linux 설치

sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

Windows 및 macOS

Docker Desktop을 설치하면 Docker Compose가 함께 설치됩니다.

3. docker-compose.yml 파일 작성법

기본 구조

version: '3.8'
services:
  web:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - ./html:/usr/share/nginx/html
    networks:
      - frontend

  db:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: example
    volumes:
      - db_data:/var/lib/mysql
    networks:
      - backend

volumes:
  db_data:

networks:
  frontend:
  backend:

주요 설정 항목

services

각 컨테이너의 구성을 정의합니다.

  • image: 사용할 도커 이미지
  • build: Dockerfile 위치
  • ports: 포트 매핑
  • volumes: 볼륨 마운트
  • environment: 환경 변수 설정
  • depends_on: 서비스 의존성 정의
  • networks: 사용할 네트워크

volumes

데이터 영속성을 위한 볼륨을 정의합니다.

networks

서비스 간 통신을 위한 네트워크를 정의합니다.

4. 주요 명령어

기본 명령어

# 서비스 시작
docker-compose up

# 백그라운드에서 서비스 시작
docker-compose up -d

# 서비스 중지
docker-compose down

# 서비스 상태 확인
docker-compose ps

# 서비스 로그 확인
docker-compose logs

# 특정 서비스만 재시작
docker-compose restart service_name

5. 실전 예제

WordPress 설치 예제

version: '3.8'
services:
  wordpress:
    image: wordpress:latest
    ports:
      - "8080:80"
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress
      WORDPRESS_DB_NAME: wordpress
    volumes:
      - wordpress_data:/var/www/html
    depends_on:
      - db

  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: somewordpress
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress
    volumes:
      - db_data:/var/lib/mysql

volumes:
  wordpress_data:
  db_data:

6. 베스트 프랙티스

구성 관리

  • 환경 변수는 .env 파일 사용
  • 민감한 정보는 환경 변수로 관리
  • 서비스 이름은 명확하게 지정
  • 버전 관리 시스템 사용

성능 최적화

  • 적절한 볼륨 마운트 사용
  • 네트워크 최적화
  • 이미지 크기 최소화

보안

  • 최소 권한 원칙 준수
  • 보안 네트워크 구성
  • 정기적인 업데이트 수행

7. 문제 해결 가이드

일반적인 문제

  1. 컨테이너가 시작되지 않는 경우
    • 로그 확인: docker-compose logs
    • 포트 충돌 확인
    • 볼륨 권한 확인
  2. 네트워크 연결 문제
    • 네트워크 설정 확인
    • DNS 설정 확인
    • 서비스 의존성 확인
  3. 볼륨 마운트 문제
    • 경로 확인
    • 권한 설정 확인
    • SELinux 설정 확인

디버깅 팁

  • 로그 레벨 증가: docker-compose up --verbose
  • 컨테이너 내부 확인: docker-compose exec service_name sh
  • 설정 확인: docker-compose config

결론

Docker Compose는 복잡한 애플리케이션 스택을 효율적으로 관리할 수 있게 해주는 강력한 도구입니다. 이 가이드를 통해 Docker Compose의 기본 개념부터 고급 기능까지 이해하고 활용할 수 있습니다. 지속적인 학습과 실습을 통해 더 효율적인 컨테이너 관리가 가능할 것입니다.

728x90