Docker Compose란? 여러 컨테이너를 한 번에 실행하는 방법과 docker-compose.yml 작성법

실제 서비스를 운영하다 보면 하나의 컨테이너만 사용하는 경우는 거의 없습니다.

예를 들어 웹 서비스 하나를 운영한다고 해도 다음과 같이 여러 개의 컨테이너가 필요합니다.

  • Nginx
  • Spring Boot 또는 Node.js
  • MySQL
  • Redis

이들을 하나씩 실행하면 매우 번거롭습니다.

Docker Compose는 이러한 문제를 해결하기 위해 등장했습니다.

이번 글에서는 Docker Compose의 개념부터 docker-compose.yml 작성법, 여러 컨테이너를 동시에 실행하는 방법, 실무에서 가장 많이 사용하는 명령어까지 자세히 알아보겠습니다.

Docker Compose란?

Docker Compose는 여러 개의 Docker 컨테이너를 하나의 설정 파일로 관리하는 도구입니다.

모든 컨테이너의 설정을 docker-compose.yml 파일에 작성한 뒤 한 번의 명령으로 실행할 수 있습니다.

구조는 다음과 같습니다.

docker-compose.yml

↓

docker compose up

↓

Nginx

MySQL

Redis

Application

복잡한 서비스를 간단하게 관리할 수 있는 것이 가장 큰 장점입니다.

Docker Compose가 필요한 이유

Docker만 사용할 경우

docker run nginx

docker run mysql

docker run redis

docker run node

처럼 여러 명령을 각각 실행해야 합니다.

Docker Compose를 사용하면

docker compose up

명령 한 줄이면 모든 컨테이너가 동시에 실행됩니다.

docker-compose.yml이란?

Compose 설정을 저장하는 파일입니다.

YAML 형식을 사용합니다.

파일 구조는 다음과 같습니다.

services:
  ...

모든 서비스는 services 아래에 정의됩니다.

가장 간단한 Compose 예제

services:
  nginx:
    image: nginx

실행

docker compose up

Nginx 컨테이너가 생성됩니다.

웹 서버와 데이터베이스 함께 실행

다음은 Nginx와 MySQL을 동시에 실행하는 예제입니다.

services:

  nginx:
    image: nginx
    ports:
      - "80:80"

  mysql:
    image: mysql:8.4
    environment:
      MYSQL_ROOT_PASSWORD: password

실행하면 두 개의 컨테이너가 함께 생성됩니다.

Compose 주요 구성 요소

가장 많이 사용하는 옵션은 다음과 같습니다.

  • image
  • build
  • ports
  • volumes
  • environment
  • networks
  • depends_on
  • restart

실무에서도 대부분 이 항목을 중심으로 작성합니다.

image

기존 이미지를 사용할 경우

services:
  nginx:
    image: nginx:1.27

Docker Hub에서 이미지를 다운로드합니다.

build

직접 Dockerfile을 빌드합니다.

services:

  app:
    build: .

또는

services:

  app:
    build:
      context: .
      dockerfile: Dockerfile

프로젝트를 직접 빌드할 때 사용합니다.

ports

호스트와 컨테이너 포트를 연결합니다.

ports:
  - "8080:80"

의미

Host

8080

↓

Container

80

volumes

데이터를 영구 저장합니다.

volumes:
  - ./data:/var/lib/mysql

컨테이너가 삭제되어도 데이터는 유지됩니다.

environment

환경 변수를 지정합니다.

environment:
  MYSQL_ROOT_PASSWORD: password

또는

environment:
  NODE_ENV: production

애플리케이션 설정에 자주 사용됩니다.

depends_on

서비스 실행 순서를 지정합니다.

depends_on:
  - mysql

애플리케이션보다 MySQL을 먼저 실행합니다.

단, 서비스가 완전히 준비될 때까지 기다려주는 것은 아니므로 애플리케이션에서 재시도 로직이나 헬스체크를 함께 사용하는 것이 좋습니다.

restart

자동 재시작 정책입니다.

restart: always

또는

restart: unless-stopped

운영 환경에서는 자주 사용됩니다.

전체 예제

services:

  web:
    build: .

    ports:
      - "8080:8080"

    depends_on:
      - mysql

  mysql:
    image: mysql:8.4

    environment:
      MYSQL_ROOT_PASSWORD: password

    volumes:
      - mysql-data:/var/lib/mysql

volumes:

  mysql-data:

실무에서도 비슷한 형태로 많이 사용합니다.

Compose 실행

모든 컨테이너 실행

docker compose up

백그라운드 실행

docker compose up -d

실무에서는 대부분 -d 옵션을 사용합니다.

실행 중인 서비스 확인

docker compose ps

실행 중인 모든 Compose 서비스를 확인할 수 있습니다.

로그 확인

전체 로그

docker compose logs

실시간 로그

docker compose logs -f

특정 서비스만 확인

docker compose logs mysql

컨테이너 종료

docker compose stop

컨테이너는 남아 있습니다.

컨테이너 종료 및 삭제

docker compose down

컨테이너와 네트워크가 삭제됩니다.

볼륨까지 삭제하려면

docker compose down -v

를 사용합니다.

서비스 재시작

docker compose restart

특정 서비스만 재시작

docker compose restart mysql

설정 파일 검증

Compose 파일 문법을 확인합니다.

docker compose config

YAML 문법 오류를 찾을 때 매우 유용합니다.

실무에서 자주 사용하는 명령어

Compose 실행

docker compose up -d

서비스 확인

docker compose ps

로그 보기

docker compose logs -f

서비스 중지

docker compose stop

서비스 삭제

docker compose down

볼륨 삭제

docker compose down -v

설정 확인

docker compose config

실무 사례

예를 들어 쇼핑몰 서비스를 운영한다고 가정해 보겠습니다.

필요한 구성은 다음과 같습니다.

  • Nginx
  • Spring Boot
  • MySQL
  • Redis

운영자는 docker-compose.yml에 모든 서비스를 정의합니다.

이후 새로운 서버에서는 다음 명령만 실행하면 됩니다.

docker compose up -d

Docker Compose는 필요한 이미지를 자동으로 다운로드하고, 네트워크를 생성하며, 모든 컨테이너를 실행합니다.

서비스를 업데이트할 때도 Compose 파일만 수정하면 되므로 유지보수가 훨씬 쉬워집니다.

자주 묻는 질문

Docker Compose와 Docker의 차이는 무엇인가요?

Docker는 개별 컨테이너를 관리하는 도구이고, Docker Compose는 여러 컨테이너를 하나의 프로젝트로 묶어 관리하는 도구입니다.

docker-compose.yml과 compose.yaml은 같은 것인가요?

기능은 같습니다. 최신 Docker에서는 compose.yaml 또는 compose.yml 사용도 지원하며, 기존의 docker-compose.yml도 계속 널리 사용되고 있습니다.

운영 환경에서도 Docker Compose를 사용하나요?

네. 중소규모 서비스나 개발·테스트 환경에서는 많이 사용됩니다. 다만 대규모 서비스에서는 Kubernetes와 같은 컨테이너 오케스트레이션 플랫폼을 사용하는 경우가 많습니다.

마무리

Docker Compose는 여러 개의 컨테이너를 하나의 설정 파일로 관리할 수 있게 해주는 매우 강력한 도구입니다. 웹 서버, 애플리케이션, 데이터베이스, 캐시 서버 등을 함께 실행하고 관리할 수 있어 개발과 운영의 효율성을 크게 높여줍니다. Docker를 실무에 활용하려면 Compose 사용법은 반드시 익혀두는 것이 좋습니다.

댓글 남기기