도커 용량이슈
어느날
Jenkins에서 에러

Git push하려는데 에러

알고보니 원인은 리눅스 서버 용량부족
100Gb만 할당했는데 Docker가 90% 를 차지하고있었따..
리눅스 용량 확인법
df -h

루트(/)가 100% 이니 루트의 용량을 파헤쳐보자
sudo du -h --max-depth=1 / | sort -hr | head -n 10

var의 용량이 제일크니 var를 파헤쳐보자
sudo du -sh /var/*

lib 용량 파헤쳐보자
sudo du -sh /var/lib/*

결국 도커였다.
도커 사용량 확인
docker system df

어 그런데 왜 27 기가 밖에 안되는걸까
docker system df는 전부를 보여주지 않는다!
도커가 추적하고 있는 이미지/컨테이너/볼륨/빌드 캐시만 보여준다
숨은 용량을 찾아보자
오래된 컨테이너 로그
도커 컨테이너의 로그파일(container-id-json.log) 이 엄청나게 커져있을 수 있다.
sudo find /var/lib/docker/containers/ -type f -name "*.log" -exec du -h {} + | sort -hr | head -n 10
역시나 31기가나 된다

도커 오버레이 파일 시스템
이미지/컨테이너 레이어 저장소이다.
이미 삭제한 컨테이너나 이미지의 레이어가 제대로 정리되지 않은 경우 , 여기에 찌꺼기가 남는다
sudo du -sh /var/lib/docker/overlay2

해결책
1) 로그파일만 삭제
sudo truncate -s 0 /var/lib/docker/containers/f8ee65자기로그파일-json.log
위에서 검색했던 가장 큰 용량의 로그파일 경로로 잘 적어줍니다.
2) Docker 데몬의 로그 정책 변경(/etc/docker/daemon.json)
{
"log-driver": "json-file",
"log-opts": {
"max-size": "10m",
"max-file": "3"
}
}
적용 후
sudo systemctl restart docker
확인
docker info | grep "Logging Driver"

3) docker images
docker images

핵심원인 발견
CICD 하면서 이전 빌드 잔재가 개많이 있었따.
당장삭제
docker image prune -a -f
결과
다시 docker images 해보니 갯수가 줄어든것을 확인할수있따.

CICD 수정
주기적으로 사용안한지 24시간 넘은 미사용 이미지 삭제 하는 stage를 추가하자
stage('Cleanup Old Docker Images') {
steps {
script {
sshagent(credentials: ['ssh-credentials']) {
sh """
ssh -p ${SSH_PORT} -o StrictHostKeyChecking=no ${USER_ID}@${HOST_URL} "\
docker image prune -a -f --filter 'until=24h' && \
docker container prune -f"
"""
}
}
}
}
결과
sudo du -sh /var/lib/*


반응형
'서버&백엔드 > 🐧 Linux' 카테고리의 다른 글
| Apache Airflow 사용법, 순차실행 (1) | 2025.06.30 |
|---|---|
| Apache Airflow 설치 (0) | 2025.06.27 |
| Ubuntu | 특정사용자 sudo 비밀번호 요구 예외거는법 (0) | 2025.05.15 |
| 리눅스 우분투 설치시 필수사항 (0) | 2025.03.25 |
| 리눅스 read(r)와 execute(x) 권한 차이 (0) | 2025.02.01 |