Kubernetes는 강력하지만, 소규모 서비스 운영에는 과도한 복잡성을 가져옵니다.
Docker Compose만으로도 웹서버, DB, 캐시를 우아하게 함께 운영할 수 있습니다.
Docker Compose가 필요한 상황
실제 서비스는 단독 컨테이너 하나로 돌아가지 않습니다.
일반적인 웹 앱 스택은 이렇게 구성됩니다.
- FastAPI / Node.js 백엔드
- PostgreSQL 데이터베이스
- Redis 캐시
- Nginx 리버스 프록시
이 모든 것을 개별 docker run 명령으로 관리하면 매우 복잡해집니다.
Docker Compose는 이를 하나의 YAML 파일로 선언적으로 관리합니다.
실전 docker-compose.yml 예시
version: "3.9"
services:
api:
build: .
ports:
- "8000:8000"
environment:
DATABASE_URL: postgresql://user:pass@db:5432/mydb
depends_on:
- db
- redis
db:
image: postgres:16
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: pass
POSTGRES_DB: mydb
volumes:
- pg_data:/var/lib/postgresql/data
redis:
image: redis:7-alpine
nginx:
image: nginx:alpine
ports:
- "80:80"
volumes:
- ./nginx.conf:/etc/nginx/conf.d/default.conf
volumes:
pg_data:
docker compose up -d 한 줄로 4개의 서비스가 동시에 올라옵니다.
자주 쓰는 Compose 명령어
docker compose up -d— 백그라운드 실행docker compose down— 중지 및 컨테이너 제거docker compose logs -f api— 특정 서비스 로그 실시간 추적docker compose exec db psql -U user mydb— DB 접속docker compose build --no-cache— 이미지 재빌드
운영 환경에서의 주의사항
- 볼륨 백업: DB 데이터는 반드시 외부 볼륨으로 영구 저장
- .env 파일: 비밀번호와 API 키는 환경변수로 분리
- healthcheck: depends_on만으로는 DB 준비 타이밍을 보장 못 함, healthcheck 설정 권장
- 리소스 제한:
mem_limit,cpus설정으로 컨테이너가 호스트 자원을 독점하는 것 방지
스타트업이나 소규모 팀에서는 Kubernetes 도입 전 Docker Compose로 충분히 안정적인 운영이 가능합니다.
작성한 정보가 조금이나마 유익하고 도움이 되셨다면, 가시기 전에 아래 광고 한번 살짝 눌러주시면 정말 큰 힘이 됩니다. 감사합니다!