D: 🚀 개발자라면 한 번쯤 겪는 고민
“로컬에서 웹 서버, DB, 캐시 서버를 각각 띄우려니 명령어가 너무 복잡해!”
“테스트 환경마다 컨테이너 설정이 달라서 매번 헷갈려…”
이런 문제를 해결해줄 Docker Compose의 매력에 대해 상세히 알아보겠습니다.
🔍 Docker Compose가 뭐길래?
Docker Compose는 여러 개의 Docker 컨테이너를 하나의 파일(docker-compose.yml
)로 정의하고, 명령어 한 줄로 전체 환경을 관리할 수 있는 도구입니다.
👉 예시 시나리오
- 웹 애플리케이션 (Node.js)
- 데이터베이스 (MySQL)
- 캐시 시스템 (Redis)
- 로그 수집기 (Elasticsearch)
이 모든 걸 각각 docker run
으로 실행하면 명령어가 길어지지만, Compose로는 YAML 파일 하나로 간결하게 정의 가능합니다.
✨ 핵심 기능 3가지
- 멀티 컨테이너 정의
- 서비스 간 의존성, 네트워크, 볼륨을 한 번에 설정
- 환경 변수 관리
.env
파일과 연동해 보안 정보 분리 가능
- 단일 명령어 제어
docker-compose up
/down
으로 전체 시작/종료
🛠️ 실전 예제: 웹 + DB + Redis 구성
version: '3.8'
services:
web:
image: node:14
ports:
- "3000:3000"
volumes:
- ./app:/usr/src/app
depends_on:
- db
- redis
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: secret
volumes:
- db_data:/var/lib/mysql
redis:
image: redis:alpine
volumes:
db_data:
📌 주요 설정 설명
depends_on
: 웹 서버가 DB와 Redis보다 나중에 시작되도록 보장volumes
: DB 데이터 영구 저장 (컨테이너 삭제 시 데이터 유지)environment
: 비밀번호 같은 민감 정보는 실제로는.env
파일로 분리 권장
💡 고급 활용 팁
1. 프로파일로 환경 분리
services:
web:
# ...
profiles: ["development"] # 개발 시에만 실행
monitoring:
image: prometheus
profiles: ["monitoring"] # 모니터링 필요 시 선택 실행
👉 docker-compose --profile monitoring up
2. 커스텀 네트워크 구성
networks:
app_network:
driver: bridge
ipam:
config:
- subnet: 172.20.0.0/24
3. 빌드 + 배포 한 번에
web:
build: ./dockerfiles # Dockerfile 경로 지정
image: my-custom-image:latest # 빌드 후 태그
❓ 자주 묻는 질문
Q. Docker Compose vs Kubernetes?
- Compose: 로컬/소규모 환경용 (단일 호스트)
- K8s: 대규모 클러스터 관리용
Q. 기존 docker run
명령어를 Compose로 변환하려면?
👉 docker run -p 8080:80 nginx
→
services:
nginx:
image: nginx
ports:
- "8080:80"
🎯 마무리: 왜 Compose를 써야 할까?
- 생산성 향상 ⏳: 반복적인 명령어 입력 X
- 환경 일관성 🔄: 개발/테스트/운영 환경 동기화
- 협업 용이 👥:
docker-compose.yml
파일 공유로 설정 공유
💡 초보자라면?
도커 공식 문서의 Compose 샘플로 연습해보세요!
이제 팀원들에게 “설치는 docker-compose up
한 줄이에요!” 라고 말할 수 있게 되었습니다. 🎉