Docker 기반 개인 및 기업용 이미지 레지스트리 구축

개인 또는 기업 환경을 위한 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와 같은 환경과 연계되어 사용됩니다.

태그: docker Private Registry Harbor Container Security Image Management

5월 30일 20:22에 게시됨