개인 또는 기업 환경을 위한 Docker 레지스트리 설정하기
공개 레지스트리인 Docker Hub를 사용하는 것이 보안이나 네트워크 정책상 적합하지 않은 경우, 내부 네트워크에서 동작하는 프라이빗 이미지 저장소를 구성하는 것이 유리합니다. Docker는 이를 쉽게 구현할 수 있도록 registry 공식 이미지를 제공하며, 추가적으로 기업용 솔루션으로는 Harbor를 활용할 수 있습니다.
1. 공식 Registry 이미지를 이용한 프라이빗 저장소 구축
레지스트리 이미지 다운로드
Docker에서 제공하는 v2 버전의 registry 이미지를 사용하여 간단히 로컬 저장소를 실행할 수 있습니다. 최신 Docker 엔진은 v2 이상을 요구하므로 별도의 설정 없이 아래 명령어로 가져옵니다.
docker pull registry:latest
비보안 레지스트리 허용 설정
기본적으로 Docker는 HTTPS 기반의 보안 레지스트리만 허용하지만, 내부망에서 HTTP로 운영되는 프라이빗 레지스트리는 예외 처리가 필요합니다. 다음 내용을 데몬 설정 파일에 추가하세요.
sudo vi /etc/docker/daemon.json
{
"insecure-registries": ["192.168.2.200:5000"],
"registry-mirrors": ["https://6ijb8ubo.mirror.aliyuncs.com"]
}
설정 완료 후 Docker 서비스를 재시작하여 반영합니다.
sudo systemctl restart docker
레지스트리 컨테이너 실행
다음과 같이 컨테이너를 백그라운드에서 실행하고 데이터 볼륨을 지정합니다.
docker run -d \
-p 5000:5000 \
--name private-registry \
--restart=always \
-v /opt/registry/data:/var/lib/registry \
registry:latest
- -d: 백그라운드 모드 실행
- -p 5000:5000: 호스트와 컨테이너의 5000번 포트 매핑
- --restart=always: 시스템 재시작 시 자동 재실행
- -v: 영구 저장을 위해 로컬 디렉터리 마운트
이미지에 태그 부여
레지스트리에 푸시하기 전, 기존 이미지에 프라이빗 주소 기반 태그를 추가해야 합니다. 형식은 IP주소:포트/이미지명:태그입니다.
docker tag ubuntu:20.04 192.168.2.200:5000/internal-ubuntu:v1.0
이 작업은 기존 이미지에 새 이름(태그)을 연결하는 것이며, 실제 이미지 ID는 동일하게 유지됩니다.
이미지 레지스트리에 업로드
태그가 완료된 이미지를 저장소로 푸시합니다.
docker push 192.168.2.200:5000/internal-ubuntu:v1.0
성공 시, 해당 이미지는 로컬 저장소에 영구적으로 저장됩니다.
저장소 내 이미지 목록 확인
HTTP API를 통해 현재 저장된 모든 리포지토리 목록을 조회할 수 있습니다.
curl http://192.168.2.200:5000/v2/_catalog
특정 이미지의 태그 목록을 확인하려면 다음과 같이 요청합니다.
curl http://192.168.2.200:5000/v2/internal-ubuntu/tags/list
2. Harbor를 통한 기업용 프라이빗 레지스트리 운영
Harbor란?
Harbor는 CNCF에서 관리하는 오픈소스 기업용 컨테이너 이미지 레지스트리 플랫폼입니다. 단순한 이미지 저장뿐 아니라, 사용자 인증, 롤 기반 접근 제어(RBAC), 취약점 스캔, 복제 기능, UI 대시보드 등을 제공하여 대규모 조직에서 안정적으로 이미지를 관리할 수 있도록 돕습니다. Docker Registry 위에 여러 부가 기능을 계층적으로 제공하며, 주로 Kubernetes와 같은 환경과 연계되어 사용됩니다.