Docker Compose 운영 환경 최적화: 로그 관리 및 보안 설정

 

 

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 적용으로 보안성을 높일 수 있다.