MLOPS/docker

Docker Private Registry 에서 특정 이미지(레포지토리) 삭제하는 방법

개발허재 2023. 10. 26. 00:17
5a6d2b76cd56: Preparing
64afb6fa4c53: Pushing [==================================================>]  620.8MB/620.8MB
a1bb0e6134fd: Preparing
6069ed0c1062: Preparing
64afb6fa4c53: Pushing [===================================>               ]  443.2MB/620.8MB
c019ca13498b: Pushed
8965905d5c74: Pushed
3fcda9c2261a: Pushed
096b56019919: Pushed
985b105f7238: Layer already exists
120dbecf84cc: Layer already exists
5581df40912f: Layer already exists
4600b70afbdf: Layer already exists
4850788528cf: Layer already exists
957fe8e74e43: Layer already exists
c5521458088e: Layer already exists
85561410ff8a: Layer already exists
b2bac75dca88: Layer already exists
c91d7117e363: Layer already exists
e76afd493130: Layer already exists
cb4596cc1454: Layer already exists
received unexpected HTTP status: 500 Internal Server Error

기존에 구축 해 놓은 도커 레지스트리에 빌드한 도커 이미지를 Push 하려는데 위와 같이 500에러가 발생했다.

500 에러 라인 좀 위에 저 Pushing 중인 레이어들 또한 계속 retry를 반복하는 이슈가 있었다;;

 

따라서, 나는 df -h 명령어로 도커 레지스트리 서버의 디스크 사용량을 확인했다.

약 40M 밖에 남질 않았다... 더 이상 저장할 공간이 없어서 발생한 이슈였다..

 

해결

직접 레지스트리 서버에 들어가서 레포지토리를 삭제해주기로 했다.

$ docker exec -it registry sh

위 명령어로 registry container에 sh 명령어로 접속한다.

/ # cd /var/lib/registry/docker/registry/v2/repositories
/var/lib/registry/docker/registry/v2/repositories # rm -r {레포지토리명}
/var/lib/registry/docker/registry/v2/repositories exit

위 명령어로 삭제할 레포지토리를 {레포지토리명} 에 넣어서 삭제해준다

삭제가 다 끝났으면 shell을 나가준다.

docker exec -it registry  bin/registry garbage-collect  /etc/docker/registry/config.yml

위 명령을 실행하면 레지스트리 서버의 garbage-collect 명령이 실행된다.

/etc/docker/registry/config.yml 을 기반으로 가비지 수집 작업이 수행된다.

가비지 수집이 실행되고 성공하면 불필요한 이미지가 정리되고, 명령이 완료되었다는 메시지가 표시된다.