Container/Docker

[Docker CE] Docker Private Registry 구축(Docker Registry, WEB 사용)

Nirsa 2020. 1. 20. 18:09
반응형

 

Private Registry는 개인 저장소라고도 하며 Docker hub에서 제공하는 registry 이미지를 사용 해 컨테이너에서 이미지를 로컬 저장하는 방식 입니다.  하지만 GUI 환경을 지원하지 않는데, Docker hub에 GUI로 볼 수 있는 웹이 배포되어 있습니다. 웹 설정은 가장 마지막에 다루겠습니다.

 

그리고 Pricate Registry를 다룰때엔 반드시 최소한 볼륨을 이용해 데이터를 보존 하거나, 스토리지 또는 데이터 백업등을 통하여 데이터를 관리 해야 합니다.

Private Registry는 registry 컨테이너가 삭제되면 모든 데이터가 삭제 됩니다.

 

  • 1. Docker Private Registry 환경 구축

# Docker hub 공식 저장소에서 registry 이미지 다운로드
docker image pull registry

# docker container run -d -p []:[port] --name [컨테이너명] registry
docker container run -d -p 5000:5000 --name registry registry

부팅 시 자동 시작은 --restart=always 옵션을 사용하시면 됩니다.

 

  • 2. Docker Private Registry 실행 테스트

실제로 Private Registry가 재대로 작동하는지 확인하기 위해 아래와 같이 간단한 centos+nginx 실행 코드를 Dockerfile에 넣고 빌드 해주세요. 저는 registry_nginx 라는 이미지 명으로 빌드 하였습니다.

FROM centos:7

RUN touch /etc/yum.repos.d/nginx.repo && echo -e '[nginx]\nname=nage repo\nbaseurl=http://nginx.org/packages/centos/7/$basearch/\ngpgcheck=0\nenabled=1' > /etc/yum.repos.d/nginx.repo

RUN yum -y install nginx curl

EXPOSE 80

CMD ["nginx", "-g", "daemon off;"]

 

이후 로컬호스트 5000번에서 작동하는 docker-nginx 이미지라는것을 좀 더 명확히 하기 위해 tag 설정을 하였습니다. (tag 설정 참고 : https://nirsa.tistory.com/49)

  • docker image tag [기존 이미지명] [사용자명]/[생성할 이미지명]
  • docker image tag registry_nginx localhost:5000/docker-nginx

 

이제 이미지를 private registry에 업로드하고, 기존에 있던 registry_nginx 와 localhost:5000/docker-nginx 이미지는 삭제 하였습니다.

  • docker image push [사용자명]/[이미지명]
  • docker image push localhost:5000/docker-nginx

 

이미지를 업로드 했고, 기존에 있던 이미지를 모두 삭제 하였으니 확인하기 위한 준비는 끝났습니다. 이제 다운로드를 해보면 정상적으로 이미지를 가져오고, 컨테이너 실행해도 nginx가 정상적으로 작동 합니다.

 

  • 3. Docker Private Registry 이미지 리스트확인

이미지 리스트는 아래와 같이 확인 가능 합니다.

  • curl -X GET http://localhost:5000/v2/_catalog

 

  • curl -X GET http://localhost:5000/v2/docker-nginx/tags/list

 

  • 4. Docker Private Registry 웹페이지 구축

docker hub에 해외 유저가 만든 Private Registry를 웹페이지로 구축한 이미지가 공유 되어 있습니다.

아래 코드를 입력 후 실행하면 정상적으로 될테지만, 현재 동작중인 container run를 입력하는 부분에서 동작중인 Private Registry 컨테이너 이름을 쓸 때 조심 해야 합니다. Priavate Registry 컨테이너가 깨질 수 있습니다.

docker pull hyper/docker-registry-web

# docker run -it -p 8080:8080 --name [hyper/registry-web 이미지가 사용할 컨테이너명] --list [현재 동작중인 registry 컨테이너명] -e REGISTRY_URL=http://[현재 동작중인 registry 컨테이너명]:[현재 동작중인 registry 포트]/v2 -e REGISTRY_NAME=localhost:5000 hyper/docker-registry-web
docker run -it -p 8080:8080 --name registry-web --link registry -e REGISTRY_URL=http://registry:5000/v2 -e REGISTRY_NAME=localhost:5000 hyper/docker-registry-web 

 

 

반응형