우와한 개발자

[Docker] Docker Registry GC(가비지컬렉션)와 인증 설정하기

by 우와한개발자

1. Docker GC(가비지 컬렉션)

1) Docker GC(Garbage Collection, 가비지 컬렉션)이란?

  • Docker GC는 도커 환경에서 더 이상 사용되지 않는 이미지, 컨테이너, 볼륨, 네트워크 등의 리소스를 정리하여 저장 공간을 확보하는 작업

 

2) Docker Host에서의 GC

  • Docker Host에서는 보통 prune 명령어로 정리
docker container prune #중지된 컨테이너 삭제

docker image prune #사용되지 않는 이미지 삭제

 

3) Registry에서의 GC

# 호스트에 registry 바이너리가 직접 설치되어 있지 않아도,
# registry 이미지를 임시 컨테이너로 실행해서
# 그 안의 registry 실행파일(bin/registry)로 GC를 수행하는 방식
docker run --rm \
-v /opt/registry_data/:/var/lib/registry \
registry:2 \
bin/registry garbage-collect /etc/docker/registry/config.yml
부분 의미
docker run --rm 임시 컨테이너를 하나 띄워서 실행 후 바로 삭제
-v /opt/registry_data/:/var/lib/registry 레지스트리 데이터가 있는 호스트 디렉터리를 컨테이너 안 /var/lib/registry에 연결
registry:2 registry 이미지를 사용
bin/registry garbage-collect 컨테이너 안에 들어있는 registry 실행파일로 GC 수행
/etc/docker/registry/config.yml GC가 참고할 레지스트리 설정 파일

 

⚠️특정 레이어를 만든 사용자가 삭제하면 어떻게 될까?
- Docker Registry에서 레이어는 사용자 기준이 아니라 참조(reference) 기준으로 관리됨.
- 해당 레이어를 만든 사용자가 삭제하더라도(심지어 GC로 삭제해도) 다른 이미지가 해당 레이어를 참조하고 있으면registry의 blob storage에 계속 저장됨.
- 어떤 manifest에서도 참조되지 않는 레이어는 registry garbage collection(GC) 실행 시 실제로 삭제됨.

 

4. Registry 인증 기능

  • Docker Registry는 기본적으로 인증 없이도 사용할 수 있지만,보안을 위해 사용자 인증 기능을 추가하여 Private Registry로 운영가능
  • apache2-utils 라이브러리의 htpasswd 명령어 사용하여 사용자 계정(ID / Password)을 생성하고 관리

 

1) apache2-utils 설치

sudo apt install apache2-utils

 

2) 사용자 계정 생성

htpasswd -Bc auth/htpasswd user1

## 실행후 비밀번호 입력
New password:
Re-type new password:

## 실행 결과 - 사용자명:bcrypt로 암호화된 비밀번호
user1:$2y$05$XXXXXXXXXXXXXXXXXXXXXXXXXXXX
옵션 의미
-B bcrypt 방식으로 비밀번호 암호화
-c 새로운 파일 생성
auth/htpasswd 사용자 인증 정보 저장 파일
user1 생성할 사용자 ID

 

3) 인증 기능을 포함한 Registry 컨테이너 실행

docker run-d-p5000:5000 \
-v $(pwd)/auth:/auth \
-e REGISTRY_AUTH=htpasswd \
-e REGISTRY_AUTH_HTPASSWD_REALM="Registry Realm" \
-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
registry:2
설정 의미
-p 5000:5000 Registry 포트
-v $(pwd)/auth:/auth 인증 파일 디렉터리 마운트
REGISTRY_AUTH 인증 방식 지정
htpasswd htpasswd 기반 인증 사용
REGISTRY_AUTH_HTPASSWD_REALM 인증 영역 이름
REGISTRY_AUTH_HTPASSWD_PATH 사용자 계정 파일 위치

 

4) 인증 Registry 사용 방법

docker login localhost:5000 # docker login 레지스트리서버

# 입력
Username: user1
Password: ********

docker pull localhost:5000/myimage

블로그의 정보

우와한개발자 님의 블로그

우와한개발자

활동하기