Study/System Engineer
KDT - 도커 레지스트리 구축해보기
jxxwxx
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도 받아보기