본문 바로가기
Docker

[Docker] Docker Compose로 여러 컨테이너 쉽게 관리하기

by 임혁진 2025. 4. 17.

들어가며

실제 서비스를 만들다 보면 하나의 컨테이너만 사용하는 경우는 드뭅니다.
예를 들어 웹 애플리케이션을 만든다면?

  • Web 서버 (Spring Boot) -JAVA
  • Database (MySQL)
  • Redis (캐시)
  • Nginx (Reverse Proxy)

이런 식으로 서로 다른 역할의 컨테이너들을 동시에 실행하고 관리해야 하죠.

이걸 일일이 docker run으로 띄운다면… 너무 복잡하고 번거롭습니다.
그래서 등장한 게 바로 Docker Compose입니다!


 Docker Compose란?

Docker Compose는
여러 개의 컨테이너를 정의하고, 한번에 실행할 수 있도록 도와주는 도구입니다.

YAML 파일로 컨테이너 설정을 정의하고
docker-compose up 한 줄로 모든 컨테이너를 실행합니다.


기본 구조

Docker Compose는 docker-compose.yml이라는 파일을 사용합니다.

.yml 파일은 루트 디렉토리에 작성하시면 됩니다.

예시 구조

my-project/
├── docker-compose.yml
├── app/
│   └── Dockerfile
└── db/

 docker-compose.yml 예제

version: '3.8'  # Compose 파일의 버전

services:
  app:
    build: ./app
    ports:
      - "8080:8080"
    depends_on:
      - db

  db:
    image: mysql:8.0
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: testdb
    ports:
      - "3306:3306"

 각 설정 설명

 

설정 설명
services 실행할 컨테이너들을 정의하는 블록
app / db 각각의 컨테이너 이름 (서비스명)
build Dockerfile이 위치한 경로
image 사용할 이미지 (Docker Hub에서 가져옴)
ports 외부:내부 포트 매핑
environment 컨테이너 환경 변수 설정
depends_on 의존하는 서비스 지정 (앱이 DB보다 나중에 시작됨)

 사용 방법

# 1. 실행
docker-compose up

# 2. 백그라운드 실행
docker-compose up -d

# 3. 종료
docker-compose down

 Compose의 장점

✅ 여러 컨테이너를 한 번에 실행/종료
✅ 환경 설정을 버전으로 관리 (YAML)
서비스 간 연결이 쉬움 (같은 네트워크에서 자동으로 통신)
✅ 테스트/배포 환경 구성에 유리


💡 Tip: .env 파일과 함께 쓰기

MYSQL_ROOT_PASSWORD=root
MYSQL_DATABASE=testdb
environment:
  MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
  MYSQL_DATABASE: ${MYSQL_DATABASE}

환경 변수를 외부로 분리하여 보안성과 재사용성을 높일 수 있다.

.env 파일은 compose.yml 이랑 같은 디렉토리에 두면 됩니다.

 

다음 글 추천