Frontend(React) / Backend(Node.js) / Database(PostgreSQL)로 구성된 프로젝트를 진행한다고 가정할 때, Docker만 사용한다면 각각의 컨테이너를 따로 실행해야 한다. 이를 관리하기 위해서는 실행 순서 / 환경변수 / 네트워크 / 볼륨 / 종료 순서를 모두 기억해야 한다. 서비스가 늘어날수록 거대한 컨테이너 오케스트라가 되어버리기 때문에 이를 관리하기 위해서 Docker Compose를 활용한다.
Docker Compose란 여러 Docker 컨테이너를 하나의 설정 파일로 관리하는 도구이다. 모든 설정을 docker-compose.yml 파일에 적어서 docker compose up 명령어로 한 번에 전부 실행하는 것이다.
services:
db:
image: postgres:16
environment:
POSTGRES_PASSWORD: 1234backend:
build: .
ports:
- "3000:3000"
depends_on:
- dbfrontend:
image: nginx
ports:
- "80:80"
Dockerfile은 '컨테이너를 어떻게 만들 것인가?'를 정의한다. Docker Compose는 '컨테이너를 어떻게 함께 실행할 것인가?'를 정의한다.
| 항목 | Dockerfile | Docker Compose |
|---|---|---|
| 목적 | 이미지 생성 | 컨테이너 관리 |
| 대상 | 1개 애플리케이션 | 여러 서비스 |
| 결과 | Image | Containers |
| 명령 | docker build | docker compose up |
| 역할 | 어떻게 만들지 | 어떻게 실행할지 |