개인의 기록
  • 소개
  • 프로젝트
  • 글
  • 링크

© 2026 newgirok

← 글 목록

Docker Logging — 컨테이너 로그를 수집하는 방법

2025년 7월 8일
DockerLoggingdocker logslog driverjson-file

컨테이너는 프로세스처럼 동작하기 때문에 로그가 파일이 아닌 stdout/stderr로 흘러나온다. 이 특성을 이해하지 못하면 장애 시 로그를 찾지 못해 디버깅이 막힌다. Docker는 Log Driver 시스템으로 이 출력을 다양한 백엔드로 라우팅할 수 있다.

docker logs 기본 사용법

실행 중인 컨테이너의 로그는 docker logs 명령으로 즉시 확인할 수 있다.

# 전체 로그 출력
docker logs <container_id>

# 실시간 스트리밍 (--follow)
docker logs --follow <container_id>

# 마지막 N줄만 출력
docker logs --tail 100 <container_id>

# 타임스탬프 포함
docker logs --timestamps <container_id>

--follow: 새 로그가 생길 때마다 터미널에 계속 출력하는 옵션. tail -f와 동일한 동작.

Log Driver 종류

Docker는 여러 Log Driver를 지원한다. 기본값은 json-file이며, 용도에 따라 교체할 수 있다.

Driver저장 위치특징
json-file호스트 파일시스템기본값, docker logs 사용 가능
syslog시스템 syslogOS 레벨 통합, 전통적 방식
fluentdFluentd 데몬중앙화 수집에 적합
awslogsAWS CloudWatchAWS 환경 전용
none없음로그 비활성화

json-file: 컨테이너 로그를 호스트의 /var/lib/docker/containers/<id>/<id>-json.log 경로에 JSON 형태로 저장하는 기본 드라이버.

로그 로테이션 설정

json-file 드라이버를 그대로 두면 로그 파일이 무한정 커진다. 로그 로테이션은 필수 설정이다.

# 컨테이너 단위 설정
docker run \
  --log-driver json-file \
  --log-opt max-size=10m \
  --log-opt max-file=3 \
  my-image

또는 /etc/docker/daemon.json에서 전역 기본값을 지정한다.

{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  }
}

max-file: 보관할 로그 파일의 최대 개수. 3으로 설정하면 최신 3개 파일만 유지하고 오래된 파일은 자동 삭제.

중앙화 로그 수집 아키텍처

프로덕션에서는 각 호스트의 로그를 한 곳으로 모아야 검색과 알림이 가능해진다. fluentd를 사이드카로 두는 패턴이 널리 쓰인다.

[Container A] --stdout--> [Fluentd]
[Container B] --stdout--> [Fluentd] --> [Elasticsearch] --> [Kibana]
[Container C] --stdout--> [Fluentd]

docker-compose.yml에서 드라이버를 지정하는 방법은 다음과 같다.

services:
  app:
    image: my-app
    logging:
      driver: fluentd
      options:
        fluentd-address: localhost:24224
        tag: app.{{.Name}}

Fluentd: CNCF 산하의 오픈소스 로그 수집기. 다양한 입력·출력 플러그인을 통해 로그를 파싱하고 여러 백엔드로 전달할 수 있다.

드라이버 선택 기준

  • 개발 환경: json-file + 로테이션 설정으로 충분하다.
  • 단일 서버 프로덕션: syslog로 OS 로그 시스템과 통합한다.
  • 멀티 호스트 / 쿠버네티스: fluentd 또는 awslogs로 중앙화한다.

docker logs 명령은 드라이버가 json-file 또는 journald일 때만 동작한다. fluentd로 전환하면 로컬에서 docker logs를 사용할 수 없으므로 운영 정책을 미리 결정해야 한다.

← 이전 글Docker Health Check — 컨테이너 상태를 모니터링하는 방법
다음 글 →Multi-stage Build — 이미지 크기를 줄이는 빌드 최적화