본문 바로가기
Technology/Docker

[Docker] - Docker Compose란

by nam_ji 2024. 4. 10.

Docker Compose란

1. 개념

  • 여러 개의 Docker Container들을 하나의 서비스로 정의하고 구성해 하나의 묶음으로 관리할 수 있는 하나의 애플리케이션을 만드는 것입니다.

2. 특징

  1. 서비스들을 시작하고 중지하고 재 빌드합니다.
    • 여기서 말하는 서비스는 컨테이너에서 돌아가는 애플리케이션을 의미합니다. 단일 서비스(컨테이너)가 아닌 복수의 서비스(컨테이너)를 시작하고 중지하고 다시 빌드한다고 볼 수 있습니다.
  2. 실행 중인 서비스의 상태를 볼 수 있습니다.
    • 로그 출력을 포함하여 실행 중인 모든 서비스의 상태를 쉽게 볼 수 있습니다.
  3. 실행 중인 서비스의 로그를 스트림 할 수 있습니다.
    • 두 번째와 비슷한 특징이라고 생각할 수 있습니다. Docker Compose를 이용하면 로그를 가져오기 위해 컨테이너별로 명령을 수행할 필요 없습니다.
  4. 하나의 서비스에 일회성 작업을 수행할 수 있습니다.
    • 당연하게 생각될 수 있는데 항상 모든 컨테이너를 묶어서 작업해야 할 필요는 없습니다. 경우에 따라서 단일 컨테이너에 명령을 내릴 필요가 있습니다.
      그럴 때, Docker Compose에서 단일 컨테이너에 접근하여 해당 컨테이너 로그를 확인하거나 컨테이너 시작 및 중지, 이미지를 빌드할 수 있습니다.

3. 사용하기 위한 과정

  1. Docker Compose 파일 작성 : YAML 형식으로 작성된 Docker Compose 파일을 사용해 서비스와 관련 설정들을 정의합니다.
  2. Docker Compose 실행 : docker-compose up 명령어를 사용하여 Docker Compose 파일에 정의된 서비스들을 시작합니다.
  3. 실행 및 관리 : 실행된 서비스를 확인하고 관리하기 위해 docker-compose ps, docker-compose logs, docker-compose exec 등의 명령어를 사용합니다.
  4. 중지 및 정리 : 작업을 완료한 후 docker-compose down 명령어를 사용하여 Docker Compose 파일에 정의된 서비스들을 중지하고 관련 컨테이너들을 삭제합니다.

4. 파일 작성

version: 'version'

services:
  web:
    build: .
    image: "SpringBootTest:version"
    ports:
      - "port:port"
    depends_on:
      - db
    environment:
      SPRING_DATASOURCE_URL: jdbc:mysql://db:port/DBName
      SPRING_DATASOURCE_USERNAME: DBUserName
      SPRING_DATASOURCE_PASSWORD: password

  db:
    image: "DataBaseTest:version"
    ports:
      - "port:port"
    environment:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_DATABASE: DBName
  • version : Docker Compose 파일 버전입니다.
  • services : Docker Compose에서 관리할 서비스 목록 정의입니다.
    • web : 첫 번째 서비스로, 자바 웹 애플리케이션을 포함한 Spring Boot 이미지를 사용하겠다는 의미입니다.
      • build : 이미지를 빌드할 디렉터리를 지정합니다.
      • image : 빌드한 이미지 이름을 지정합니다.
      • ports : 호스트와 컨테이너 간의 포트를 매핑합니다.
      • depends_on : 이 서비스가 시작되기 전에 필요한 의존 서비스를 지정합니다.
      • environment : 필요한 환경 변수를 지정합니다.
  • db : 두 번째 서비스로, 데이터 베이스 이미지를 사용하겠다는 의미입니다.
    • image : 원하는 데이터 베이스 이미지를 사용하고, 그 데이터 베이스의 버전을 선택한다는 의미입니다.
    • ports : 호스트와 컨테이너 간의 포트를 매핑합니다.
    • environment : 필요한 환경 변수를 지정합니다.

5. 기본 명령어

  • docker-compose up -d
    도커 컴포즈 컨테이너들 백그라운드로 실행합니다.
  • docker-compose up
    도커 컴포즈 컨테이너들 포어그라운드로 실행합니다.
  • docker-compose down
    도커 컴포즈 컨테이너들 종료합니다.
  • docker-compose restart
    도커 컴포즈 컨테이너들 다시 시작합니다.
  • docker-compose logs -f
    도커 컴포즈 컨테이너들 로그 읽습니다.
  • docker-compose ps
    도커 컴포즈 컨테이너들 상태 확인합니다.
  • docker-compose config
    도커 컴포즈 설정을 확인합니다.
    (주로 -f 옵션으로 여러 개 설정 파일을 사용할 때, 최종적으로 어떻게 설정이 적용되는지 확인)
  • docker-compose -f /app/docker-compose.yml up
    다른 경로에 있는 도커 컴포즈 파일 사용 도커 컴포즈로 다른 이름이나 경로의 파일을 Docker Compose 설정 파일로 사용하고 싶다면 -f 옵션으로 명시합니다.
  • dockercompose -f docker-compose1.yml -f docker-compose2.yml up
    여러 개의 도커 컴포즈 설정 파일을 사용할 수 있으며, 이 때 나중에 나오는 설정이 앞 설정보다 우선으로 적용됩니다.