- Docker로 애플리케이션 배포해 서비스 운영 중인 리눅스 서버에 디스크 용량 부족 메시지 뜨는 상황 있음
- 실제 애플리케이션으로 생성, 저장되는 데이터와 로그 용량은 많지 않아도 시스템 전체 스토리지 용량이 Full 될 수 있음
- 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 로깅 드라이버는 로그 스테이션 수행하지 않음
- 이 로깅 드라이버로 저장된 로그 파일은 많은 양의 출력을 생성하는 컨테이너면 상당한 양의 디스크 공간을 사용, 이로 인해 디스크 공간이 고갈될 수 있음
- Docker 컨테이너 로그 크기 줄이기
- docker rm 또는 docker-compose down 명령어 실행하면 Docker 컨테이너 삭제, /var/lib/docker/containers 하위에 [Container-ID]에 해당하는 디렉터리도 삭제
- 이로써 많은 디스크 공간 차지한 [Container-ID]-json.log 파일도 같이 삭제돼 시스템 전체 디스크 공간 확보
- truncate -s 0 <json-log-file> 명령 실행하면 로그 파일 크기 0으로 만들 수 있음
- 로그 스테이션 설정
- 로그 파일 최대 크기(max-size)와 최대 파일 개수(max-file) 지정해 로그 스테이션 활성화할 수 있음
- 파일 크기가 설정한 최댓값에 도달하면 새 파일로 교체, 기존 파일은 ...-json.log.1, ...-json.log.2 으로 최대 개수까지 로그 파일 생성
- 초과하면 가장 오래된 파일이 제거돼 Docker 컨테이너의 로그 파일 크기가 무한정 커지는 것 방지