Docker Compose: 복잡한 애플리케이션도 간단하게!

안녕하세요, 개발자 여러분!
Docker를 활용하다 보면 컨테이너 하나만 사용하는 게 아니라 여러 컨테이너를 조합해서 복잡한 애플리케이션을 운영해야 하는 경우가 많습니다. 이때 등장하는 최고의 도구가 바로 Docker Compose입니다. 오늘은 이 도구가 왜 필요한지, 기존 방식과 비교해 얼마나 개선되었는지, 그리고 어떻게 사용하는지 살펴보겠습니다.

Docker Compose란?

이전에는 어땠나요?

Docker 없이 복잡한 애플리케이션을 실행하려면 각 구성 요소(예: 데이터베이스, 웹 서버, 캐시 서버 등)를 개별적으로 설정하고 실행해야 했습니다. Docker 등장 이후에도 각 컨테이너를 수동으로 관리하는 작업은 여전히 번거로웠습니다.

Docker Compose로 어떻게 좋아졌을까요?

Docker Compose는 여러 컨테이너로 구성된 애플리케이션을 단순한 YAML 파일 하나로 정의하고 관리할 수 있도록 도와줍니다.
예를 들어, 데이터베이스, 웹 서버, 로드 밸런서를 동시에 실행하려면 이전에는 각 컨테이너를 개별적으로 실행해야 했지만, Compose를 사용하면 단일 명령어로 모든 서비스를 시작할 수 있습니다.

왜 Docker Compose를 써야 할까요?

  1. 간편한 관리
    YAML 파일 하나로 여러 컨테이너를 정의하고 관리할 수 있습니다.위 설정만 있으면 docker-compose up으로 간단히 실행됩니다.
  2. services: web: image: nginx db: image: postgres
  3. 재현 가능한 환경
    개발, 스테이징, 프로덕션 환경을 동일하게 유지할 수 있습니다.
    • 예: 로컬에서 동작하는 애플리케이션이 프로덕션에서도 동일하게 작동합니다.
  4. 빠른 배포와 스케일링
    설정된 서비스를 수 초 만에 배포하고, docker-compose scale로 손쉽게 컨테이너 수를 조정할 수 있습니다.
    • 예: docker-compose up --scale web=5로 웹 서버 컨테이너를 5개로 늘릴 수 있습니다.
  5. 버전 관리와 협업
    설정 파일을 Git으로 관리할 수 있어 협업이 쉽습니다.
    • 팀원이 동일한 환경에서 작업할 수 있습니다.

Docker Compose 사용법

1. 설치하기

Docker Desktop을 설치하면 기본적으로 포함되어 있습니다.
리눅스 환경에서 따로 설치하려면 아래 명령어를 사용하세요:

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

설치 후 아래 명령어로 버전을 확인하세요:

docker-compose --version

2. docker-compose.yml 파일 만들기

프로젝트의 루트 디렉토리에 docker-compose.yml 파일을 생성합니다.
간단한 웹 애플리케이션과 데이터베이스 설정 예제:

version: '3'
services:
  web:
    image: nginx
    ports:
      - "8080:80"
  db:
    image: postgres
    environment:
      POSTGRES_PASSWORD: example

3. 실행하기

docker-compose.yml 파일이 있는 디렉토리에서 아래 명령어를 실행하면 모든 서비스가 실행됩니다:

docker-compose up

백그라운드에서 실행하려면 -d 옵션을 추가하세요:

docker-compose up -d

4. 멈추기

실행 중인 모든 서비스를 멈추고 컨테이너를 정리하려면:

docker-compose down

실제 사용 예: WordPress 블로그 구축

WordPress와 MySQL을 사용하는 블로그를 Compose로 설정해보겠습니다.

version: '3'
services:
  db:
    image: mysql:5.7
    volumes:
      - db_data:/var/lib/mysql
    environment:
      MYSQL_ROOT_PASSWORD: example
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: wordpress

  wordpress:
    depends_on:
      - db
    image: wordpress:latest
    ports:
      - "8000:80"
    environment:
      WORDPRESS_DB_HOST: db:3306
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: wordpress
volumes:
  db_data: {}

위 파일을 저장한 후 아래 명령어를 실행하면 WordPress 블로그가 실행됩니다:

docker-compose up -d

브라우저에서 http://localhost:8000에 접속해 WordPress 설치를 진행하세요.

주의할 점

  1. 보안:
    비밀번호나 민감한 정보는 .env 파일에 저장하고 docker-compose.yml에서 불러오세요.
  2. environment: POSTGRES_PASSWORD: ${DB_PASSWORD}
  3. 볼륨 관리:
    데이터는 볼륨을 통해 저장하므로 컨테이너를 삭제해도 데이터는 유지됩니다. 하지만 불필요한 볼륨은 주기적으로 정리하세요.
  4. 네트워크 설정:
    컨테이너 간 통신이 원활하도록 네트워크 설정을 확인하세요. 기본적으로 Compose는 각 서비스가 같은 네트워크에서 통신하도록 설정됩니다.

유용한 링크 모음

  1. Docker Compose 공식 문서
  2. Docker Compose 치트 시트
  3. Docker Compose 예제 모음
  4. Docker Compose를 활용한 CI/CD 가이드
  5. Docker Compose 버전별 설정 가이드
반응형