1. Private Registry는 좋은데, 관리하기가 너무 까다로워요!
CLI를 엄청 좋아하는 사람도 있지만.. 저는 커맨드 외우는걸 정말 못 하는 고로.. GUI와 기록을 선호합니다.
Docker Registry도 CLI로도 관리가 가능하지만, 좀 더 편하게 하기 위해 docker-registry-browser 를 사용합니다.
이런 느낌의 GUI를 사용할 예정입니다.
2. 설치
기존 docker-registry-system에 같이 설치합니다.
기존 파일 밑에 — 추가 후 작성해 주세요.
modules/docker-registry-system/deployment.yaml
|
|
modules/docker-registry-system/service.yaml
|
|
modules/docker-registry-system/ingress.yaml
|
|
추가로 Basic Auth 설정을 진행하려면 Sealed Secrets를 통한 비밀 관리 + Traefik Basic Auth 설정 을 참고해 주세요.
modules/docker-registry-system/sealed-docker-registry-ui-secrets.yaml
sealed secrets GUI에 들어가 다음 Secret을 추가합니다. (참고 Docs Link)
- BASIC_AUTH_USER : registry 로그인에 사용하는 유저명
- BASIC_AUTH_PASSWORD : 패스워드
- DOCKER_REGISTRY_URL : https://<내가 등록한 Registry 주소>
- ENABLE_DELETE_IMAGES : true
- SECRET_KEY_BASE : openssl rand -hex 64 실행 후 나온 값
|
|
사용법은 직관적이므로, 직접 사용해 보는 것을 추천드립니다!
3. Registry GC
Docker Registry UI에서 이미지를 지우더라도 (혹은 CLI로 이미지를 지우더라도) 즉시 디스크 용량이 줄어들진 않습니다.
이는 GUI/CLI에서 이미지를 지울 때, 실제로 물리적 삭제가 일어나는 것이 아닌 해당 이미지의 Manifest만을 지우기 때문입니다.
실제 데이터 삭제는 Registry GC를 명시적으로 수행할 때 일어납니다.
더 자세한 이야기를 할 수 있지만, 오늘은 일단 사용에 초점을 맞추기에 자세한 이야기는 생략합니다.
(관련 내용이 좀 더 궁금하시면 투명 셀로판지 이론을 통한 Overlay FS 사용 방법과 유니온 마운트 라는 글을 먼저 읽은 후, Docker registry와 이미지 삭제 등의 키워드로 검색해 보시면 좋을 것 같습니다.)
- Registry GC 진행하기
!! 주의! GC 진행 도중에는 레포지토리에서 Pull/Push가 일어나지 않아야 합니다. 이를 먼저 확인하고 작업해 주세요!
kubectl get pod -n docker-registry-system
을 이용하여, Registry의 Pod을 찾아 줍니다.kubectl exec -it pod/<registry-pod-name> -n docker-registry-system -- /bin/registry garbage-collect /etc/docker/registry/config.yml
을 실행하여 GC를 실행합니다.- 이후 Longhorn Dashboard에서 Volume 선택 -> Trim Filesystem을 눌러 Actual Size를 재계산해줍니다.
4. 마치며
이를 통해 Docker UI, GC 방법에 대해 알아 보았습니다.
이제 Private Registry 및 관리 방법이 생겼으니, 마음 편하게 서버를 개발(?) 하셔서 원하시는 서버를 집어넣을 수 있습니다!
다음 시간에는 CloudNativePG를 이용하여 쿠버네티스 위에서 데이터베이스를 굴리는 방법에 대해 알아보겠습니다.