본문 바로가기
IT/오픈소스

도커 레지스트리(Docker registry) 등록 및 삭제

by 모띠 2025. 2. 9.

 

 

 

도커 이미지 파일은 docker hub로 부터 받아오는게 일반적이지만, 내가 만든 이미지를 사내에서만 사용한다든지 하고 싶다면 사설 레지스트리를 이용하면된다.

도커 레지스트리는 도커로 받아서 실행시키면된다. 도커 레지스트리는 REST API로 실행하고싶은 명령어를 호출하면된다. 해당 포스트에서는 어떻게 도커 레시스트리를 등록하는 법과 삭제하는 법에 관해 알아보겠다. 

 

도커 레지스트리 등록

예를 들어, docker-hub에 등록되어있는 메이븐 이미지를 다운받고 특정 레포지토리에 접근가능하게 id, pw 인증정보를 settings.xml에 설정해둔 이미지 파일을 도커 레지스트리에 올리고싶다고 가정한다. 해당 이미지를 다운받으면 인증정보가 다 설정되어있는 상태가 목적이다. (실제로 이렇게 보안정보를 넣어서 올리게되면 당연히 보안상 좋지않다.)

 

1. 도커 파일 생성

vi 명령어를 인식할 수 없으므로 vim도 설치해준다.

메이븐의 settings.xml에 인증정보를 적어두고 해당파일을 도커의 settings-docker.xml로 덮어씌운다.

FROM maven:3.8-jdk-8-slim  

# 필요한 패키지 업데이트 및 설치
RUN apt-get update && apt-get install -y vim && \
	rm -rf /var/lib/apt/lists/* && \
	localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8 && \
    apt-get clean
ENV LANG en_US.UTF-8
ENV LANGUAGE en_US:en
ENV LC_ALL en_US.UTF-8

# Maven 설정 파일 복사 (사설 레지스트리 인증 정보 포함)
COPY settings.xml /root/.m2/settings-docker.xml

WORKDIR /home

 

2. 등록하고자 하는 이미지 생성

위에서 만들었던 도커파일을 기반으로 이미지를 생성한다.

docker build -f Dockerfile -t $DOCKER_REGISTRY/maven-auth:1.0.0 .

 

3. 1.0.0 태그를 latest태그로 변경(안해도 무방)

docker tag $DOCKER_REGISTRY/maven-auth:1.0.0 $DOCKER_REGISTRY/maven-auth:latest

 

4. 도커 레지스트리에 이미지를 push

모든 태그를 다 push하거나 혹은 특정 태그만 push할 수 있다.

docker push --all-tags $DOCKER_REGISTRY/maven-auth
docker push $DOCKER_REGISTRY/maven-auth:1.0.0

 

5. 리포지토리 확인

maven-auth가 나온다면 정상

curl -X GET $DOCKER_REGISTRY/v2/_catalog

 

 

 


 

 

도커 레지스트리 삭제

도커 레지스트리에 잘 올려놨다면 이번에는 삭제하는 법도 알아보겠다.

도커 레지스트리에 이미지를 완전히 삭제하려면 2가지를 해야한다.

첫번째는 도커 레지스트리내 이미지의 태그 삭제이다.(하나의 이미지에 여러개의 태그가 존재할 수 있으므로) 두번째는 태그를 전부삭제했다면 이미지 자체 삭제이다.

 

1. 도커 레지스트리 이미지 태그 삭제

도커 레지스트리의 특정 이미지에는 여러개의 태그가 존재할 수 있다. 특정 태그만 삭제하는 법을 알아본다.

 

 

1. 리포지토리 조회

리포지토리를 조회하여 어떤 이미지가 있는지 확인한다.

curl -X GET $DOCKER_REGISTRY/v2/_catalog

=> {"repositories":["test","maven-auth","ubuntu"]}


2. 삭제할 리포지토리의 태그 조회

maven-auth라는 이미지에는 test, test2, focal 이라는 3개의 태그가 존재한다.

curl -X GET $DOCKER_REGISTRY/v2/maven-auth/tags/list

=> {"name":"maven-auth","tags":["test","test2","focal"]}


3. content digest(hash) 조회

v2/{삭제하고자하는 이미지}/manifests/{삭제하고자하는 태그} 로 입력하여 hash 값을 조회한다.

여기서는 focal이라는 태그를 삭제한다.

curl -v --silent -H "Accept: application/vnd.docker.distribution.manifest.v2+json" -X GET $DOCKER_REGISTRY/v2/maven-auth/manifests/focal 2>&1 | grep Docker-Content-Digest | awk '{print ($3)}'

=> sha256:c1800de11ed8ce49ed007d878b3a3094ba6b838cea85aba12428beced5463e11


4. 태그 삭제

위에서 조회한 hash값을 입력하여 해당 태그를 삭제한다.

curl -X DELETE $DOCKER_REGISTRY/v2/maven-auth/manifests/sha256:c1800de11ed8ce49ed007d878b3a3094ba6b838cea85aba12428beced5463e11

 

 
5. 확인

해당 태그가 잘 삭제되었는지 확인한다. focal태그가 사라진것이 확인가능하다.

curl -X GET $DOCKER_REGISTRY/v2/maven-auth/tags/list

=> {"name":"maven-auth","tags":["test","test2"]}


6. GC실행

도커 레지스트리에 가비지 컬렉션을 직접 실행해줘서 남은 잔여물을 제거한다.

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

 

 

 

2. 도커 레지스트리 이미지 자체 삭제

위 방식으로 모든 태그를 삭제했다고하여도 도커 이미지는 삭제되지않는다.

 

아직 maven-auth가 남아있다. 실제로 유지중인 태그를 조회하면 null로 보여준다.

curl -X GET $DOCKER_REGISTRY/v2/_catalog

=> {"repositories":["test","maven-auth","ubuntu"]}

 

도커 레지스트리내의 이미지를 삭제하기 위해서는 도커 내부로 직접 접근하여 파일을 제거해야한다.

 

1. 도커레지스트리 내부로 진입

docker exec -it $REGISTRY_CONTAINER_ID sh


2. 리포지토리로 이동

cd /var/lib/registry/docker/registry/v2/repositories


3. 특정 이미지 삭제 후 exit

rm -rf maven-auth
exit


4. GC실행

마찬가지로 가비지 컬렉션을 실행시킨다.

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

 

 

5. 이미지가 삭제되었는지 확인

curl -X GET $DOCKER_REGISTRY/v2/_catalog

=> {"repositories":["test","ubuntu"]}

'IT > 오픈소스' 카테고리의 다른 글

JFrog Artifactory(아티팩토리) 사용하기  (1) 2025.01.29
JFrog Artifactory(아티팩토리)란?  (1) 2025.01.29
JPA - 스프링 연동  (2) 2024.12.24
JPA - 다양한 쿼리방법  (0) 2024.12.23
JPA - 고급 매핑  (0) 2024.12.23

댓글