1. 로그 및 모니터링
운영 환경에서는 단순히 docker logs
명령어로 로그를 확인하는 것보다 중앙 로그 시스템을 활용하는 것이 효율적이다.
Prometheus + Grafana 모니터링 스택
Prometheus는 메트릭 수집을 담당하고, Grafana는 시각화 대시보드를 제공한다.
services:
prometheus:
image: prom/prometheus:latest
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
ports:
- "9090:9090"
grafana:
image: grafana/grafana:latest
depends_on:
- prometheus
ports:
- "3000:3000"
volumes:
- grafana-data:/var/lib/grafana
volumes:
grafana-data:
ELK(Stack): Elasticsearch + Logstash + Kibana
ELK 스택을 사용하면 로그를 실시간으로 수집, 분석, 검색할 수 있다.
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.10.0
environment:
- discovery.type=single-node
ports:
- "9200:9200"
kibana:
image: docker.elastic.co/kibana/kibana:7.10.0
ports:
- "5601:5601"
Loki + Grafana 로그 관리
Loki는 경량 로그 관리 시스템으로, Grafana와 함께 사용하면 ELK보다 가벼운 설정이 가능하다.
Fluentd를 활용한 로그 중앙 관리
Fluentd는 컨테이너 로그를 중앙 서버로 전송하는 역할을 한다.
services:
fluentd:
image: fluent/fluentd:latest
volumes:
- ./fluent.conf:/fluentd/etc/fluent.conf
ports:
- "24224:24224"
- "24224:24224/udp"
2. 네트워크 및 보안
Docker 네트워크 설정
내부 서비스 간 통신을 위해 별도의 네트워크를 설정하는 것이 보안적으로 안전하다.
networks:
app_network:
driver: bridge
컨테이너 보안 강화
각 컨테이너에 최소한의 권한만 부여하는 것이 중요하다.
services:
app:
user: non-root
Docker Secrets 활용
민감한 환경 변수는 .env
파일 대신 Docker Secrets를 활용하는 것이 좋다.
echo "my-secret-value" | docker secret create db_password -
TLS 적용 (Nginx + Certbot)
API-USER와 GATEWAY가 JWT를 다루므로 HTTPS를 적용하는 것이 보안상 필수적이다.
services:
nginx:
image: nginx:latest
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
- /etc/letsencrypt:/etc/letsencrypt
ports:
- "80:80"
- "443:443"
정리
운영 환경에서 로그 관리와 보안을 강화하는 것은 필수적이다. Prometheus, ELK, Fluentd 등을 활용한 로그 수집 및 모니터링, 네트워크 격리, Docker Secrets 및 TLS 적용으로 보안성을 높일 수 있다.