반응형
이미지 목록 확인
http://IP:5000/v2/_catalog
이미지 TAG 확인 (
http://IP:5000/v2/{image_name}/tags/list
DIGEST 확인 (응답헤더의 Docker-Content-Digest 확인)
curl --location 'http://IP:5000/v2/{image-name}/manifests/{tag}' \
--header 'Accept: application/vnd.docker.distribution.manifest.v2+json'
DELETE
http://IP:5000/v2/{image-name}/manifests/{digest}
가비지 컬렉션
docker exec registry bin/registry garbage-collect /etc/docker/registry/config.yml
물리적삭제
# 1. 삭제하고 싶은 이미지의 폴더로 이동
cd /srv/data/docker/registry/v2/repositories/
# 2. 해당 이미지 이름의 폴더 삭제 (예: my-image)
sudo rm -rf <삭제할_이미지_이름>
-------------------------------------- 아래는 gemini 설명 ----------------------------------------
다소 번거롭지만 Docker Registry의 구조적 특성 때문에 이 3단계를 거쳐야 '완전한 삭제'가 이루어집니다.
왜 이렇게 복잡하게 설계되었는지, 그리고 각 단계가 하는 역할을 명확히 정리해 드릴게요.
1단계: API로 Manifest 삭제 (논리적 삭제)
- 역할: "이 이미지는 이제 유효하지 않음"이라고 마킹하는 작업입니다.
- 결과: Docker 클라이언트가 docker pull을 하려고 해도 찾을 수 없게 됩니다. 하지만 실제 데이터(레이어)는 여전히 디스크에 남아 있습니다.
2단계: Garbage Collection 실행 (물리적 용량 확보)
- 명령어: docker exec registry bin/registry garbage-collect /etc/docker/registry/config.yml
- 역할: 1단계에서 마킹된(연결이 끊긴) 실제 데이터 덩어리(blobs)를 찾아서 디스크에서 삭제합니다.
- 결과: 실제 디스크 용량이 줄어듭니다. 오드로이드처럼 용량이 소중한 환경에서는 가장 중요한 단계입니다.
3단계: 폴더 삭제 (목록 정리)
- 명령어: rm -rf .../repositories/<이미지명>
- 역할: 레지스트리의 인덱스 역할을 하는 폴더 구조를 제거합니다.
- 결과: _catalog API를 호출했을 때 더 이상 이미지 이름이 나오지 않습니다.
🧐 왜 이렇게까지 해야 하나요?
Docker 이미지는 여러 이미지가 동일한 레이어(Blob)를 공유하는 구조입니다. 만약 3번 폴더를 그냥 지워버리면, 다른 이미지가 공유하고 있던 레이어까지 깨질 위험이 있습니다. 그래서 안전을 위해 [연결 끊기(API) -> 안전한 수거(GC) -> 빈 껍데기 삭제(폴더)] 순서로 진행하는 것입니다.
💡 팁: 매번 하기 귀찮다면?
이미지 관리가 잦다면 매번 수동으로 하기엔 너무 피곤합니다. 이 과정을 자동화해주는 오픈소스 UI를 설치하는 것을 추천합니다.
- 추천 도구: joxit/docker-registry-ui
- 특징: 웹 화면에서 버튼 클릭 한 번으로 삭제가 가능하고, GC 설정도 편리합니다.
반응형
'IT' 카테고리의 다른 글
| 삭제 안되는 파티션 삭제 방법 (diskpart 이용) (0) | 2026.02.11 |
|---|---|
| 로그파일에서 일시를 UTC->KST 로 변환 하여 표시 하는 방법. (0) | 2024.09.24 |
| Intellij를 터미널 창에서 실행하기 (맥OS) (0) | 2024.03.20 |
| socket.io 프로토콜 - 메시지 유형 및 내용 (0) | 2024.01.18 |
| Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running? (0) | 2023.10.15 |
댓글