다중 컨테이너 애플리케이션을 위한 Docker Compose 설정 방법

DockerBeginner
지금 연습하기

소개

Docker Compose 는 컨테이너 관리 및 애플리케이션 배포를 간소화하고자 하는 개발자 및 DevOps 전문가에게 필수적인 도구입니다. 이 포괄적인 튜토리얼은 기본 구성부터 다양한 환경에서의 고급 배포 기법까지, Docker Compose 를 이해하고 구현하는 단계별 가이드를 제공합니다.

Docker Compose 기본

Docker Compose 소개

Docker Compose 는 다중 컨테이너 Docker 애플리케이션을 정의하고 실행하기 위한 강력한 도구입니다. YAML 파일을 사용하여 애플리케이션 서비스, 네트워크 및 볼륨을 구성할 수 있으므로 컨테이너 오케스트레이션 프로세스를 간소화합니다.

핵심 개념

graph TD
    A[Docker Compose] --> B[서비스 정의]
    A --> C[다중 컨테이너 관리]
    A --> D[환경 구성]
핵심 개념 설명
서비스 애플리케이션 내 개별 컨테이너
docker-compose.yml 서비스를 정의하는 구성 파일
볼륨 컨테이너의 지속적인 데이터 저장소
네트워크 컨테이너 간 통신

Docker Compose 구성 예제

version: "3.8"
services:
  web:
    image: nginx:latest
    ports:
      - "8080:80"
    volumes:
      - ./website:/usr/share/nginx/html
  database:
    image: postgres:13
    environment:
      POSTGRES_PASSWORD: mysecretpassword

Ubuntu 22.04 실습 예제

Docker Compose 설치:

sudo apt update
sudo apt install docker-compose-plugin
docker compose version

다중 컨테이너 애플리케이션 실행:

docker compose up -d
docker compose ps
docker compose down

활용 사례

Docker Compose 는 다음에 적합합니다.

  • 로컬 개발 환경
  • 자동화된 테스트 설정
  • 단일 호스트 애플리케이션 배포
  • 마이크로서비스 아키텍처

구성 및 배포

Docker Compose 파일 구조

graph TD
    A[docker-compose.yml] --> B[버전]
    A --> C[서비스]
    A --> D[네트워크]
    A --> E[볼륨]

포괄적인 구성 예제

version: "3.8"
services:
  web:
    image: python:3.9
    build:
      context: ./app
      dockerfile: Dockerfile
    ports:
      - "5000:5000"
    volumes:
      - ./app:/app
    environment:
      - DEBUG=true
    depends_on:
      - database

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

networks:
  default:
    driver: bridge

volumes:
  postgres_data:

환경 구성 관리

구성 유형 설명 사용 예시
환경 변수 런타임 구성 민감한 데이터, 연결 문자열
.env 파일 외부 환경 구성 코드와 분리된 구성
Docker Secrets 민감한 정보 보안 비밀번호, 토큰

Ubuntu 22.04 에서의 배포 명령어

구성 검증:

docker compose config

서비스 시작:

docker compose up -d

서비스 확장:

docker compose up -d --scale web=3

서비스 모니터링:

docker compose ps
docker compose logs

컨테이너 네트워킹 전략

graph LR
    A[컨테이너 네트워크] --> B[브리지 네트워크]
    A --> C[호스트 네트워크]
    A --> D[오버레이 네트워크]

볼륨 관리 기법

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

## 볼륨 목록
docker volume ls

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

고급 Compose 기법

서비스 확장 및 로드 밸런싱

graph TD
    A[로드 밸런서] --> B[서비스 복제본 1]
    A --> C[서비스 복제본 2]
    A --> D[서비스 복제본 3]

확장 구성

version: "3.8"
services:
  web:
    image: nginx:latest
    deploy:
      replicas: 3
      update_config:
        parallelism: 1
        delay: 10s
    ports:
      - "80:80"

동적 서비스 관리

기법 명령어 설명
서비스 확장 docker compose up --scale web=5 컨테이너 수를 동적으로 조정
롤링 업데이트 docker compose up --force-recreate 최소한의 중단 시간으로 서비스 업데이트
선택적 배포 docker compose up service1 service2 특정 서비스만 배포

프로덕션 환경 배포 전략

## 구성 검증
docker compose config

## 드라이 런 배포
docker compose up --dry-run

## 프로덕션 배포
docker compose up -d --remove-orphans

컨테이너 건강성 검사

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

고급 네트워킹

graph LR
    A[커스텀 네트워크] --> B[내부 통신]
    A --> C[외부 접근]
    A --> D[서비스 검색]

모니터링 및 로깅

## 실시간 서비스 로그
docker compose logs -f

## 리소스 모니터링
docker compose top

## 성능 지표
docker stats

다중 환경 구성

version: "3.8"
services:
  web:
    image: myapp:${ENV:-development}
    environment:
      - DATABASE_URL=${DATABASE_URL}

시크릿 관리

## Docker 시크릿 생성
echo "database_password" | docker secret create db_password -

## compose 파일에서 시크릿 사용
services:
database:
secrets:
- db_password

요약

Docker Compose 를 마스터함으로써 개발자는 복잡한 애플리케이션 아키텍처를 단순화하고, 배포 일관성을 개선하며, 더욱 확장 가능하고 유지 관리 가능한 컨테이너화된 솔루션을 만들 수 있습니다. 이 튜토리얼은 YAML 구성을 활용하고, 서비스, 네트워크 및 볼륨을 관리하며, 여러 컨테이너 애플리케이션을 쉽고 효율적으로 조정하는 방법을 보여줍니다.