컨테이너 하나는 docker run으로 충분하지만, 웹·DB·캐시처럼 여러 개를 함께 띄우면 명령이 길고 외우기 어려워집니다. Docker Compose는 이 여러 컨테이너의 설정을 compose.yaml 한 파일에 적어 두고 docker compose up 한 번으로 전부 띄우는 도구입니다. 구조를 알면 남이 쓴 compose 파일도 바로 읽힙니다.
최상위 세 블록
compose 파일의 뼈대는 세 개의 최상위 키입니다.
| 키 | 역할 |
|---|---|
| services | 띄울 컨테이너들의 정의 (가장 핵심) |
| networks | 서비스들이 붙을 네트워크 |
| volumes | 데이터를 영속 저장할 볼륨 |
대부분의 내용은 services 아래에 들어갑니다. 각 서비스는 이미지, 포트, 환경변수, 의존 관계 같은 설정을 자식 키로 갖습니다.
services 블록 읽기
다음은 웹 앱과 PostgreSQL을 함께 띄우는 전형적인 예시입니다.
YAML
services:
web:
build: .
ports:
- "8080:3000"
environment:
DATABASE_URL: postgres://db:5432/app
depends_on:
- db
db:
image: postgres:16
volumes:
- dbdata:/var/lib/postgresql/data
volumes:
dbdata:
ports의 "8080:3000"은 호스트 8080을 컨테이너 3000으로 연결합니다. depends_on은 db를 web보다 먼저 시작하라는 순서 지정입니다. web이 db라는 이름으로 접속할 수 있는 것은, compose가 서비스 이름을 DNS로 풀어 주기 때문입니다.
자주 쓰는 키 정리
| 키 | 의미 |
|---|---|
| image / build | 기존 이미지 사용 / Dockerfile로 빌드 |
| ports | "호스트:컨테이너" 포트 매핑 |
| environment | 컨테이너 환경변수 |
| depends_on | 시작 순서 의존성 |
| volumes | 데이터 영속화 마운트 |
Docker
docker compose up -d
docker compose ps
docker compose logs -f web
docker compose down
up -d로 백그라운드 실행, logs -f로 로그 추적, down으로 전체 정리까지 한 묶음으로 다룹니다.
요점 정리
- compose 파일은 services·networks·volumes 세 최상위 블록으로 이루어진다.
- 대부분의 설정은 services 아래에 이미지·포트·환경변수로 들어간다.
depends_on은 시작 순서를, 서비스 이름은 컨테이너 간 DNS 주소를 제공한다.docker compose up과down으로 여러 컨테이너를 한 번에 다룬다.
compose 파일을 직접 작성해 여러 컨테이너를 한 번에 띄우는 실습은 도커 트랙에서 할 수 있습니다 — 회원가입 없이 무료로.