※ 일반적인 기업 내부 프로젝트용 이미지는 OS나 프레임워크 등에 대한 정보가 포함되어 있고 의존성 정보도 노출하기 때문에 프라이빗 저장소를 직접 구축하여 사용하기도 한다. → 도커허브에 공개된 registry라는 공식 이미지를 이용하여 구축하는 경우가 많다.
1. registry 구축

먼저, registry를 받아오고 확인해보면 25MB 정도로 용량이 상당히 작은 것을 볼 수 있다.
$ docker run -d \
-v /home/유저명/registry_data:/var/lin/registry \
-p 5000:5000 \
--restart=always \
--name=private-registry \
registry
-v 옵션 : 볼륨 → 호스트의 저장폴더와 컨테이너의 저장폴더를 동기화

위 명령어를 통해 호스트의 /home/jihyun/registry_data 폴더에 있는 파일을 컨테이너의 /var/lin/registry 폴더와 즉시 동기화한다.
포트 5000번으로 포트바인딩을 꺼지지 않고 재시작하도록 하는 registry 컨테이너를 띄운다.

history 명령어로 확인해보면 노출시키는 포트가 5000번이고 VOLUME 역시 이미 컨테이너측의 경로가 지정되어 있다.

위와 같이 컨테이너가 잘 띄워진 것을 확인할 수 있다.

위 명령어로 저장 요소를 검색해보면 현재 컨테이너에는 별다른 저장자료가 없기 때문에 위와 같이 출력된다.

위와 같이 보통 alias로 등록해두고 사용한다.

도커허브에 올릴 때 레포지토리명을 따로 이미지에 반영해줬듯이 위처럼 사설 레포지토리의 내부망 주소를 태그로 붙여준다.

해당 주소로 push 해보면 현재는 도커 엔진이 신뢰할 수 없는 저장소이기 때문에 위와 같은 오류가 발생한다.

위 오류를 해결하기 위해서 현재 컨테이너를 저장소로 등록해주고 반영해야 한다.
/etc/init.d/docker 파일의 DOCKER_OPTS 부분을 위와 같이 수정한 후 저장한다.

또한, 위와 같이 파일 생성 후 insecure-registries라는 key 값에 해당 IP 주소를 리스트 형식으로 등록해준다.


갱신 내역들을 반영하기 위해 도커를 재시작해준 후 docker info 명령어로 확인해보면 위와 같이 잘 등록된 것을 볼 수 있다.

이 상태로 push 해주면 위와 같이 잘 수행되는 것을 확인할 수 있다.

위와 같이 이미지 목록과 해당 이미지의 태그도 잘 조회되는 것을 확인할 수 있다.
2. 구축한 레지스트리로 이미지를 받거나 업로드하기
<시나리오>
1) host2에 host1의 주소를 기반으로 해서 DOCKER_OPS 에 환경설정을 하고 갱신
2) host2에서 이미지 생성하기
3) 해당 이미지를 host1 기반 private 레지스트리에 업로드
4) 업로드된 내역을 catalog로 조회하기
5) pull도 받아보기

먼저, 해당 주소가 안전한 저장소임을 등록하기 위해 위와 같이 환경설정을 해주어야 한다.

마찬가지로 insecure-registries라는 key 값에 해당 IP 주소(host1주소)를 리스트 형식으로 등록해준다.


도커를 재시작한 후 조회해보면 위와 같이 해당 IP가 잘 등록되어 있는 것을 확인할 수 있다.

docker pull을 해보면 위와 같이 host1 주소에 있는 이미지를 당겨서 받아오고 있는 것을 확인할 수 있다.

host2에서 hello-world 이미지를 생성했고, 해당 이미지를 host1의 레지스트리에 push 해주었다.

host1에서 catalog와 태그를 조회해보면 위와 같이 잘 추가된 것을 확인할 수 있다.

마찬가지로 pull을 해보면 사설 저장소에 있던 것을 당겨서 받아오는 것을 확인할 수 있다.
'네트워크캠퍼스 > DOCKER' 카테고리의 다른 글
아틸러리를 활용한 스트레스 테스트 (0) | 2024.02.05 |
---|---|
CLI에서 컨테이너 관리 (0) | 2024.01.31 |
도커 이미지 구조 (0) | 2024.01.30 |
Portainer를 이용해 GUI로 컨테이너 관리 (0) | 2024.01.26 |
로컬 환경에서 도커 다뤄보기 (0) | 2024.01.25 |