0x0102

KDT - 도커 레지스트리 구축해보기 본문

Study/System Engineer

KDT - 도커 레지스트리 구축해보기

jxx_yxjx 2024. 2. 1. 16:16

1. 프라이빗 레지스트리 구축의 필요성

기업의 경우 프라이버시를 위해 퍼블릭 레포지토리를 사용하지 않고, 프라이빗 저장소를 직접 구축하기도 한다.

도커허브 서버를 유료로 사용해도 되지만 도커허브에 공개된 registry 라는 공식 이미지로 구축하는 경우가 더 많다.

 

2. registry 이미지를 이용해 host1에 구축해보기

$ docker pull registry

$ docker images | grep registry

registry 이미지 pull

 

볼륨 설정 // 호스트의 저장폴더와 컨테이너 저장폴더 동기화

$ docker run -d \
-v /home/유저명/registry_data:/var/lib/registry \
-p 5000:5000 \
--restart=always \
--name=private-registry \
registry

호스트의 /home/유저명/registry_data 파일을 컨테이너의 /var/lib/registry 폴더와 즉시 동기화

포트 5000번으로 5000번 포트에 대한 바인딩을 꺼질 때마다 재시작하도록 하는 registry 컨테이너 띄우기

 

$ docker ps | grep private

현재 저장된 레포지토리 검색

 

$ curl -X GET http://로컬컨테이너주소:5000/v2/_catalog

저장된 요소 검색

 

$ docker image tag ~~

특정 도커허브에 올릴 때 레포지토리 명을 따로 이미지에 반영했듯, 사설 레포지토리 내부망 주소도 태그로 붙여줌

 

$ docker push 192.168.?.101:5000/myweb:1.0

해당 주소로 push

 

+ 아직 도커 엔진이 신뢰할 수 없는 저장소이므로 거절당할 수 있기에 컨테이너를 저장소로 등록 및 반영해야 함

$ sudo vi /etc/init.d/docker

의 31번 라인의 도커 옵션 설정창 확인

수정 모드로 우변에 

--insecure-registry 아이피주소:5000

입력 및 저장

 

$ sudo vi /etc/docker/daemon.json

파일 생성

 

{ "insecure-registries": ["192.168.31.101:5000"] }

해당 파일에 key값 (좌변)과 value값(우변) 작성

 

$ sudo systemctl restart docker.service

해당 내역 갱신을 위한 도커 재시작

 

$ docker info

프라이빗 레지스토리가 잘 등록되었는지 확인

 

다시 push 진행

**`$ curl -X GET http://레지스트리아이피:5000/v2/_catalog`**

이미지 목록 조회

$ curl -X GET http://레지스트리아이피:5000/v2/이미지명/tags/list

태그 목록 조회

 

3. 구축한 레지스트리를 이용해 이미지 다운 및 업로드

host1에 구축한 사설 레지스트리를 host2에서 활용해 push와 pull을 수행

시나리오

1. host2에 host1의 주소를 기반으로 해서 DOCKER_OPS 에 환경설정을 하고 갱신
2. host2에서 이미지 생성하기
3. 해당 이미지를 host1 기반 private 레지스트리에 업로드
4. 업로드된 내역을 catalog로 조회하기 
5. pull도 받아보기