Docker 이미지 용량 확인 및 디렉토리 구성에 대해

DevOps Engineer·2023년 11월 27일
0
post-thumbnail

개요

쿠버네티스로 운영중인 한 노드의 Disk가 100%가 초과되면서 원인을 분석하게 됨

처음에 접근은 이러했다

cd /
df -h 
du -h --max-depth=1 .

이미지 해쉬값이 쌓여서 그런가? /var/lib/docker/overlay2에 들어가보니 지저분해보였다.
현재 사용하고 있지않은 볼륨, 이미지를 제거하는 명령어를 통해 30Gi 정도 정리를 했다.

docker system df
docker image prune –a
docker volume prune –a 
docker system df
docker info

docker info에는 이미지 build 시 캐시되는 파일이 있는 directory가 명시되어 있었다.

분명 사용하지않는 이미지는 다 제거했음에도 불구하고 여전히 용량이 많이 남아있어 이제부터는 조심히 접근해야할 필요가 있어 디렉토리 구조를 살펴봤다.

아래 경로는 현재 docker로 실행중인 애플리케이션이였고 그 내부 구조를 살펴봤다.

원인분석 후 이 부분은 원래 삭제하는 cronjob이 있어야하는데 빠져있어서 발생한 이슈였다.

cronjob 추가 후 잘 삭제되어 용량이 정상적으로 돌아왔다.


docker 내부 구조에서 diff, link, merged, work 의 역할이 무엇인지 확인을 해봤다.

The lowest layer contains a file called link, which contains the name of the shortened identifier, and a directory called diff which contains the layer's contents.

link는 "가장 낮은 계층에는 단축 식별자의 이름" 로 번역이 됐다.
이미지 빌드 시 layer 형태로 차곡차곡 쌓이는데 그 과정에 포함되는 것들이 diff에 저장되는 것 같았다.
컨테이너 내부에 직접 들어가지 않아도 merged는 같은 환경을 공유해줬다.

It also contains a merged directory, which contains the unified contents of its parent layer and itself, and a work directory which is used internally by OverlayFS.

번역하면 "또한 상위 계층과 자체의 통합된 내용을 포함하는 병합된 디렉토리와 오버레이FS에서 내부적으로 사용하는 작업 디렉토리도 포함됩니다" 라고 번역이 되어 정확히 정의를 내리진 못해도 어떤 역할을 하는지는 감이 온다.

참고문서

profile
madame의 Techblog

0개의 댓글