1. 개요

<Docker 가상 환경 구축 입문>의 <Chapter 8-1. Docker Compose의 개요>를 읽고 정리한 내용으로,

이번 문서의 주된 내용은 Docker Compose의 개요와 docker-compose.yml 작성법입니다.

 

2. Docker Compose의 개요

  • Docker Compose란 단일 컨테이너가 아닌, 멀티컨테이너 Docker 애플리케이션을 정의하고 실행하기 위해 사용되는 도구
  • 개발 환경 구축이나 자동 테스트 실행환경 구축 등 애플리케이션 컨테이너 외에 데이터베이스 컨테이너 등이 필요한 경우 사용
  • 웹 서버, 데이터베이스 서버, 캐시 서버 등 각 컨테이너의 정의를 docker-compose.yml이라는 YAML 파일에 작성하여 docker-compose 명령 실행
  • Docker Compose로 애플리케이션 실행 환경을 구성/기동하는 순서
    1) 컨테이너를 기동하기 위패 필요한 이미지를 준비 (이미지를 작성하기 위한 Dockerfile을 작성하거나, 레지스트리에 이미지를 준비)
    2) 각 컨테이너를 기동할 때 적용할 설정을 docker-compose.yml에 작성
    3) docker-compose.yml이 있는 디렉토리 상에서 docker-compose up 커맨드를 실행하여 컨테이너 기동

 

3. docker-compose.yml 파일

  • YAML은 구조화된 데이터를 표현하기 위한 파일 포맷으로, 키:값 형태로 표현됨
  • docker-compose의 버전을 확인한 후, 적절한 docker-compose.yml 파일 포맷의 버전을 결정  (참고)
  • docker-compose.yml 파일을 작성할 때, 들여쓰기는 탭(tab)이 아닌 공백(space)을 사용해야 함 (tab을 사용할 경우 오류 발생)
  • docker-compose.yml 예시
    version: '3'
    services:
      web:
        build: .
        ports:
          - "5000:5000"
        volumes:
          - .:/code
          - logvolume01:/var/log
      redis:
        image: redis
    volume:
      logvolume01: {}
    
    

- version은 docker-compose.yml의 파일 포맷 버전을 뜻하며, 버전별로 작성할 항목에 차이가 있으므로 주의

- services 항목에는 기동하고자 하는 컨테이너의 설정을 기록하며, 각 서비스에 이름을 부여할 수 있음. 해당 이름은 다른 컨테이너에서 해당 서비스로 접근할 때 사용

- build 항목에는 빌드 컨텍스트를 지정하며, 빌드 컨텍스트 상의 Dockerfile을 사용하여 이미지를 빌드함. 예시의 경우 현재 디렉토리(.)를 빌드 컨텍스트로 지정한 것

- ports 항목은 docker run 명령어의 -p 옵션과 동일하게 표기함.

- volumes 항목에는 [바인드마운트 경로]:[컨테이너 상의 마운트 경로]로 설정을 표기하며, 예시의 경우 현재 디렉토리를 컨테이너 상의 /code 디렉토리에 마운트한다는 의미

- redis 서비스의 경우 포트를 별도로 지정하지 않았으므로, 디폴트 포트인 6349 포트로 접근 가능