Docker Compose 기본 개념: 다중 컨테이너 오케스트레이션에 대한 종합 가이드

DockerBeginner
지금 연습하기

소개

Docker Compose 는 개발자가 컨테이너 관리 및 애플리케이션 배포를 간소화하기 위한 필수적인 도구입니다. 이 포괄적인 튜토리얼은 단일 선언적 구성 파일을 통해 복잡한 다중 컨테이너 환경을 생성, 구성 및 관리하는 Docker Compose 의 기본 사항을 탐구합니다.

Docker Compose 기본 사항

Docker Compose 소개

Docker Compose 는 컨테이너 오케스트레이션을 위한 강력한 도구로, 개발자가 단일 구성 파일을 통해 다중 컨테이너 애플리케이션을 정의하고 관리할 수 있도록 지원합니다. 선언적 방식으로 서비스, 네트워크 및 볼륨을 설명하여 복잡한 애플리케이션 아키텍처를 실행하는 프로세스를 단순화합니다.

핵심 개념 및 아키텍처

Docker Compose 는 YAML 파일을 사용하여 애플리케이션 서비스를 구성하며, 컨테이너 서비스 구성에 대한 간소화된 접근 방식을 제공합니다. 주요 구성 파일은 일반적으로 docker-compose.yml로 명명됩니다.

graph TD A[Docker Compose] --> B[YAML 구성] B --> C[서비스 정의] B --> D[네트워크 설정] B --> E[볼륨 매핑]

구성 파일 구조

일반적인 Docker Compose 구성에는 다음과 같은 핵심 요소가 포함됩니다.

요소 설명 예시
version Compose 파일 버전 version: '3.8'
services 컨테이너 정의 여러 서비스 구성
networks 사용자 정의 네트워크 설정 브리지, 호스트 네트워크
volumes 지속적인 데이터 저장소 이름 지정 또는 호스트 연결 볼륨

실제 예제: 웹 애플리케이션 설정

다음은 일반적인 웹 애플리케이션을 위한 포괄적인 Docker Compose 구성입니다.

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

  database:
    image: postgres:13
    environment:
      POSTGRES_PASSWORD: secretpassword
    volumes:
      - postgres_data:/var/lib/postgresql/data

volumes:
  postgres_data:

명령줄 작업

다중 컨테이너 애플리케이션을 관리하기 위한 필수적인 Docker Compose 명령어는 다음과 같습니다.

## docker-compose.yml에 정의된 서비스 시작
docker-compose up -d

## 컨테이너 중지 및 제거
docker-compose down

## 실행 중인 컨테이너 보기
docker-compose ps

## 서비스 로그 보기
docker-compose logs web

서비스 종속성 관리

Docker Compose 는 서비스 종속성을 정의하여 시작 순서를 제어할 수 있습니다.

services:
  web:
    depends_on:
      - database
    restart: on-failure

이 구성은 데이터베이스 서비스가 웹 서비스보다 먼저 시작되도록 보장하며, 자동 재시작 기능을 제공합니다.

볼륨 관리

Docker 볼륨 이해

Docker 볼륨은 컨테이너에 대한 지속적인 저장 메커니즘을 제공하여 호스트 시스템과 컨테이너화된 애플리케이션 간의 데이터 보존 및 공유를 가능하게 합니다. 컨테이너화된 환경에서 데이터 지속성 및 상태 관리의 중요한 문제를 해결합니다.

볼륨 유형 비교

볼륨 유형 특징 사용 사례
이름 지정 볼륨 Docker 에서 관리 지속적인 애플리케이션 데이터
바인드 마운트 호스트 파일 시스템 매핑 개발 환경
Tmpfs 마운트 메모리 기반 저장소 임시, 민감한 데이터

볼륨 관리 워크플로

graph TD A[볼륨 생성] --> B[컨테이너에 마운트] B --> C[데이터 지속] C --> D[백업/마이그레이션]

Docker Compose 볼륨 구성

version: "3.8"
services:
  database:
    image: postgres:13
    volumes:
      - postgres_data:/var/lib/postgresql/data
      - ./backup:/database_backup

volumes:
  postgres_data:
    driver: local

고급 볼륨 관리 명령어

## 이름 지정 볼륨 생성
docker volume create myapp_data

## 기존 볼륨 목록
docker volume ls

## 볼륨 세부 정보 확인
docker volume inspect myapp_data

## 사용되지 않는 볼륨 제거
docker volume prune

바인드 마운트 구성 예제

services:
  web:
    image: nginx:latest
    volumes:
      - ./website:/usr/share/nginx/html:ro

이 구성은 로컬 디렉터리를 컨테이너에 매핑하고 읽기 전용 권한을 부여하여 원활한 개발 워크플로를 가능하게 합니다.

고급 배포

다중 환경 구성

Docker Compose 는 환경별 구성을 통해 정교한 배포 전략을 지원하며, 개발, 스테이징 및 프로덕션 환경 간의 원활한 전환을 가능하게 합니다.

환경 구성 전략

version: "3.8"
services:
  web:
    image: myapp:${TAG:-latest}
    environment:
      - DATABASE_HOST=${DATABASE_HOST:-localhost}
      - DEBUG=${DEBUG:-false}

서비스 확장 메커니즘

graph TD A[기본 서비스] --> B[수평 확장] B --> C[여러 컨테이너 인스턴스] C --> D[로드 밸런싱]

네트워크 구성 옵션

네트워크 유형 범위 사용 사례
Bridge 컨테이너 간 내부 통신
Host 직접 호스트 네트워킹 성능이 중요한 애플리케이션
Overlay 다중 호스트 네트워킹 분산 시스템

고급 네트워킹 예제

version: "3.8"
services:
  web:
    networks:
      - frontend
  database:
    networks:
      - backend

networks:
  frontend:
  backend:

배포 워크플로 명령어

## 특정 구성으로 이미지 빌드
docker-compose build

## 분리된 모드로 배포
docker-compose up -d

## 특정 서비스 확장
docker-compose up --scale web=3

## 롤링 업데이트 수행
docker-compose up -d --no-deps --build web

건강 체크 구성

services:
  web:
    healthcheck:
      test: ["CMD", "curl", "-f", "
      interval: 30s
      timeout: 10s
      retries: 3

요약

Docker Compose 를 마스터함으로써 개발자는 복잡한 애플리케이션 아키텍처를 효율적으로 조정하고, 서비스 상호 작용을 정의하며, 네트워크 구성을 관리하고, 다양한 환경에서 일관된 배포를 보장할 수 있습니다. 이 튜토리얼은 핵심 개념, 실용적인 구성 전략 및 필수적인 명령줄 작업을 다루어 개발자가 컨테이너화 기술을 효과적으로 활용할 수 있도록 지원합니다.