Skip to content

1. Docker Compose 소개


1. Docker Compose란

  • Docker Compose는 다중 컨테이너 애플리케이션을 정의 및 공유할 수 있도록 개발되었다.
  • 단일 명령을 사용하여 모두 실행 또는 종료할 수 있도록 개발된 도구이다.


1) 다중 컨테이너 애플리케이션 정의

  • 서비스를 서버 위에 실행시킬 때 여러 개의 서비스들이 필요한 경우가 있다.
  • 예를 들어 새로 만든 애플리케이션(기계 번역 애플리케이션 등)이 사용하는 데이터베이스는 MySQL을 사용한다고 가정한다면, MySQL을 설치 및 실행한 뒤 애플리케이션과 함께 실행시켜야 할 것이다.
  • 이런 경우 docker-compose가 여러 개의 서비스를 한 번에 정의할 수 있도록 한다.


services:
  nmt_app:
    image: nmt_app_v1

  nmt_mysq:
    image: mysql


  • YAML 문서 하나에 여러 개의 컨테이너를 정의할 수 있다.


2) 단일 명령을 사용하여 모두 실행 또는 종료

  • docker-compose up이라는 명령어 하나로 문서에 정의한 서비스들이 한꺼번에 컨테이너로 실행될 수 있다.
  • 반대로 docker-compose down이라는 명령어로 정의한 모든 서비스를 내릴 수도 있다.
  • 이때 먼저 실행되어야 하는 순서까지 지정이 가능하다.


2. Docker Compose의 특징

1) 단일 호스트의 여러 격리된 환경

  • Docker Compose는 프로젝트 이름을 사용하여 환경을 서로 격리하고, 여러 다른 컨텍스트에서 이 프로젝트 이름을 사용하여 접근한다.
  • 예를 들어 nmt라는 서비스를 실행시킬 때, old_nmt, new_nmt 형식으로 여러 개를 서로 격리하여 서비스가 가능하다.


sudo docker-compose -p old up
sudo docker-compose -p new up


  • 이때 -p 옵션으로 프로젝트명을 지정하여 하나의 애플리케이션(nmt)을 두 개의 격리된 환경(old_nmt, new_nmt)으로 제공해 준다.


2) 컨테이너 생성 시 볼륨 데이터 보존

  • 컨테이너 생성 시 볼륨 데이터를 보존하여 데이터가 휘발되지 않도록 처리해 준다.
  • 컨테이너 내부에서 생성하여 사용하는 파일 볼륨을 로컬 경로와 공유하여 실수로 컨테이너가 종료되더라도 재실행 시 같은 볼륨을 유지해 준다.


3) 변경된 컨테이너만 재생성

  • 컨테이너를 만드는 데 사용되는 구성을 캐시하여 변경되지 않은 서비스를 다시 시작하면, 기존 컨테이너를 다시 사용한다.


4) 변수 및 환경 간 구성 이동

  • Docker Compose 파일의 변수를 지원하여 다양한 환경 또는 다른 사용자에게 맞게 컴포지션 커스텀이 가능하다.