본문 바로가기

기타

Docker Local Registry 구축

구축환경

Host
  VMware® Workstation 14 Player 14.0.0 build-6661328
OS

  Ubuntu 16.04.6 LTS
Application 
  - Docker : 19.03.5, build 633a0ea838
  - docker-compose : 1.11.2, build dfed245
  - git : 2.7.4

Docker Image를 활용한 Local Registry 구축

Docker Registry를 구축하는 방법에 대해 살펴보겠습니다. Private Registry를 사용할 경우 다음과 같은 장점이 있습니다.

 

  • Docker Hub등의 Public Registry의 경우 하나의 이미지만 private 등록이 가능하고 organization의 경우 비용을 지불해야 하지만 Private Registry의 경우 제한이 없다.
  • 개인 공간에서 보다 많은 권한을 부여하여 사용할 수 있다.위와 같은 사유로 인해 내부 Private Cloud 환경에 적용 가능한 Docker Private Registry를 지금부터 구현해 보도록 하겠습니다.

먼저 Docker 가 설치되어 있어야 합니다.

 

Docker Registry 설치

 

Docker registry Images 가져오기

 

docker pull registry:latest

 

docker registry image 다운로드

docker images 를 통해 registry 이미지 확인합니다.

 

docker images registry

 

docker image registry 로 정상생성 확인

Docker registry 실행

다음 docker run 명령어로 컨테이너 기동 합니다.

 

docker run --name local-registry \
-d --restart=always \
-p 5000:5000 \
-v /data/registry:/var/lib/registry/docker/registry/v2 \
registry:latest

 

keyword

description

--name

docker 컨테이너 이름

-d

daemon 으로 (백그라운드) 실행

-p

registry 실행 (local 5000번 포트 -> 이미지 5000번 포트로 바인딩)

-v

/data/registry:/var/lib/registry/docker/registry/v2

 

 

* Docker Registry Volume 관리

Container로 Registry를 구축할 경우 Registry Container가 Down 되면? Container의 휘발성으로 인해 모든 데이터가 삭제 되게 됩니다.

Container가 다운되었을 경우를 대비하여 Registry를 별도로 관리할 수 있는 Volume을 생성하고 이를 Container 내부와 공유할 수 있도록 설정하는 것이 중요합니다. 본 테스트에서는 Local Volume의 경로를 Container 내부 registry 경로인 /var/lib/registry/docker/registry/v2와 매핑하여 Container가 다운되더라도 재기동 시 Local volume에 저장된 데이터를 그대로 로딩할 수 있도록 설정하는 방법에 대해 알아보겠습니다.

-v /data/registry:/var/lib/registry/docker/registry/v2

-v 옵션 부분만 추가하면 끝!

의미는 /data/registry라는 경로의 local volume을 /var/lib/registry/docker/registry/v2라는 경로의 container volume에 마운트 한다 정도로 생각하면 됩니다.

 

docker registry 실행 및 실행확인

 

Docker Registry 활용

 

도커 이미지 생성하기

 

1) 도커 허브에서 이미지 가져오기(pull)

 

docker pull ubuntu

 

받은 도커 이미지에 태그를 설정합니다.

 

docker tag ubuntu <IP>:5000/ubuntu

 

2) Dockerfile 작성하여 이미지 생성하기(build)

 

FROM ubuntu:16.04 
MAINTAINER username <email@gmail.com> 
CMD echo 'Hello My Friend!'

 

docker build -t <IP>:5000/hello-ubuntu:1.0 .

 

여기서 주의할 점은 tag 이름에 docker registry ip:port를 작성하여야 이후 docker push 시점에 해당 repogitory를 직접 찾아간다는 점입니다. 즉 docker tag의 형식은 [DOCKER_REGISTRY_IP]:[DOCKER_REGISTRY_PORT]/[REPOGITORY]/[IMAGE_NAME]:[TAG]라고 볼 수 있습니다. 

docker images를 통해 <IP>:5000/ubuntu 이미지가 생성된 것을 확인할 수 있습니다.

 

docker images

 

04. docker image 생성 및 확인

 

도커 tag를 이용하여 도커 registry에 push

 

앞서 생성한 Private Registry에 이미지를 올려보도록 하겠습니다.

 

docker push <IP>:5000/ubuntu

 

https 에러

 

위와 같이 server gave HTTP response to HTTPS client라는

 

sudo vi /etc/docker/daemon.json

 

{ 
	"insecure-registries":["<IP>:5000"] 
}

 

daemon.json 내용

 

이후 docker를 restart 하고 registry를 다시 기동 합니다. 다시 docker push를 실행합니다.

 

systemctl restart docker

docker push <IP>:5000/ubuntu

 

08. 도커 서비스 재시작 및 도커 이미지 푸쉬

 

Docker Registry Dashboard

 

지금부터는 GUI를 지원하는 Docker Registry Web을 설치해 보도록 하겠습니다.

 

docker-registry-web을 설치하기 위한 yaml파일 작성

 

cd /opt/gopath/src/gitlab/registry/
vi config.yaml

 

config.yaml 내용

 

registry: 
  # 기존에 설치한 docker private registry 
  url: http://<IP>:5000/v2 
  # Docker registry name 
  name: <IP>:5000 
  # docker 권한 부여 
  readonly: false 
  auth: 
  enabled: false

 

09. docker-registry-web 설치할 yaml 파일 작성

docker-registry-web 실행

 

docker run -it -d \
-p 8080:8080 \
--name registry-web \
--link local-registry \
-v /opt/gopath/src/gitlab/registry/config.yaml:/conf/config.yml:ro \
hyper/docker-registry-web

 

10.  docker-registy-web 실행

Docker Private Registry GUI 접속

<레지스트리 설치 IP>:8080 접속

 

11. 도커 레지스트리 웹화면 캡쳐

참고

https://waspro.tistory.com/532

 

[Docker Registry] Docker Image를 활용한 Local Registry 구축

이번 포스팅에서는 간단하게 Docker Registry를 구축하는 방법에 대해 살펴보겠습니다. 지난 여러번의 포스팅을 통해 Nexus를 활용한 Docker Private Registry를 구축하는 과정에 대해 살펴보았는데요. 사실

waspro.tistory.com