본문 바로가기
Docker

[Docker] Docker Compose

by goblin- 2024. 10. 28.

Docker Compose는 여러 개의 Docker 컨테이너를 함께 관리하고 실행할 수 있도록 해주는 도구로, 멀티 컨테이너 애플리케이션을 쉽게 구성하고 실행할 수 있게 도와줍니다. Docker Compose는 주로 docker-compose.yml 파일을 사용하여 설정하고 실행합니다.

 

아래에서 Docker Compose의 개념, 사용 이유, 설정 파일 작성법, 여러 서비스의 구성과 종속성 설정, 그리고 멀티 컨테이너 애플리케이션 관리 방법을 자세히 설명하겠습니다.

 

1. Docker Compose 개념과 사용 이유

 

Docker Compose는 여러 개의 컨테이너를 하나의 애플리케이션처럼 관리하고 실행할 수 있게 하는 Docker 도구입니다. Compose를 사용하면 애플리케이션을 이루는 각 서비스(예: 웹 서버, 데이터베이스, 캐시 등)를 독립된 컨테이너로 구성하고 이들을 한꺼번에 실행하거나 중지할 수 있습니다.

 

Docker Compose의 주요 기능과 사용 이유

 

단일 명령어로 멀티 컨테이너 실행: 여러 컨테이너를 개별 명령어 없이 docker-compose up 한 줄로 동시에 실행할 수 있습니다.

환경 설정 관리: 각 컨테이너의 포트, 볼륨, 네트워크 설정을 쉽게 정의할 수 있습니다.

종속성 관리: 컨테이너 간 실행 순서와 의존 관계를 설정할 수 있어, 특정 서비스가 준비된 후 다른 서비스가 실행되도록 설정할 수 있습니다.

개발 환경 관리: 로컬 개발 환경에서 데이터베이스, 캐시 서버, API 서버 등 다양한 서비스를 쉽게 관리할 수 있어 개발과 테스트가 간편해집니다.

 

2. docker-compose.yml 파일 작성법

 

Docker Compose는 주로 docker-compose.yml 파일을 통해 각 서비스의 설정을 정의합니다. YAML 형식으로 작성되며, 서비스 이름, 이미지, 볼륨, 네트워크 등의 설정을 포함할 수 있습니다.

 

docker-compose.yml 예시

 

아래는 Spring 애플리케이션과 MySQL 데이터베이스를 함께 실행하기 위한 docker-compose.yml 파일 예시입니다.

version: '3.8'

services:
  spring-app:
    build: .
    ports:
      - "8080:8080"
    environment:
      SPRING_DATASOURCE_URL: jdbc:mysql://db:3306/mydatabase
      SPRING_DATASOURCE_USERNAME: myuser
      SPRING_DATASOURCE_PASSWORD: mypassword
    depends_on:
      - db

  db:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword
      MYSQL_DATABASE: mydatabase
      MYSQL_USER: myuser
      MYSQL_PASSWORD: mypassword
    volumes:
      - mydbdata:/var/lib/mysql
    ports:
      - "3306:3306"

volumes:
  mydbdata:
    driver: local

 

각 설정 설명

 

version: Docker Compose 파일의 버전을 지정합니다. 최신 버전은 3.x 시리즈입니다.

services: 실행할 각 컨테이너(서비스)를 정의하는 블록입니다. 각 서비스는 독립적인 컨테이너로 실행됩니다.

spring-app: Spring 애플리케이션을 실행할 서비스입니다.

build: Dockerfile이 있는 디렉터리에서 이미지를 빌드합니다.

ports: 컨테이너 포트와 호스트 포트를 매핑합니다.

environment: 애플리케이션의 환경 변수 설정으로 MySQL 데이터베이스 연결 정보를 포함합니다.

depends_on: db 서비스가 실행된 후에 spring-app을 실행하도록 종속성을 설정합니다.

db: MySQL 데이터베이스 서비스입니다.

image: MySQL Docker 이미지를 사용하여 컨테이너를 생성합니다.

environment: MySQL 초기 데이터베이스와 사용자 정보를 설정합니다.

