멀티컨테이너 애플리케이션과 Docker Compose: 실전 예제
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
개발 툴
대상자
- *Docker 사용자 및 DevOps 엔지니어**
- 난이도: 중급 이상 (Docker Compose 기초 지식 필요)
- 도움: 멀티컨테이너 애플리케이션 구성, 환경 설정, 확장성 향상
핵심 요약
- Docker Compose는 YAML 파일로 서비스, 네트워크, 볼륨을 정의하여 재현 가능한 환경을 제공
- 중요 구성 요소:
- MongoDB, Express.js, Angular, Nginx 기반 웹 애플리케이션 구성 예시
- 마이크로서비스 기반 e-commerce 플랫폼 예제 (API Gateway, Redis, Elasticsearch 포함)
- 모니터링을 위한 Prometheus, Grafana, Jaeger 통합 예시
섹션별 세부 요약
1. 웹 애플리케이션 스택 구성
- MongoDB 서비스:
- mongo:6.0
이미지 사용
- MONGO_INITDB_ROOT_USERNAME
과 MONGO_INITDB_ROOT_PASSWORD
환경 변수 설정
- mongodb_data
볼륨을 통해 데이터 영속화
- Express.js API:
- NODE_ENV
설정 및 MONGODB_URI
연결
- depends_on
을 통해 MongoDB 의존성 관리
- Nginx 역전파 프록시:
- nginx:alpine
이미지 사용
- ./nginx/nginx.conf
파일로 커스터마이징
2. 마이크로서비스 기반 e-commerce 플랫폼
- API Gateway:
- nginx:alpine
이미지로 구성
- user-service
, product-service
, order-service
의존성 설정
- 데이터베이스 구성:
- PostgreSQL 15 사용 (user_db
, product_db
, order_db
볼륨으로 데이터 저장)
- Redis 7-alpine과 RabbitMQ 3-management 통합
- Elasticsearch 8.8.0 설치:
- discovery.type=single-node
설정으로 단일 노드 모드 활성화
3. 모니터링 및 로깅 환경 구성
- Prometheus와 Grafana 통합:
- prometheus.yml
구성 파일을 볼륨으로 마운트
- grafana
컨테이너에 대시보드 및 데이터소스 프로비저닝
- Jaeger 트레이싱:
- COLLECTOR_OTLP_ENABLED=true
설정으로 OTLP 수집 활성화
- Elasticsearch + Logstash + Kibana 스택:
- 로그 수집 및 분석을 위한 ELK 스택 구성
4. 보안 및 최적화 팁
- 환경 변수 관리:
- .env
파일을 통해 POSTGRES_PASSWORD
, JWT_SECRET
, STRIPE_SECRET_KEY
등 보안 정보 저장
- 건강 점검 추가:
- curl
명령어를 사용한 healthcheck
설정 (예: test: ["CMD", "curl", "-f", "http://api:3000/health"]
)
- 리소스 제한:
- deploy.resources.limits
로 CPU 및 메모리 사용량 제어 (예: memory: 512M
)
- 멀티스테이지 빌드:
- node:18-alpine
이미지로 프로덕션 빌드 최적화
결론
- Docker Compose를 활용하여 복잡한 애플리케이션을 효율적으로 구성하고 관리할 수 있음
- YAML 파일의 정확한 구성과 환경 변수 사용이 안정성 향상에 핵심
- 모니터링 도구 (Prometheus, Grafana, Jaeger) 통합을 통해 애플리케이션 성능을 실시간으로 추적 및 분석 가능
- 보안 및 확장성을 위해
.env
파일, 리소스 제한, 멀티스테이지 빌드를 반드시 적용해야 함