다중 컨테이너 배포를 위한 Docker Compose 사용 방법

DockerBeginner
지금 연습하기

소개

이 튜토리얼에서는 Docker Compose 를 사용하여 다중 컨테이너 애플리케이션을 관리하고 배포하는 방법을 안내합니다. Docker Compose 는 복잡한 Docker 기반 환경을 정의, 배포 및 관리하는 과정을 단순화하는 강력한 도구이며, Docker 중심의 작업 흐름에서 필수적인 부분입니다.

Docker Compose 소개

Docker Compose 는 다중 컨테이너 Docker 애플리케이션을 정의하고 실행할 수 있는 도구입니다. 여러 Docker 컨테이너를 관리하고 조정하는 과정을 단순화하여 애플리케이션 스택을 구성하고 배포하는 선언적 방법을 제공합니다.

Docker Compose 란 무엇인가요?

Docker Compose 는 YAML 기반의 구성 파일로, 다중 컨테이너 애플리케이션을 구성하는 서비스, 네트워크 및 볼륨을 설명합니다. 컨테이너 간의 관계와 종속성을 정의하여 애플리케이션 관리 및 확장을 용이하게 합니다.

Docker Compose 를 사용하는 이유는 무엇인가요?

Docker Compose 를 사용하면 다음과 같은 여러 가지 이점을 얻을 수 있습니다.

  1. 단순화된 배포: Compose 파일에서 정의된 모든 서비스를 단일 명령어로 생성하고 시작할 수 있으므로 애플리케이션 배포 및 관리를 용이하게 합니다.
  2. 일관된 환경: Compose 는 개발, 테스트 및 프로덕션 환경을 일관되게 유지하여 "내 컴퓨터에서는 작동하는데" 문제를 줄입니다.
  3. 확장성: 애플리케이션의 필요에 따라 개별 서비스를 쉽게 확장하거나 축소할 수 있습니다.
  4. 종속성 관리: Compose 는 서비스의 네트워킹 및 볼륨 관리를 처리하여 필요에 따라 서로 통신할 수 있도록 합니다.

Docker Compose 시작하기

Docker Compose 를 사용하려면 시스템에 Docker 가 설치되어 있어야 합니다. Docker 가 설치되면 Compose 파일을 생성하고 docker-compose 명령줄 도구를 사용하여 애플리케이션을 관리할 수 있습니다.

다음은 웹 서비스와 데이터베이스 서비스를 정의하는 간단한 Compose 파일 예제입니다.

version: "3"
services:
  web:
    image: nginx:latest
    ports:
      - "8080:80"
    depends_on:
      - db
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: password

다음 섹션에서는 Docker Compose 를 사용하여 다중 컨테이너 애플리케이션을 정의하고 배포하는 방법에 대해 자세히 알아보겠습니다.

Compose 를 이용한 다중 컨테이너 애플리케이션 정의

Compose 파일 구조

Compose 파일은 YAML 형식으로 작성되며 일반적으로 docker-compose.yml로 명명됩니다. 다음과 같은 주요 요소로 구성됩니다.

  1. 버전: Compose 파일 형식의 버전을 지정합니다.
  2. 서비스: 애플리케이션을 구성하는 다양한 서비스 (컨테이너) 를 정의합니다.
  3. 네트워크: 서비스들이 서로 통신하는 데 사용할 네트워크를 구성합니다.
  4. 볼륨: 서비스들이 데이터를 지속적으로 저장하는 데 사용할 볼륨을 정의합니다.

다음은 웹 서비스와 데이터베이스 서비스를 정의하는 Compose 파일 예제입니다.

version: "3"
services:
  web:
    image: nginx:latest
    ports:
      - "8080:80"
    depends_on:
      - db
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: password
    volumes:
      - db-data:/var/lib/mysql
volumes:
  db-data:

서비스 정의

Compose 파일의 각 서비스는 Docker 컨테이너를 나타냅니다. 각 서비스에 대해 사용할 Docker 이미지, 환경 변수, 포트, 볼륨 및 다른 서비스에 대한 종속성과 같은 다양한 구성 옵션을 지정할 수 있습니다.

