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