Private Registry
1) 개요
Docker Hub는 기본적으로 public 저장소를 제공하여 누구나 저장소 주소를 알고 있으면 접근이 가능하다. 하지만 Docker Hub에서도 1개의 private 저장소를 무료로 제공하며, 추가적인 private 저장소는 유료이다.
Docker Hub는 private registry 구축을 위해 registry
라는 이미지를 제공하며, 이를 컨테이너로 실행하여 이미지를 저장할 수 있다. 단, 기본적으로 텍스트 기반의 레지스트리 관리만 제공하기 때문에 웹 인터페이스를 통해 이미지를 검색하려면 별도의 GUI 컨테이너를 결합해야 한다.
2) Private Registry 만들기 및 이미지 저장
registry 이미지 조회
Docker Hub에서 private registry 구성을 위한 registry
이미지를 검색한다.
docker search registry
Private registry 이미지를 다운로드
검색된 registry 이미지를 로컬에 다운로드한다.
docker pull registry
다운로드된 이미지 확인
docker images | grep registry
Private registry 사용을 위한 설정 추가
이미지를 업로드할 private registry를 설정하기 위해, /etc/init.d/docker
파일을 수정하여 DOCKER\_OPTS
항목에 insecure registry 옵션을 추가한다. 이를 통해 특정 IP와 포트로 이미지를 업로드할 수 있다.
DOCKER_OPTS=--insecure-registry 컴퓨터의IP:포트번호
sudo nano /etc/init.d/docker
DOCKER_OPTS=--insecure-registry 10.0.2.15:5000
여기서 10.0.2.15
는 private registry가 실행되는 IP이며, 5000
은 사용될 포트 번호이다. 포트 번호는 임의로 지정할 수 있다.
Docker 서비스 재시작
설정이 적용되도록 Docker를 재시작한다.
sudo service docker restart
Registry 컨테이너 실행
Private registry를 컨테이너로 실행한다.
docker run --name local-registry -d -p 5000:5000 registry
이 명령을 실행하면 registry 이미지를 기반으로 private registry 컨테이너가 실행된다. 이제 이 컨테이너를 통해 Docker 이미지를 로컬에서 관리할 수 있다.
/etc/docker/daemon.json
파일 수정
- Private registry를 사용할 때 보안 경고를 피하기 위해 /etc/docker/daemon.json 파일에 insecure registry 설정을 추가한다.
sudo nano /etc/docker/daemon.json
{
"insecure-registries": ["10.0.2.15:5000"]
}
Docker 재시작
설정 변경 후 다시 Docker를 재시작하여 변경 사항을 적용한다.
sudo service docker restart
Docker 정보 확인
Private registry에 저장된 이미지를 확인하는 명령어를 curl
을 이용해 실행한다.
docker info
Private registry 이미지 목록 확인
curl -XGET localhost:5000/v2/_catalog
이 명령을 통해 registry에 저장된 이미지 목록을 확인할 수 있다.
이미지 다운로드 및 태깅
Docker Hub에서 이미지(예: mysql)를 다운로드한 뒤, 이를 private registry에 푸시하기 위해 태그를 설정한다.
docker image pull mysql
docker tag mysql:latest localhost:5000/mysql:latest
이미지 푸시
설정한 태그의 이미지를 private registry에 푸시한다.
docker push localhost:5000/mysql
저장소 내 이미지 목록 확인
푸시된 이미지를 다시 확인한다.
curl -XGET localhost:5000/v2/_catalog
curl -XGET localhost:5000/v2/mysql/tags/list
3) Private Registry를 GUI로 관리
텍스트 방식으로만 이미지를 관리하는 것보다는, GUI 인터페이스를 추가하여 웹 브라우저를 통해 쉽게 이미지를 확인하고 관리할 수 있다. 이를 위해 hyper/docker-registry-web
이미지를 사용한다.
- GUI 이미지 다운로드: Docker Hub에서 registry GUI 이미지를 다운로드한다.
docker pull hyper/docker-registry-web
- GUI 컨테이너 실행: 다운로드한 이미지를 기반으로 컨테이너를 실행한다. 이때 registry 컨테이너와 연결하며, GUI를 통해 이미지를 확인할 수 있게 된다.
docker run -dit -p 8080:8080 --name registry-web --link local-registry -e REGISTRY_URL=http://localhost:5000/v2 -e REGISTRY_NAME=localhost:5000 hyper/docker-registry-web
이 과정을 통해 GUI 인터페이스를 사용해 registry에 저장된 이미지를 확인하고, 좀 더 직관적으로 관리할 수 있다.
4) Cloud 환경에서의 IP 설정
Private registry를 로컬 환경에서만 사용하는 경우에는 localhost
를 사용할 수 있지만, 클라우드 환경이나 UTM에서 작업할 경우에는 localhost
대신 실제 IP 주소를 사용해야 한다. 즉, 클라우드 서버나 네트워크 환경에서 registry를 사용할 때는 위의 설정에서 localhost를 IP 주소로 변경해 주면 된다.