개인의 기록
  • 소개
  • 프로젝트
  • 글
  • 링크

© 2026 newgirok

← 글 목록

Docker Hub — 이미지를 저장하고 공유하는 레지스트리

2025년 6월 28일
DockerDocker HubRegistrydocker pushprivate repository

컨테이너 이미지를 빌드했다면 어딘가에 저장하고 팀과 공유해야 한다. Docker Hub는 Docker가 공식 운영하는 클라우드 기반 Registry로, 수백만 개의 공개 이미지가 올라와 있고 Private Repository도 제공한다. 로컬에서 빌드한 이미지를 Hub에 올리는 것만으로 어느 환경에서든 동일한 컨테이너를 실행할 수 있다.

Registry란

Registry는 컨테이너 이미지를 저장·배포하는 서버다. Docker CLI는 기본적으로 registry-1.docker.io(Docker Hub)를 바라본다.

[로컬 Docker Engine]
        |
   docker push / pull
        |
   ┌────────────────────────────────┐
   │         Docker Hub             │
   │  ┌──────────┐  ┌────────────┐ │
   │  │  Public  │  │  Private   │ │
   │  │   Repo   │  │    Repo    │ │
   │  └──────────┘  └────────────┘ │
   └────────────────────────────────┘

Registry — 이미지 레이어를 저장하고 태그별로 버전을 관리하는 원격 저장소. Docker Hub 외에 AWS ECR, GCR, GHCR 등이 있다.

Public vs Private Repository

구분PublicPrivate
열람 권한누구나 pull 가능인증된 사용자만
무료 플랜무제한1개
주요 용도오픈소스 배포사내 서비스 이미지

무료 계정은 Private Repository를 1개만 만들 수 있다. 팀 규모가 커지면 AWS ECR 또는 유료 플랜 전환을 검토해야 한다.

로그인 및 이미지 Push

# Docker Hub 로그인
docker login

# 이미지 빌드 — 이름은 반드시 <username>/<repo>:<tag> 형식
docker build -t myuser/myapp:1.0.0 .

# Hub에 업로드
docker push myuser/myapp:1.0.0

# latest 태그도 함께 올리는 경우
docker tag myuser/myapp:1.0.0 myuser/myapp:latest
docker push myuser/myapp:latest

docker login은 자격증명을 ~/.docker/config.json에 저장한다. CI 환경에서는 DOCKER_USERNAME / DOCKER_PASSWORD 환경 변수와 docker login -u $DOCKER_USERNAME --password-stdin을 조합해 사용한다.

태그 관리 전략

태그는 이미지의 버전을 식별하는 문자열이다. latest만 사용하면 어떤 코드가 배포됐는지 추적이 어렵다.

myuser/myapp:1.0.0      ← SemVer — 프로덕션 릴리스
myuser/myapp:1.0.0-rc1  ← 릴리스 후보
myuser/myapp:sha-a3f9c2 ← Git 커밋 해시 — CI에서 자동 생성
myuser/myapp:latest     ← 최신 stable 가리키는 포인터

CI/CD 파이프라인에서는 Git 커밋 해시를 태그로 사용하면 배포 이미지와 소스코드를 1:1로 연결할 수 있다.

Docker Hub vs AWS ECR

항목Docker HubAWS ECR
인증Docker 계정IAM Role / Access Key
네트워크 비용인터넷 경유VPC 내부 전송 무료
스캔 기능기본 취약점 스캔ECR Enhanced Scanning
적합한 상황오픈소스·소규모 팀AWS 인프라 중심 팀

AWS ECS/EKS를 사용한다면 ECR이 IAM 통합과 네트워크 비용 면에서 유리하다. Docker Hub는 퍼블릭 이미지 배포나 빠른 프로토타이핑에 적합하다.

Pull

# 공개 이미지 pull (로그인 불필요)
docker pull nginx:1.25

# Private 이미지 pull (로그인 필요)
docker pull myuser/myapp:1.0.0

docker pull을 생략해도 docker run 시 이미지가 없으면 자동으로 Hub에서 내려받는다.

← 이전 글.dockerignore — 빌드 컨텍스트에서 제외할 파일 지정
다음 글 →Docker Volume — 컨테이너 데이터를 영구 저장하는 방법