Docker를 사용하다 보면 docker pull, docker push 명령을 자주 사용하게 됩니다.
이 명령들이 동작하는 핵심 장소가 바로 Docker Registry입니다.
Registry는 Docker Image를 저장하고 다운로드하는 저장소입니다. Git에서 GitHub를 사용하듯이 Docker에서는 Registry를 통해 이미지를 공유하고 배포합니다.
이번 글에서는 Docker Registry의 개념부터 Public Registry와 Private Registry의 차이, 이미지 업로드 및 다운로드 과정, 실무에서 자주 사용하는 Registry 서비스까지 자세히 알아보겠습니다.
Docker Registry란?
Docker Registry는 Docker Image를 저장하고 배포하는 저장소입니다.
전체 구조는 다음과 같습니다.
Developer
↓
docker build
↓
Docker Image
↓
docker push
↓
Docker Registry
↓
docker pull
↓
Production Server
개발자는 이미지를 Registry에 업로드하고, 운영 서버는 Registry에서 이미지를 내려받아 실행합니다.
Docker Registry가 필요한 이유
Registry가 없다면 이미지를 직접 파일로 복사해야 합니다.
Registry를 사용하면 다음과 같은 장점이 있습니다.
- 이미지 중앙 관리
- 손쉬운 배포
- 버전 관리
- 자동 배포(CI/CD)
- 팀 간 이미지 공유
- 빠른 서버 확장
대부분의 기업은 Registry를 중심으로 컨테이너를 운영합니다.
Public Registry란?
Public Registry는 누구나 이미지를 다운로드할 수 있는 공개 저장소입니다.
대표적인 예는 다음과 같습니다.
- Docker Hub
- GitHub Container Registry
- Quay.io
- Microsoft Container Registry
예를 들어 다음 명령을 실행하면
docker pull nginx
Docker는 Docker Hub에서 Nginx 이미지를 다운로드합니다.
Private Registry란?
Private Registry는 특정 사용자나 조직만 접근할 수 있는 비공개 저장소입니다.
주요 특징은 다음과 같습니다.
- 로그인 필요
- 권한 관리 가능
- 사내 전용 이미지 저장
- 보안 강화
- 기업 내부 네트워크 사용 가능
금융, 공공기관, 대기업에서는 대부분 Private Registry를 운영합니다.
Public Registry와 Private Registry 비교
| 항목 | Public Registry | Private Registry |
|---|---|---|
| 접근 권한 | 누구나 가능 | 승인된 사용자만 가능 |
| 비용 | 대부분 무료 | 유료 또는 자체 구축 |
| 보안 | 상대적으로 낮음 | 높음 |
| 기업 내부 이미지 | 부적합 | 적합 |
| 사용 목적 | 공개 이미지 공유 | 사내 이미지 관리 |
Docker Registry의 동작 과정
이미지를 업로드하는 과정은 다음과 같습니다.
Docker Build
↓
Docker Image 생성
↓
docker push
↓
Registry 저장
이미지를 다운로드하는 과정은 다음과 같습니다.
docker pull
↓
Registry 검색
↓
Image 다운로드
↓
Local Image 저장
Docker Login
Private Registry나 Docker Hub에 이미지를 업로드하려면 로그인해야 합니다.
docker login
실행하면 사용자 이름과 비밀번호(또는 Access Token)를 입력합니다.
로그인이 성공하면 인증 정보가 로컬에 저장됩니다.
Registry 로그인 확인
현재 로그인 상태는 다음 명령으로 확인할 수 있습니다.
cat ~/.docker/config.json
이 파일에는 인증 정보와 Registry 설정이 저장됩니다.
보안을 위해 내용을 직접 수정하는 것은 권장되지 않습니다.
Docker Push
이미지를 Registry에 업로드합니다.
예를 들어
docker push myuser/myapp:v1
과정은 다음과 같습니다.
Local Image
↓
docker push
↓
Registry Upload
↓
Complete
업로드된 이미지는 다른 서버에서 사용할 수 있습니다.
Docker Pull
Registry에서 이미지를 다운로드합니다.
docker pull myuser/myapp:v1
이미지가 존재하지 않으면 오류가 발생합니다.
다운로드 후에는 로컬 Image 목록에 추가됩니다.
Registry 검색
Docker Hub에서는 이미지를 검색할 수 있습니다.
docker search nginx
출력 예시
NAME
DESCRIPTION
STARS
OFFICIAL
공식 이미지는 OFFICIAL 표시가 있습니다.
Registry 로그아웃
로그인을 해제합니다.
docker logout
공용 PC에서는 작업 후 로그아웃하는 것이 좋습니다.
대표적인 Docker Registry 서비스
현재 많이 사용하는 Registry는 다음과 같습니다.
- Docker Hub
- GitHub Container Registry(GHCR)
- Amazon Elastic Container Registry(ECR)
- Google Artifact Registry
- Azure Container Registry(ACR)
- Harbor
- Quay.io
기업 환경에서는 Harbor를 직접 구축하는 경우도 많습니다.
Harbor란?
Harbor는 기업에서 많이 사용하는 오픈소스 Private Registry입니다.
주요 기능은 다음과 같습니다.
- 사용자 권한 관리
- 이미지 취약점 검사
- 프로젝트 관리
- 이미지 복제(Replication)
- 웹 관리 화면 제공
사내 Registry 구축 시 많이 선택됩니다.
Registry 보안
Registry를 사용할 때는 다음 사항을 지키는 것이 좋습니다.
- 최신 이미지 사용
- 불필요한 이미지 삭제
- Access Token 사용
- Private Repository 활용
- 취약점 검사 수행
- 권한 최소화 원칙 적용
이미지 자체에도 민감한 정보가 포함되지 않도록 주의해야 합니다.
실무에서 자주 사용하는 명령어
Registry 로그인
docker login
Registry 로그아웃
docker logout
이미지 업로드
docker push myuser/myapp:v1
이미지 다운로드
docker pull myuser/myapp:v1
이미지 검색
docker search nginx
현재 이미지 확인
docker images
실무 사례
예를 들어 개발팀에서 새로운 웹 애플리케이션 버전 v2.0을 배포한다고 가정해 보겠습니다.
- 개발자가 Docker Image를 빌드합니다.
docker tag명령으로mycompany/web:v2.0태그를 지정합니다.docker push를 실행하여 Private Registry에 업로드합니다.- 운영 서버에서는
docker pull mycompany/web:v2.0명령으로 최신 이미지를 다운로드합니다. - 기존 컨테이너를 중지하고 새 이미지를 기반으로 컨테이너를 실행합니다.
이 방식은 여러 서버에 동일한 이미지를 배포할 수 있어 버전 불일치 문제를 크게 줄여줍니다.
자주 묻는 질문
Docker Registry와 Docker Hub는 같은 것인가요?
아닙니다. Docker Registry는 이미지를 저장하는 저장소의 개념이며, Docker Hub는 가장 대표적인 Public Registry 서비스입니다.
모든 이미지를 Public Registry에 올려도 되나요?
권장되지 않습니다. 기업 내부 애플리케이션이나 민감한 설정이 포함된 이미지는 Private Registry를 사용하는 것이 안전합니다.
Private Registry를 직접 구축할 수 있나요?
가능합니다. Harbor나 Docker Registry 오픈소스를 이용하면 사내 전용 Registry를 구축하여 이미지와 접근 권한을 직접 관리할 수 있습니다.
마무리
Docker Registry는 컨테이너 환경에서 이미지를 저장하고 공유하는 핵심 요소입니다. Public Registry는 공개 소프트웨어를 손쉽게 사용할 수 있도록 해주며, Private Registry는 기업 환경에서 보안과 버전 관리를 강화하는 데 중요한 역할을 합니다. Registry의 개념을 이해하면 이후 Docker Hub, Dockerfile, Docker Compose, CI/CD와 같은 고급 주제도 더욱 쉽게 익힐 수 있습니다.