언젠가 docker 배포를 했을 때 아래와 같은 에러가 발생하여 당황스러웠던 적이 있었다.
ERROR: for failed to register layer: Error processing tar file(exit status 1): write /app/node_modules/typescript/lib/tsserver.js: no space left on device
ERROR: failed to register layer: Error processing tar file(exit status 1): write /app/node_modules/typescript/lib/tsserver.js: no space left on device
no space left on device 즉, 용량이 부족해서 배포가 되지 않았던 점이었다. 이와 같은 용량 부족을 해결하기 위해 이글에서 어떻게 대처했는지 공유하고자 한다.
EC2 용량이 꽉 찼을 때 어떻게 하는게 좋을까?
용량이 꽉찼을 때 할 수 있는 방법은 크게 두 가지이다.
1. 용량을 늘린다.
2. 안 쓰는 파일의 용량을 정리한다.
용량을 늘리는 방법은 아주 손쉬운 선택지이지만, 돈으로 해결한다는 단점이 있다. 가장 경제적으로 해결할 수 있는 방법은 우선 안쓰는 파일에 대한 용량을 정리하는 방법이라, 이 방법을 선택하여 진행하기로 했다.
어떤 부분이 EC2 용량을 차지할까?
우선 디스크의 용량을 먼저 확인해본다.
df -Th
그중 docker가 용량을 차지하는 비중이 얼마나 있는지 확인해본다. 그전에 docker root의 디렉터리가 어딘지 먼저 확인해본다.
docker info | grep -i "docker root dir"
확인 후 아래 명령어로 docker가 차지하는 용량을 확인한다.
sudo du -h --max-depth=1 /var/lib/docker | sort -rh
어떻게 용량 정리를 할까?
docker가 용량을 잡아먹는 주범인 것을 확인했으니 이제 도커 관련하여 미사용 된 파일이나 필요 없는 파일을 지우면 된다. 이때 아래 명령어를 사용하면 간편하게 지울 수 있다.
docker system prune
이 명령어를 사용하기 전에 주의해야 할 사항은 컨테이너를 전부 다 stop 시키고 나서 네트워크를 사용하지 않는 컨테이너와 미사용 이미지, 빌드 캐시를 지우기 때문에 실제 운영하고 있는 서버에서는 사용하기 적합하지 않다는 점이다.
때문에 이미지/컨테이너/볼륨을 각각 정리하는 것이 좋다.
미사용 이미지 정리하기
docker image prune -a
컨테이너 중 중지 상태인 컨테이너만 정리하기
docker container prune
미사용 볼륨 정리하기
docker volume prune
overlay2 정리하기
나의 경우 overlay2의 용량이 가장 컸기 때문에 이 디렉터리도 정리가 필요했다. 때문에 overlay2도 정리가 필요했다. 아래 명령어로 tmp 디렉터리에 용량이 큰 파일이 있는지 확인해본다. 이때 주의할 점은 함부로 overlay2를 지우게 되면 container 실행이 되지 않을 수 있으니 백업을 하는 것이 좋다.
cd /var/lib/docker/overlay2
du -sh */diff/tmp | sort -rh
docker inspect reposiotryname // 어떤 overlay2에 연결되었는지 확인
정리 결과
이와 같은 과정을 통해 EC2 사용량을 30%대로 줄일 수 있었다.
'개발' 카테고리의 다른 글
Github Pull Request Template 세팅 (0) | 2024.01.07 |
---|---|
husky로 팀의 코드 자산에 대한 그라운드 룰 유지하기 (1) | 2023.11.30 |
오류가 난 도커 컨테이너의 내부 파일 수정하기 (0) | 2022.10.24 |
dind(docker in docker) 방식으로 gitlab-runner 등록하기 (0) | 2022.10.23 |
Airflow 로컬에서 세팅하기 (0) | 2022.10.15 |