소프트웨어 활용법

Docker Compose 심화 학습: 멀티 컨테이너 환경 설정하기

slowri 2025. 1. 21. 09:00

Docker Compose는 멀티 컨테이너 애플리케이션을 정의하고 관리하기 위한 강력한 도구입니다. 복잡한 환경에서도 간단한 설정 파일로 여러 컨테이너를 정의하고 실행할 수 있도록 돕습니다. 이번 글에서는 Docker Compose를 활용하여 멀티 컨테이너 환경을 설정하는 고급 방법을 소개합니다.


1. Docker Compose의 개요와 이점

Docker Compose는 하나의 YAML 파일을 사용하여 애플리케이션의 여러 서비스를 구성하고 실행할 수 있게 해줍니다.

주요 이점

  • 간단한 설정 관리: 복잡한 멀티 컨테이너 애플리케이션을 단일 docker-compose.yml 파일로 정의합니다.
  • 환경 독립성 보장: 동일한 설정으로 로컬 환경, 테스트 환경, 프로덕션 환경을 구성할 수 있습니다.
  • 동시 관리: 여러 컨테이너를 동시에 시작, 중지, 업데이트할 수 있어 관리가 용이합니다.

Docker Compose 설치
Docker Compose는 Docker Desktop에 기본적으로 포함되어 있습니다. 독립적으로 설치하려면 Docker Compose 설치 가이드를 참고하세요.


2. 멀티 컨테이너 환경 설정하기

Docker Compose를 사용해 간단한 멀티 컨테이너 환경을 설정해 보겠습니다. 여기서는 WordPress 애플리케이션과 MySQL 데이터베이스를 설정합니다.

1) 디렉토리 구조 생성

my-app/
├── docker-compose.yml
└── db-data/

2) docker-compose.yml 파일 작성
아래는 WordPress와 MySQL 컨테이너를 정의하는 docker-compose.yml 예제입니다.

version: '3.8'

services:
  db:
    image: mysql:8.0
    container_name: mysql_container
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpresspassword
    volumes:
      - db-data:/var/lib/mysql

  wordpress:
    image: wordpress:latest
    container_name: wordpress_container
    depends_on:
      - db
    ports:
      - "8080:80"
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpresspassword
      WORDPRESS_DB_NAME: wordpress

volumes:
  db-data:

설명

  • services: 각 컨테이너를 정의하는 섹션입니다.
  • volumes: 데이터 영속성을 위한 볼륨을 정의합니다.
  • depends_on: 서비스 간 의존성을 설정하여 db 서비스가 먼저 시작되도록 합니다.

3) Docker Compose 실행
터미널에서 docker-compose up -d 명령을 실행하여 컨테이너를 백그라운드에서 시작합니다.


3. 고급 Docker Compose 기능

1) 환경 변수 파일 사용
환경 변수는 .env 파일에 저장하고 docker-compose.yml에서 참조할 수 있습니다.

  • .env 파일 예제:
  • MYSQL_ROOT_PASSWORD=rootpassword MYSQL_DATABASE=wordpress MYSQL_USER=wordpress MYSQL_PASSWORD=wordpresspassword
  • docker-compose.yml에서 참조:
  • environment: MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD} MYSQL_DATABASE: ${MYSQL_DATABASE} MYSQL_USER: ${MYSQL_USER} MYSQL_PASSWORD: ${MYSQL_PASSWORD}

2) 네트워크 설정
컨테이너 간 통신을 위한 네트워크를 커스터마이징할 수 있습니다.

networks:
  app-network:
    driver: bridge

각 서비스에 네트워크 연결:

services:
  db:
    networks:
      - app-network

  wordpress:
    networks:
      - app-network

3) Healthcheck 추가
컨테이너 상태를 주기적으로 점검하는 헬스체크를 설정할 수 있습니다.

services:
  db:
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
      interval: 30s
      timeout: 10s
      retries: 3

4. 멀티 컨테이너 환경의 활용 사례

1) 마이크로서비스 아키텍처
Docker Compose는 마이크로서비스 아키텍처를 구축하는 데 최적화되어 있습니다. 서비스 간의 의존성을 쉽게 설정할 수 있으며, 네트워크 구성을 통해 격리된 환경에서 동작할 수 있습니다.

2) 개발 및 테스트 환경 구축

  • 개발자가 동일한 환경에서 작업할 수 있도록 로컬 환경을 구성합니다.
  • CI/CD 파이프라인에서 자동화된 테스트 환경으로 활용할 수 있습니다.

3) 데이터 분석 환경

  • 예를 들어, Jupyter Notebook과 데이터베이스, Spark 컨테이너를 함께 실행하여 분석 환경을 구축할 수 있습니다.

결론

Docker Compose는 멀티 컨테이너 환경을 효율적으로 관리하고 설정할 수 있는 강력한 도구입니다. 고급 기능을 활용하면 더욱 복잡한 환경에서도 간단하게 작업을 수행할 수 있습니다. 위에서 소개한 방법을 참고하여 여러분의 프로젝트에 Docker Compose를 적극 활용해 보세요. Docker Compose로 개발, 테스트, 배포의 생산성을 극대화할 수 있을 것입니다!