[docker] 도커 사설 저장소 생성 및 UI 설정 (docker registry, web ui) on rocky9
도커 사설 저장소 (레지스트리) 생성 및 UI
도커는 docker hub를 자유롭게 많이들 쓴다.
하지만, 기업이나 개인이 공유하고 싶지않는 경우 사설로 저장소를 만들어서 사용할 수 있다.
도커 사설 저장소 구성에는 다양한 서버 (protus, harbor...)들이 존재하는데,
이번 글에서는 가장 간단하게 할 수 있는 docker container형태로 registry를 이용해볼까 한다.
물론 레지스트리 뿐만 아니라 UI도 함께 설정 해보자. (UI없으면 관리 힘드므로..)
- 도커 설치
Rocky9에 도커를 설치하여, 실제 podman으로 사용함 (docker 명령어 완전호환으로 이질감 없음)
dnf install podman-docker
dnf install podman
- Docker Registry 설치 (컨테이너 형태)
Access-Control-Allow-Origin 설정을 해야 joxit/docker-registry-ui 설정이 가능하다..
# config.yml 파일 작성
echo "version: 0.1
log:
fields:
service: registry
storage:
delete:
enabled: true
cache:
blobdescriptor: inmemory
filesystem:
rootdirectory: /var/lib/registry
http:
addr: :5000
headers:
X-Content-Type-Options: [nosniff]
# Access-Control-Allow-Origin: ['http://127.0.0.1:8000']
Access-Control-Allow-Origin: ['*']
Access-Control-Allow-Methods: ['HEAD', 'GET', 'OPTIONS', 'DELETE']
Access-Control-Allow-Headers: ['Authorization', 'Accept', 'Cache-Control']
Access-Control-Max-Age: [1728000]
Access-Control-Allow-Credentials: [true]
Access-Control-Expose-Headers: ['Docker-Content-Digest']" > config.yml
# Docker 컨테이너 실행
docker run -d -p 5000:5000 --name registry --restart=always -v `pwd`/config.yml:/etc/docker/registry/config.yml registry
- 레포지터리 cli 확인 방법
# 레포지터리
curl -X GET http://<registry_host:port>/v2/_catalog
curl -s GET http://<registry_host:port>/v2/<repo_name>/tags/list
curl -sI GET http://<registry_host:port>/v2/<repo_name>/manifests/<tag_name>
- UI 설정
도커 레지스트리를 관리하기 위한 Web UI는 Github를 보면 다양하게 있다.
그 중 2개 정도만 소개한다.
. 방법 1 : Joxit/docker-registry-ui
https://github.com/Joxit/docker-registry-ui 를 이용한 Web UI 생성
docker run -d --name registry-ui -p 9000:80 -e REGISTRY_URL=http://<registry-ip>:5000 -e DELETE_IMAGES=true --restart=always joxit/docker-registry-ui
. 방법2 : docker-registry-frountend
[docker-registry-frontend](https://github.com/kwk/docker-registry-frontend)를 이용하여 UI 생성
여기 UI는 이상하게 registry에서 repo들이 삭제되지않는다.. (비추)
docker run \
-d \
-e ENV_DOCKER_REGISTRY_HOST=[호스트 IP] \
-e ENV_DOCKER_REGISTRY_PORT=5000 \
--name docker-registry-ui \
-p 8080:80 \
--restart=always \
konradkleine/docker-registry-frontend:v2
- 위의 설정 후 도커 push가 안될때
참고로 도커 레지스트리를 http로 하였을 경우 docker 설정에서 아래와 같이 damon에 추가해야함..!!
/etc/docker/daemon.json
{
"insecure-registries": ["<registry-ip>:<registry-port>"]
}
참고 문헌
https://pkuwwt.github.io/techniques/2020-04-04-setup-a-private-docker-registry/
https://hihellloitland.tistory.com/63
https://github.com/kwk/docker-registry-frontend/issues/203