Docker로 애플리케이션을 배포하여 서비스를 운영 중인 Linux 서버에 디스크 용량이 부족하다는 오류나 경고 메시지가 발생한 경험이 있으신가요? 실제 애플리케이션에 의해 생성되어 저장되는 데이터 및 로그가 차지하는 용량은 그렇게 많지 않은데, 시스템 전체 스토리지 용량이 Full 될 수 있습니다.
왜 그런 것일까요?
Docker를 사용할 때 스토리지 용량이 부족해지는 원인은 여러 가지가 있을 수 있습니다.
그중 가장 많이 발생하는 것으로 Docker 컨테이너 로그가 원인일 수 있습니다.
이번 포스트에서는 잘 못 설정하면 시스템의 디스크 용량 부족으로 이어지는 Docker의 로깅 드라이버에 대해 알아보겠습니다.
Docker 로깅 드라이버 및 로그 위치
Docker에는 실행 중인 컨테이너 및 서비스에서 정보를 얻는 데 도움이 되는 여러 로깅 메커니즘이 포함되어 있습니다. 이러한 메커니즘을 로깅 드라이버라고 합니다.
docker logs
명령은 실행 중인 컨테이너가 기록한 정보를 보여줍니다. docker service logs
명령은 서비스에 참여하는 모든 컨테이너가 기록한 정보를 보여줍니다.
기본적으로 Docker는 모든 컨테이너 로그의 표준 출력(stdout
) 또는 표준 에러(stderr
)를 캡처하여 JSON 형식으로 파일에 기록하는 json-file
로깅 드라이버를 사용합니다.
docker run
또는 docker-compose up
명령어로 Docker 컨테이너를 실행하면 /var/lib/docker/containers/[Container-ID]/[Container-ID]-json.log
파일이 생성되고 로그가 기록됩니다.
기본적으로 json-file
로깅 드라이버는 로그 로테이션(log-rotation)을 수행하지 않습니다. 결과적으로 이 로깅 드라이버에 의해 저장된 로그 파일은 많은 양의 출력을 생성하는 컨테이너이면 상당한 양의 디스크 공간을 사용할 수 있으며, 이로 인해 디스크 공간이 고갈될 수 있습니다.
Docker는 Docker의 이전 버전과의 호환성을 유지하고 Docker가 Kubernetes의 런타임으로 사용되는 상황을 위해
json-file
로깅 드라이버(로그 로테이션 없이)를 기본값으로 유지합니다.