Tree Size를 이용해서 ssd를 정리하던중 이상한걸 발견했다.

윈도우에서는 간단한 연습용 리눅스 서버나 DB가 올라가있는 docker가 data로 용량을 14.6GB나 차지하고 있었다.
요즘 docker는 쓰지도 않았고 매번 필요없는 volume도 정리했었는데 이상하다
원인 추적
Docker에서 실제로 사용중인 용량을 확인해봤다.
docker system df

총 사용 용량이 3GB 밖에 안되는데 폴더는 14.6GB이다.
Docker Desktop for Windows는 두가지 방식으로 동작한다는 것을 알아냈다.
- Hyper-V 백엔드 (구형 방식)
- WSL2 백엔드 (최신 방식)
wsl --list -v

docker-desktop-data라는 WSL2 가 있으며 Docker의 모든 데이터를 저장하는 곳이다.
이는 가상 디스크 파일 (VHDX)를 사용하게된다.
보통 docker-desktop은 아래 경로에 저장이 된다.
C:\Users\[사용자명]\AppData\Local\Docker\wsl\data\ext4.vhdx

이 파일이 14GB의 용량을 차지한 범인이였다.
VHDX 파일이란?
Virtial Hard Disk의 약자로 가상 머신이나 WSL2가 사용하는 가상 디스크 파일이다.
여기서 핵심은 동적 확장 특성을 가지고 있다는 거다.
- 데이터가 늘어나면
파일 크기가 자동으로 증가한다. - 데이터를 지우면
파일 크기 자동으로 감소한다. 가 아닌 파일 크기가 그대로 유지된다.
왜 자동으로 줄어들지 않을까?
- Docker 내부에서 이미지 삭제
- ext4 파일 시스템에서 "사용 안 함" 표시
- 하지만 VHDX 파일 자체는 그대로 유지
- Widows에서는 여전히 14.6GB로 보인다.
이는 성능 최적화를 위해서라고 추론해볼 수 있다.
자동으로 매번 줄이면 디스크 재구성 작업이 계속 필요해서 성능이 저하된다. 마치 ssd나 hdd를 버릴때 완전포맷하지 않으면 다시 복수할 수 있는 것처럼 실제로 데이터가 지워진 것이 아닌 지워진척 하는 상태인 것이다.
해결 방법

1. Docker 완전 종료
--docker 종료 (종료하는 것이기 때문에 컨테이너가 중요한 역할 중일때 하면 안됨)
wsl --shutdown
--정상 종료 확인
wsl --list -v

2. VHDX 파일 압축 (용량 정리)
관리자 권한으로 PowerShell을 키자

아래 명령어를 입력하자
optimize-vhd -Path "$env:LOCALAPPDATA\Docker\wsl\data\ext4.vhdx" -Mode full

파일을 정리중이다.

용량이 줄어든걸 확인할 수 있다.
그럼 남은 10GB는 뭔가요?
확인해보자



여기서 발견한건 파일 시스템 전체 사용량은 6.2GB라는 것이다.

실제 데이터는 5.1GB를 사용하고 있다.
즉 파일시스템은 6.2GB정도를 실제 사용하고 있고 여유 공간으로 3.8GB를 두고 있다.
사실 !TB sdd를 사용하고 있어서 14.6GB면 무시해도되지만 궁금해서 찾아봤다.
그럼 Linux도 그럴까?
내가 모니터링 연습을 하면서 사용한 GCP 기반 리눅스 서버도 들러봤다.
docker system df

총 4.6GB정도 사용하고있다.
sudo du -sh /var/lib/docker

실제 디스크 사용량을 보면 6.6GB 정도 사용하고 있다.
이젠 진짜 어디서 사용하는지 알아보
--docker 디렉토리 접근이 root만 가능해서 권한 변경
sudo su
--실제 사용량 조사
du -sh /var/lib/docker/*

여기서 이제 2GB정도 차이나는 이유를 알았다.
Docker Hub에서 이미지 다운로드할때 압축해서 전송되는데 우리가 보는 docker system df 표시에서는 압축된 크기로 보여주게 된다.
하지만 실제 크기는 압축이 해제된 크기라 그것보다 조금더 크다.
그래서 어떤거를 다운로드할때 여유 공간을 조금더 잡으라고 하는거 같다.
'Deployment > Docker 기초' 카테고리의 다른 글
| [Docker/기초] Docker-compose 명령어 & 설치 (4) (0) | 2024.12.05 |
|---|---|
| [Docker/기초] Docker 네트워크 (3) (0) | 2024.12.05 |
| [Docker/기초] Docker-comopse 파일 만들기 (version 3) (2) (0) | 2024.12.05 |
| [Docker/기초] Docker File 만들기 (1) (0) | 2024.12.05 |
| [Docker/기초] Volume (0) | 2024.02.15 |