[Docker] Docker Registry란? private registry 구축하기
by 우와한개발자
[Docker Registry]
1. Docker registry란?
- docker 이미지를 저장하고 관라하는 저장소 역할
- docker 이미지 재사용 및 배포 용이하도록 하는 인프라
1) Docker registry 종류
| 레지스트리 | 운영 주체 | 특징 | 요금/유형 |
| Docker Hub | Docker Inc. | 가장 많이 사용되는 공용 레지스트리, 공개 이미지와 사설 저장소 제공 | 무료 / 유료 |
| Amazon ECR | AWS | AWS 서비스(ECS, EKS 등)와 쉽게 연동되는 레지스트리 | 종량제 |
| Google Container Registry (GCR) | GCP 및 Kubernetes(GKE)와 연동 | 종량제 | |
| Azure Container Registry (ACR) | Microsoft | Azure DevOps, Azure AD 인증과 연동 | 종량제 |
| GitLab Container Registry | GitLab | GitLab CI/CD 파이프라인과 통합된 레지스트리 | 무료 / 유료 |
| Docker Distribution | Docker Inc. | 직접 구축 가능한 오픈소스 Docker 레지스트리 | 무료 (자가 호스팅) |
2) Docker registry 구성 요소
| 구성 요소 | 개념 | 역할 / 특징 |
| 레지스트리 (Registry) | 이미지를 저장하고 배포하는 서버 | docker push, docker pull 요청을 처리 |
| 리포지토리 (Repository) | 같은 애플리케이션 이미지 모음 | 여러 버전(Tag)을 함께 관리 |
| 이미지 (Image) | 컨테이너 실행에 필요한 패키지 | 여러 레이어로 구성된 실행 환경 |
| 레이어 (Layer) | 이미지 구성 단위 | Dockerfile 명령어마다 생성되는 계층 |
| 매니페스트 (Manifest) | 이미지 정보가 담긴 JSON 메타데이터 | 이미지 레이어 목록과 설정 정보 포함 |
| 태그 (Tag) | 이미지 버전 식별자 | latest, v1.0 등 |
| 스토리지 백엔드 | 이미지 파일 저장소 | 로컬 파일 시스템, S3 등 사용 가능 |
| 인증 및 권한 | 레지스트리 접근 제어 | Basic Auth, Token, OAuth 등 |
| 보안 통신 | HTTPS 기반 통신 | TLS/SSL로 이미지 전송 보호 |
| API / 카탈로그 | 레지스트리 REST API | 이미지 조회, push/pull 관리 |
| 웹훅 / 알림 | 이벤트 알림 기능 | 이미지 push 시 CI/CD 트리거 가능 |
⚠️ registry와 repository
Registry ├── repository: nginx │ ├── tag: latest │ └── tag: 1.25 │ ├── repository: myapp │ ├── tag: v1 │ └── tag: v2 │ └── repository: backend └── tag: 1.0# Docker 이미지 이름 구조 [Registry]/[Repository]:[Tag] #예시 localhost:5000/mynginx:mytag yunyeook/mynginx:latest
2. Docker Registry 생성
- Docker Registry는 오픈소스 플랫폼으로 제공되는 이미지 저장소 서비스
- Docker Hub와 같은 공개 레지스트리뿐만 아니라 개인이 직접 Private Registry를 생성하여 운영가능
1) Docker Registry Container를 이용한 Registry 생성
(1) 이미지가 저장될 디렉토리 생성
sudo mkdir -p /opt/registry_data
| 옵션 | 설명 |
| mkdir -p | 디렉토리가 없으면 생성 |
| /opt/registry_data | 레지스트리 이미지가 저장될 디렉토리 |
(2) Docker Registry 이미지 다운로드 및 실행
docker pull registry:2
docker run -d -p 5000:5000 --name my-registry \
-v /opt/registry_data:/var/lib/registry \
-e REGISTRY_STORAGE_DELETE_ENABLED=true \
registry:2
| 옵션 | 의미 |
| -d | 백그라운드 실행 |
| -p 5000:5000 | 호스트와 컨테이너 포트 연결 |
| --name my-registry | 컨테이너 이름 |
| -v /opt/registry_data:/var/lib/registry | 레지스트리 데이터 저장 디렉토리 마운트 |
| REGISTRY_STORAGE_DELETE_ENABLED=true | 레지스트리 이미지 삭제 기능 활성화 |
| registry:2 | Docker 공식 Registry 이미지 |
⚠️ REGISTRY_STORAGE_DELETE_ENABLED=true
- 기본적으로 도커 레지스트리 컨테이너는 이미지 삭제를 비활성화해 놓아서 레지스트리에 올려진 이미지를 삭제 사용하려면, REGISTRY_STORAGE_DELETE_ENABLED=true 환경설정 추가
(3) Registry 동작 확인
sudo apt install curl
curl <http://localhost:5000/v2/_catalog>
# 실행 결과 예시
{ "repositories": []}
| 항목 | 설명 |
| /v2/_catalog | 레지스트리에 저장된 이미지 목록 조회 |
| Docker Registry HTTP API v2 | 레지스트리 API 규격 |
⚠️ CLI 에서 백슬래시(\)
- 명령어를 여러 줄로 나누어 작성할 때 사용
⚠️curl?
- 리눅스 터미널에서 HTTP 요청을 보내기 위해 사용하는 네트워크 명령어 도구
- REST API 테스트, HTTP 요청 전송, 서버 상태 확인 등에 사용
2) 기존 이미지를 이름 변경 후 Registry에 Push
- Docker Registry에 이미지를 업로드하려면 이미지 이름을 레지스트리 주소 형식으로 변경(tag) 해야 함
docker tag jinkyoungheo/mynginx:latest localhost:5000/mynginx:mytag
docker push localhost:5000/mynginx:mytag
# 레지스트리에 push한 이미지 확인하기 위한 요청
curl -X GET <http://localhost:5000/v2/_catalog>
3) 로컬 이미지 삭제 후 Registry에서 Pull
docker rmi localhost:5000/mynginx:mytag
docker rmi jinkyoungheo/mynginx:latest
#Registry에서 이미지 다운로드
docker pull localhost:5000/mynginx:mytag
docker images
4) Registry에 저장된 이미지 삭제
- Docker Registry에서 이미지를 삭제하려면 이미지 Docker-Content-Diges 값을 이용해야함
(1) 이미지 Docker-Content-Digest 조회
curl-X GET-I \
-H"Accept: application/vnd.docker.distribution.manifest.v2+json" \
<http://localhost:5000/v2/mynginx/manifests/mytag>
(2) 이미지 삭제
curl-X DELETE \
<http://localhost:5000/v2/mynginx/manifests/sha256:xxxxxxxxxxxxxxxx>
| 옵션 | 설명 |
| -I | 헤더 정보만 요청 |
| -H | HTTP 헤더 전달 |
| DELETE | 이미지 삭제 요청 |
⚠️ 이미지 삭제시 카탈로그 조회
- 이미지를 삭제하더라도 curl -X GET http://localhost:5000/v2/_catalog 하면 결과가 보이긴 하지만 실제로 docker pull은 불가
- 실제 저장 공간을 정리하려면 Registry GC(Garbage Collection)실행 해야함.
'인프라' 카테고리의 다른 글
| [Docker] Docker Compose란? 명령어와 yml 작성법 정리 (0) | 2026.03.16 |
|---|---|
| [Docker] Docker Registry GC(가비지컬렉션)와 인증 설정하기 (0) | 2026.03.16 |
| [Docker] Dockerfile이란? 주요 명령어와 이미지 생성 (0) | 2026.03.14 |
| [Docker] Docker Image 다운로드 및 Container 실행, 환경변수 적용 (0) | 2026.03.14 |
| [Docker] Docker 명령어 정리 - image, container 명령어와 run 옵션 (0) | 2026.03.13 |
블로그의 정보
우와한개발자 님의 블로그
우와한개발자