[Docker]도커 레이어 용량 차지 문제 해결(feat. docker/overlay2)

나른한 개발자·2022년 12월 27일
1
post-custom-banner

디스크 용량 부족

원격서버에 docker로 운영되는 리소스들 있었는데 동작 확인을 위해 docker를 재시작하는 도중 서버의 디스크 용량이 부족하여 docker가 빌드되지 않는 문제가 발생했다.

이전에도 gunicorn accesslog 때문에 용량이 다 찬적이 있어서 그때처럼 로그나 백업파일이 쌓인 곳은 없는지 확인하려했다.

1. 용량을 가장 많이 차지하고 있는 디렉터리 파악

우선 다음의 명령어로 어떤 디렉토리가 용량을 많이 차지하고 있는지 파악했다.

sudo du -hsx /* | sort -rh | head -n 40

확인해보니 /var/lib/docker/overlay2 경로에 27G나 차지하는 것을 발견했다.

💡 overlay?
우분투와 같은 데비안 계열 운영체제에서 사용하는 레이어 파일 시스템. 컨테이너의 스토리지를 제한하기위해 Docker Engine의 자제 기능을 이용하지 않고 Storage의 도움이 필요한데, 이때 사용하는 파일 시스템이 Overlay2이다.


2. 불필요한 도커 레이어 정리

찾아보니 보통 /var/lib/docker/overlay2 가 용량이 큰 경우 diff/tmp 에 컨테이너 내부 파일구조 변경 사항들이 과도하게 쌓였기 때문이라고 한다. 이 파일은 삭제해도 동작에 큰 문제가 생기지 않는다고 하니 우선 가장 큰 용량을 차지하고 있는 파일을 찾아 삭제를 해주려고 했다.

근데 도커에 var/lib/docker/overlay2/layerdb/sha256을 보니 실제 운영하고 있는 도커 레이어보다 훨씬 많은 레이어들이 저장된것 처럼 보였다. 프로젝트 초기에 도커 파일을 작성하는 과정에서 저장된 불필요한 레이어들이 아직도 남아있는 것으로 예상되었다. 이참에 필요없는 것들은 모두 정리해버릴까 싶어, 레이어들을 모두 삭제해준 뒤 용량을 확인해보니 10G대로 용량이 줄어들었고 도커도 원활하게 동작이 되었다.


3. /var/lib 변경

데비안 계열에서 도커를 설치하면 컨테이너 저장경로가 /var/lib로 디폴트 설정되기 때문에 파티션 크기가 적은 경우 이번처럼 용량 문제를 일으킬 수 있다. 임시 처방으로 파일 정리 후 도커가 잘 동작하기는 하지만 추후에 같은 문제가 발생하지 않도록 하기 위해 저장 경로를 변경해주도록 했다.

(1) daemon.json 파일 생성

vi /etc/docker/daemon.json

(2) 변경할 경로 추가

# daemon.json

{
    "graph": "바꿀 경로"
}

(3) 도커 재시작

sudo systemctl restart docker

(4) 컨테이너 실행 후 경로 확인

ps -ef | grep docker

참고
[Docker / Linux] 도커 볼륨의 용량이 너무 클 때 해결법
Docker에서 /var/lib 변경
만들면서 이해하는 도커(Docker) 이미지의 구조
What do I do when my root filesystem is full?

profile
Start fast to fail fast
post-custom-banner

0개의 댓글