예를 들어, 이전 예제의 web 서비스는 nginx:latest 이미지를 사용하고, 컨테이너의 포트 80 을 호스트의 포트 8080 으로 노출하며, db 서비스에 종속됩니다.

네트워킹 및 볼륨

Compose 는 애플리케이션에 대한 기본 네트워크를 자동으로 생성하여 서비스들이 서로 통신할 수 있도록 합니다. 또한 사용자 정의 네트워크와 볼륨을 정의하여 애플리케이션의 연결성과 데이터 지속성을 제어할 수 있습니다.

예제에서 db 서비스는 이름이 지정된 볼륨 db-data를 사용하여 데이터를 지속적으로 저장합니다. 이는 컨테이너가 중지되거나 제거되더라도 데이터가 손실되지 않도록 보장합니다.

확장 및 배포

Compose 파일을 정의한 후 docker-compose 명령줄 도구를 사용하여 애플리케이션을 관리할 수 있습니다. 예를 들어, docker-compose up을 사용하여 애플리케이션을 시작하고, docker-compose scale web=3을 사용하여 웹 서비스를 3 개 인스턴스로 확장하고, docker-compose down을 사용하여 애플리케이션을 중지하고 제거할 수 있습니다.

다음 섹션에서는 Compose 애플리케이션을 더 자세히 배포하고 관리하는 방법을 살펴보겠습니다.

Compose 애플리케이션 배포 및 관리

Compose 애플리케이션 배포

Compose 애플리케이션을 배포하려면 다음 단계를 따르세요.

  1. Compose 파일 생성: docker-compose.yml 파일에서 애플리케이션의 서비스, 네트워크 및 볼륨을 정의합니다.

  2. 애플리케이션 시작: docker-compose up 명령어를 사용하여 애플리케이션을 시작합니다. 이 명령어는 Compose 파일에 정의된 모든 서비스를 생성하고 시작합니다.

    docker-compose up -d
    

    -d 플래그는 컨테이너를 분리된 모드로 실행하여 터미널을 계속 사용할 수 있도록 합니다.

  3. 상태 확인: docker-compose ps를 사용하여 실행 중인 서비스의 상태를 확인합니다.

    docker-compose ps
    

Compose 애플리케이션 관리

Docker Compose 는 애플리케이션을 관리하기 위한 여러 명령어를 제공합니다.

  • 서비스 시작/중지: docker-compose startdocker-compose stop을 사용하여 개별 서비스를 시작하거나 중지합니다.

  • 서비스 확장: docker-compose scale을 사용하여 특정 서비스의 인스턴스 수를 조정합니다.

    docker-compose scale web=3
    

    이 명령어는 web 서비스를 3 개 인스턴스로 확장합니다.

  • 로그 보기: docker-compose logs를 사용하여 애플리케이션의 로그를 봅니다.

    docker-compose logs -f
    

    -f 플래그는 실시간으로 로그 출력을 따라갑니다.

  • 애플리케이션 제거: docker-compose down을 사용하여 애플리케이션과 관련된 모든 서비스, 네트워크 및 볼륨을 중지하고 제거합니다.

    docker-compose down
    

배포 전략

Compose 애플리케이션을 배포할 때는 다음과 같은 다양한 전략을 사용할 수 있습니다.

  1. 개발: 로컬 개발 및 테스트에 Compose 를 사용합니다.
  2. 스테이징/테스트: 프로덕션 설정을 반영하는 스테이징 또는 테스트 환경을 설정하는 데 Compose 를 사용합니다.
  3. 프로덕션: 단일 호스트 또는 여러 호스트 클러스터에 애플리케이션을 배포하는 데 Compose 를 사용합니다.

배포 전략에 관계없이 Compose 는 다중 컨테이너 애플리케이션의 수명주기를 쉽게 관리할 수 있도록 합니다.

요약

이 튜토리얼을 마치면 Docker Compose 를 사용하여 다중 컨테이너 애플리케이션을 정의, 배포 및 관리하는 방법에 대한 포괄적인 이해를 얻게 됩니다. Compose 를 활용하여 Docker 기반 배포를 간소화하고, Docker 기반 인프라 전반에서 일관성, 확장성 및 관리 용이성을 보장하는 방법을 배울 것입니다.