Docker Compose로 다중 컨테이너를 한 번에 관리하자
VPS 하나에 서비스를 여러 개 올리면 금방 컨테이너가 늘어납니다. 웹 서버, 데이터베이스, 캐시, 리버스 프록시… docker run 명령어로 일일이 띄우면 관리가 불가능해집니다. Docker Compose는 docker-compose.yml 파일 하나로 여러 컨테이너를 정의하고 up 한 번에 전부 실행할 수 있게 해줍니다.
이 튜토리얼에서는 웹 앱 + PostgreSQL + Redis로 구성된 다중 컨테이너 서비스를 Docker Compose로 구성하는 전체 과정을 다룹니다. Vultr, DigitalOcean, Hetzner VPS에서 그대로 적용할 수 있습니다.
1. Docker Compose 설치
Docker가 이미 설치되어 있다면 Compose plugin으로 충분합니다:
sudo apt update && sudo apt install -y docker.io docker-compose-plugin
버전 확인:
docker compose version
2. docker-compose.yml 작성
세 개의 서비스(web, db, cache)를 정의합니다:
services:
web:
build: .
ports:
- "8000:8000"
environment:
- DATABASE_URL=postgresql://app:\${DB_PASSWORD}@db:5432/app
- REDIS_URL=redis://cache:6379
depends_on:
db:
condition: service_healthy
cache:
condition: service_started
restart: unless-stopped
db:
image: postgres:16-alpine
environment:
POSTGRES_USER: app
POSTGRES_PASSWORD: \${DB_PASSWORD}
POSTGRES_DB: app
volumes:
- pgdata:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U app"]
interval: 10s
timeout: 5s
retries: 5
restart: unless-stopped
cache:
image: redis:7-alpine
volumes:
- redisdata:/data
restart: unless-stopped
volumes:
pgdata:
redisdata:
3. 환경변수 .env 관리
비밀번호 등 민감 정보는 .env 파일로 분리합니다. 절대 git에 커밋하지 마세요.
# .env
DB_PASSWORD=매우강력한비밀번호
.gitignore에 추가:
echo ".env" >> .gitignore
4. 전체 서비스 실행
docker compose up -d
컨테이너 상태 확인:
docker compose ps
docker compose logs -f web
5. 데이터 영속화 — named volumes
컨테이너를 지워도 데이터는 남아야 합니다. volumes 섹션으로 named volume을 정의하면, docker compose down을 해도 DB 데이터가 보존됩니다. 완전히 삭제하려면 -v 옵션을 줍니다:
docker compose down -v # volume까지 삭제 — 주의!
6. 컨테이너 간 통신 — networks
Docker Compose는 같은 docker-compose.yml에 정의된 서비스끼리 자동으로 네트워크를 구성합니다. db, cache 같은 서비스 이름으로 통신할 수 있습니다. 별도 network를 정의하면 더 세밀하게 제어할 수 있습니다.
7. 운영 패턴 — 헬스체크와 재시작 정책
healthcheck로 컨테이너가 정상인지 주기적으로 검사합니다. DB가 준비된 뒤에 웹 서버가 실행되도록 depends_on: condition: service_healthy를 사용합니다. restart: unless-stopped로 서버 재부팅 시 자동 복구되게 합니다.
마무리: docker compose up 한 줄의 힘
Docker Compose를 쓰면 인프라가 코드로 관리됩니다. docker-compose.yml 하나로 개발·운영 환경을 동일하게 재현할 수 있고, 새 VPS로 이전할 때도 파일 복사 한 번이면 끝납니다.
추천 VPS: 이 튜토리얼은 Vultr, DigitalOcean, Hetzner VPS에서 그대로 적용됩니다.



















