Profile picture

[Docker] 도커 볼륨(Volume) 용량 초과 이슈 해결방법

JaehyoJJAng2022년 03월 30일

▶︎ 개요

현재 waytothem 사이트 운영 중 도커 볼륨의 용령이 너무 커져서 그 원인에 대해 파악해보고자 한다.

우선적으로 확인해야 되는 사항

  • 도커 루트 파일시스템의 용량 현황확인
  • Overlay2 파일시스템의 용량이 가장 큰 경우
  • Volumes의 용량이 가장 큰 경우

▶︎ 도커 저장 경로 찾기

도커 데이터가 어느 경로에 저장 되는지 docker info 명령어를 활용하여 도커 루트 디렉토리를 찾아보자

$ docker info | grep -i "docker root dir"

Docker Root Dir: /var/lib/docker

‣ 용량 큰 놈 찾기

$ du -sh *

4.0K	2021-12-17-my-first-post.md
4.0K	2022-03-30-docker-volume-fulll-issue.md
 12K	2022-05-12-python-coupang-review-crawling.md
4.0K	2022-08-23-docker-nextcloud.md
8.0K	2022-09-12-docker-volume-container.md
4.0K	2022-09-25-docker-compose-http-file-server.md
4.0K	2023-02-01-docker-print-format.md
4.0K	2023-02-17-docker-compose-static-ip.md
8.0K	2023-02-17-docker-compose-web-db-nfs.md
4.0K	2023-02-28-algorithm-1.md
4.0K	2023-02-28-bash-project-1.md
4.0K	2023-02-28-database-1.md
8.0K	2023-02-28-git-pull-request.md
8.0K	2023-02-28-git-repository-commit.md
4.0K	2023-02-28-js-1.md
4.0K	2023-02-28-k8s-1.md
8.0K	2023-02-28-python-paramiko-ssh-config.md
4.0K	2023-02-28-vm-ubuntu-setting.md
4.0K	2023-03-01-git-conflict-solve.md
 12K	2023-03-02-create-https-container-1.md
 12K	2023-03-02-naverapi-crawling-image.md
 16K	_site
$ du -h --max-depth=1 2>/dev/null

‣ overlay2

  • overlay2 가 가장 용량이 클 경우
  • 백업 같은 역할을 수행하기 위해, 컨테이너 내부 파일 구조의 변경 사항 기록하는 /diff/tmp/ 폴더에 용량이 매우 큰 파일들이 존재하는 경우가 많다

/var/lib/docker/overlay2/yxkyzwgsdja0vch7r05f7drdk

$ du -sh */diff/ | sort -k 1 -nr

image

-> 위 명령어를 통해 용량을 가장 많이 차지하고 있는 컨테이너 디렉토리 찾은 후 , 내부에 있는 /var/lib/docker/overlay2/<컨테이너폴더>diff/tmp에서
비정상적으로 용량이 큰 파일을 삭제하면 된다. 혹시 모르니 백업을 해두는 것은 필수


‣ 이미지,컨테이너 용량

  • 이미지와 컨테이너의 용량이 큰 경우
  • docker volume은 일반적으로 컨테이너 내부에서 사용되는 파일들이 그대로 저장되어있는 장소이다
  • 리눅스와는 별도로 docker volume은 자체적으로 "휴지통" 개념을 가지고 있어, 파일을 삭제 했을 때 자동으로 Volumes 디렉터리 내부에 .Trash 디렉터리로 옮기게 됨.

image

-> 나는 현재 도커 이미지를 삭제 할 일이 거의 없으므로 , .Trash 파일이 없다.

.Trash파일이 존재하는 경우 rm -rf .Trash* 명령으로 날려주면 된다


▶︎ 번외

‣ 도커 사용량 확인

$ docker system df

‣ 도커 시스템 정리

(이미지 , 컨테이너, 네트워크 정리) (사용하지 않는 모든 컨테이너,모든 활성 볼륨 제거)

$ docker system prune <<< y

‣ 도커 이미지 정리

  • 하나 이상의 컨테이너와 연관된 모든 이미지 삭제
$ docker image prune -a

‣ 도커 컨테이너 정리

  • 중지된 컨테이너만 삭제
$ docker container prune

‣ 도커 볼륨 정리

  • 사용하지 않는 볼륨 제거
$ docker volume prune

$ docker volume remove $(docker volume ls | awk '{print $2}' | grep -v "[A-Z]")

Loading script...