volumes: MySQL 데이터가 호스트 볼륨에 영구 저장되도록 설정합니다.

volumes: 컨테이너 외부에 데이터를 영구적으로 저장할 볼륨을 정의합니다.

 

3. 여러 서비스의 구성과 종속성 설정

 

Docker Compose는 애플리케이션의 여러 서비스 간의 종속성(dependency)을 설정하여, 특정 서비스가 실행된 후에 다른 서비스가 실행되도록 할 수 있습니다. depends_on 옵션을 통해 서비스 간 실행 순서를 지정할 수 있습니다.

 

종속성 설정

 

depends_on컨테이너 실행 순서를 보장하지만, 특정 서비스가 완전히 준비되었는지(예: MySQL 서버가 완전히 시작되었는지)는 확인하지 않습니다. 이럴 때는 **헬스 체크(healthcheck)**를 추가하여 서비스의 준비 상태를 확인할 수 있습니다.

services:
  spring-app:
    build: .
    depends_on:
      - db
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8080"]
      interval: 30s
      timeout: 10s
      retries: 3

  db:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword
    healthcheck:
      test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
      interval: 10s
      timeout: 5s
      retries: 5

위 설정에서 **healthcheck**를 추가하여 dbspring-app이 각각 정상적으로 준비되었는지 확인할 수 있습니다. healthcheck는 특정 명령어가 성공해야 서비스가 준비되었다고 간주합니다.

 

4. 멀티 컨테이너 애플리케이션 관리

 

Docker Compose는 멀티 컨테이너 애플리케이션을 관리하기 위한 다양한 명령어를 제공합니다. docker-compose up이나 docker-compose down 명령어를 통해 애플리케이션의 모든 컨테이너를 동시에 제어할 수 있습니다.

 

주요 Docker Compose 명령어

 

1. docker-compose up:

docker-compose.yml 파일의 설정에 따라 모든 서비스를 빌드하고 실행합니다.

docker-compose up -d

-d 옵션을 사용하면 백그라운드에서 실행됩니다.

 

2. docker-compose down:

실행 중인 모든 서비스를 중지하고 컨테이너를 삭제합니다.

docker-compose down

 

 

3. docker-compose ps:

현재 실행 중인 모든 컨테이너의 상태를 확인할 수 있습니다.

docker-compose ps

 

4. docker-compose logs:

모든 컨테이너의 로그를 확인할 수 있으며, 특정 서비스의 로그만 볼 수도 있습니다.

docker-compose logs
docker-compose logs spring-app  # 특정 서비스 로그 보기

 

5. docker-compose exec <서비스명> <명령어>:

실행 중인 컨테이너에 접속하거나 명령어를 실행할 수 있습니다.

docker-compose exec spring-app /bin/bash

 

 

요약

 

1. Docker Compose 개념: 여러 개의 컨테이너를 하나의 애플리케이션처럼 관리할 수 있게 도와주는 도구입니다.

2. docker-compose.yml 파일 작성법: 각 서비스의 설정, 포트 매핑, 환경 변수 등을 YAML 형식으로 정의합니다.

3. 여러 서비스 구성 및 종속성 설정: depends_onhealthcheck를 통해 서비스 간 실행 순서를 설정하고, 준비 상태를 확인할 수 있습니다.

4. 멀티 컨테이너 애플리케이션 관리: docker-compose up, docker-compose down 등의 명령어로 여러 컨테이너를 동시에 관리할 수 있습니다.

 

Docker Compose를 통해 멀티 컨테이너 애플리케이션을 손쉽게 개발하고 관리할 수 있으며, 일관된 개발 및 배포 환경을 구축할 수 있습니다.

'Docker' 카테고리의 다른 글

[Docker] Docker를 이용한 Spring 프로젝트  (0) 2024.10.28
[Docker] docker 기본명령어  (4) 2024.10.28
[Docker] docker image & container  (1) 2024.10.28
[Docker] CI/CD  (0) 2024.10.28
[Docker] docker의 기초  (0) 2024.10.28