
도커 생태계에서 도커 허브는 매우 중요한 역할을 합니다. 이 블로그 포스트에서는 도커 허브의 개념과 사용 방법, 그리고 스스로 이미지를 업로드해서 관리하는 방법에 대해 자세히 설명하겠습니다.
도커 허브란?
정의: 도커 허브는 도커 이미지의 공식 레지스트리로, 일반적으로 도커 허브 레지스트리가 구성되지 않은 경우 이곳에서 이미지를 다운로드 받습니다.
기능: 사용자가 직접 만든 이미지를 도커 허브에 업로드할 수 있으며 비공식적으로 비공개 레포지토리를 생성하여 사용할 수도 있습니다.
도커 허브의 주요 특징
- 세계 최대의 컨테이너 이미지 라이브러리: 수백만 개의 공개 이미지 제공
- 공식 이미지: Docker에서 인증한 고품질 이미지 제공
- 자동 빌드: GitHub, Bitbucket과 연동하여 자동 이미지 빌드
- 웹훅: 이미지 업데이트 시 자동 알림 기능
- 팀 협업: 조직 단위의 이미지 관리 및 접근 권한 제어
도커 레지스트리
정의: 도커 레지스트리는 이미지를 배포하는 장소를 의미합니다.
도커 허브: 도커 제작사에서 운영하며, 대부분의 오픈소스 소프트웨어는 도커 허브에 참여하여 이미지를 배포합니다. 사용자는 run 커맨드를 통해 이미지를 다운로드 받을 수 있습니다.
운영: 다양한 도커 레지스트리가 전 세계에서 운영되며, 외부에 공개되지 않은 레지스트리는 일반적으로 접근이 불가능합니다.
주요 레지스트리 서비스
| Docker Hub | Docker Inc. | 무료 공개 저장소, 제한된 비공개 저장소 |
| Amazon ECR | AWS | AWS 통합, 고성능, 보안 강화 |
| Google Container Registry | Google Cloud | GCP 통합, 자동 취약점 스캔 |
| Azure Container Registry | Microsoft Azure | Azure 통합, 지역별 복제 |
| GitHub Container Registry | GitHub | GitHub 통합, 패키지와 함께 관리 |
| Harbor | CNCF | 오픈소스, 엔터프라이즈급 기능 |
레지스트리와 리포지토리
레지스트리: 이미지를 배포하는 장소이며 회사나 부서 단위로 그룹화가 가능합니다.
리포지토리: 소프트웨어 단위로 구성되며, 도커 허브에서는 각 리포지토리에 고유한 ID가 부여됩니다. 예를 들어, 홈페이지 ver2 및 고객관리시스템 ver5 등이 있습니다.
계층 구조 예시
Registry (레지스트리)
├── Organization (조직)
│ ├── Repository 1 (리포지토리)
│ │ ├── Tag: latest
│ │ ├── Tag: v1.0
│ │ └── Tag: v1.1
│ └── Repository 2
│ ├── Tag: latest
│ └── Tag: dev
└── Personal Account (개인 계정)
└── Repository 3
├── Tag: latest
└── Tag: experimental이미지 이름과 태그
비공개 레지스트리
주소 형식은 레지스트리 주소/레포지토리명:버전입니다. 예를 들어, localhost:5000/sample:0.1와 같은 형식을 따릅니다.
도커 허브 태그
형식은 도커허브ID/레포지토리명:버전으로, 예를 들어 sampleID/sample:0.1입니다. 버전은 생략 가능하지만, 향후를 위해서 가능한 붙여두는 게 좋습니다.
태그 네이밍 컨벤션
# 기본 형식
username/repository:tag
# 실제 예시들
mycompany/webapp:latest # 최신 버전
mycompany/webapp:v1.2.3 # 시맨틱 버전
mycompany/webapp:dev # 개발 버전
mycompany/webapp:prod # 프로덕션 버전
mycompany/webapp:feature-auth # 기능별 브랜치
mycompany/webapp:20250704 # 날짜 기반이미지 태그 부여 및 복사
복제: 기존 이미지에 새로운 이름과 태그를 부여하여 복제할 수 있습니다. 복제된 이미지는 원본 이미지의 IMAGE ID는 같지만 서로 다른 이미지로 취급됩니다. 예시로는 아래와 같은 명령어가 있습니다:
# 기본 태그 명령어
docker tag httpd localhost/httpd:0.1
# 이미지 목록 확인
docker image ls출력 결과:
REPOSITORY TAG IMAGE ID CREATED SIZE
apache_ex040 latest 9f63e4e41f72 9 days ago 178MB
ollama/ollama latest 0e59655207b2 6 months ago 536MB
httpd latest 062dcbdad052 6 months ago 178MB
localhost/httpd 0.1 062dcbdad052 6 months ago 178MB
ghcr.io/open-webui/open-webui main 5a6b5ae70d1e 6 months ago 3.12GB다양한 태그 부여 예시
# 여러 태그 동시 부여
docker tag myapp:latest myregistry.com/myapp:v1.0
docker tag myapp:latest myregistry.com/myapp:stable
docker tag myapp:latest myregistry.com/myapp:production
# Docker Hub용 태그
docker tag myapp:latest username/myapp:latest
docker tag myapp:latest username/myapp:v1.0
# 조직용 태그
docker tag myapp:latest myorg/myapp:latest
docker tag myapp:latest myorg/myapp:release-candidate이미지 업로드
업로드 명령어: 레지스트리 주소와 리포지토리명, 버전을 포함하는 다양한 식별 정보를 통해 업로드할 레지스트리를 결정합니다.
# 기본 업로드 명령어
docker push sampleadress111.com/sample:0.1
# Docker Hub 업로드
docker push username/myapp:latest
# 비공개 레지스트리 업로드
docker push myregistry.com:5000/myapp:v1.0업로드 전 준비사항
# 1. Docker Hub 로그인
docker login
# 2. 비공개 레지스트리 로그인
docker login myregistry.com:5000
# 3. 이미지 태그 확인
docker images | grep myapp
# 4. 이미지 업로드
docker push username/myapp:latest
# 5. 업로드 진행 상황 확인
# Pushing 과정이 레이어별로 표시됨업로드 최적화
# 멀티 태그 동시 업로드
docker push username/myapp --all-tags
# 압축 최적화
docker image save myapp:latest | gzip > myapp.tar.gz
# 레이어 캐시 활용을 위한 Dockerfile 최적화
FROM node:18-alpine
WORKDIR /app
COPY package*.json ./ # 의존성 먼저 복사
RUN npm ci --only=production
COPY . . # 소스코드는 나중에 복사
CMD ["npm", "start"]비공개 레지스트리 생성
설치: 레지스트리용 컨테이너를 사용하여 비공식 레지스트리를 간편하게 만들 수 있습니다. 기본 포트는 5000번이지만 이미 사용 중일 경우 다른 포트를 지정할 수 있습니다.
# 기본 레지스트리 실행
docker run -d -p 5005:5000 registry실행 결과:
Unable to find image 'registry:latest' locally
latest: Pulling from library/registry
f6b431426dd5: Pull complete
0726ca172d8b: Pull complete
66b7b7187cb3: Pull complete
f14fe80572ad: Pull complete
aa909d974276: Pull complete
Digest: sha256:319881be2ee9e345d5837d15842a04268de6a139e23be42654fc7664fc6eaf52
Status: Downloaded newer image for registry:latest고급 비공개 레지스트리 설정
# 볼륨과 함께 레지스트리 실행 (데이터 영속성)
docker run -d \
-p 5000:5000 \
--name registry \
-v registry-data:/var/lib/registry \
registry:2
# SSL 인증서와 함께 보안 레지스트리
docker run -d \
-p 5000:5000 \
--name secure-registry \
-v /path/to/certs:/certs \
-e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt \
-e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
registry:2
# 인증이 포함된 레지스트리
docker run -d \
-p 5000:5000 \
--name auth-registry \
-v /path/to/auth:/auth \
-e "REGISTRY_AUTH=htpasswd" \
-e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
-e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
registry:2레지스트리 관리 명령어
# 레지스트리 API를 통한 이미지 목록 확인
curl -X GET http://localhost:5000/v2/_catalog
# 특정 이미지의 태그 목록 확인
curl -X GET http://localhost:5000/v2/myapp/tags/list
# 레지스트리 상태 확인
curl -X GET http://localhost:5000/v2/
# 이미지 삭제 (DELETE API 활성화 필요)
curl -X DELETE http://localhost:5000/v2/myapp/manifests/sha256:...도커 허브 사용법
가입: 이메일 주소만 있으면 누구나 도커 허브를 사용할 수 있습니다. 무료 플랜을 통해 먼저 사용해볼 수 있습니다.
공유 옵션: 도커 허브에 이미지를 업로드하면 전 세계 사람들과 이미지를 공유할 수 있으며, 비공개 설정도 가능합니다. push 커맨드로 리포지토리를 생성하면 자동으로 공개 설정됩니다.
접속 URL: https://hub.docker.com/
Docker Hub 계정 관리
# Docker Hub 로그인
docker login
# Username과 Password 입력
# 특정 레지스트리 로그인
docker login myregistry.com
# 로그아웃
docker logout
# 로그인 정보 확인
cat ~/.docker/config.jsonDocker Hub 요금제 (2025년 기준)
| Free | $0/월 | 1개 | 무제한 | 2시간/월 |
| Pro | $5/월 | 무제한 | 무제한 | 5시간/월 |
| Team | $25/월 | 무제한 | 5명 | 15시간/월 |
| Business | $105/월 | 무제한 | 무제한 | 60시간/월 |
실무 활용 예시
# 1. 개발 환경 이미지 생성
docker build -t mycompany/webapp:dev .
# 2. 테스트 후 프로덕션 태그 추가
docker tag mycompany/webapp:dev mycompany/webapp:v1.0
docker tag mycompany/webapp:dev mycompany/webapp:latest
# 3. Docker Hub에 업로드
docker push mycompany/webapp:v1.0
docker push mycompany/webapp:latest
# 4. 다른 환경에서 배포
docker pull mycompany/webapp:v1.0
docker run -d -p 80:3000 mycompany/webapp:v1.0
# 5. 자동 빌드 설정 (GitHub 연동)
# Docker Hub 웹사이트에서 GitHub 저장소 연결
# Dockerfile이 있는 저장소의 변경사항 자동 감지하여 빌드결론
도커 허브는 도커 이미지를 관리하고 배포하는 데 매우 유용한 도구입니다. 간단한 명령어로 이미지를 등록하고 관리할 수 있으며, 이를 통해 다양한 개발 및 배포 환경에서 효율성을 높일 수 있습니다.
핵심 포인트:
- Docker Hub를 활용한 중앙집중식 이미지 관리
- 태그 전략을 통한 체계적인 버전 관리
- 비공개 레지스트리 구축으로 보안 강화
- 자동 빌드와 CI/CD 파이프라인 통합
- 팀 협업을 위한 조직 단위 이미지 관리
Docker Hub를 마스터하면 컨테이너 기반 개발 워크플로우를 크게 개선할 수 있으며, 전 세계 개발자들과 이미지를 공유하거나 조직 내에서 안전하게 이미지를 관리할 수 있습니다.
'IT기술 > 도커 (docker)' 카테고리의 다른 글
| Docker Compose 설치와 실행 완벽 가이드: 다중 컨테이너 관리의 시작 (0) | 2025.07.16 |
|---|---|
| Docker Compose 완벽 가이드: 다중 컨테이너 시스템의 효율적 관리 (0) | 2025.07.15 |
| Docker 컨테이너 개조 완벽 가이드: 실행 중인 컨테이너 커스터마이징 방법 (14) | 2025.07.12 |
| Docker 이미지 생성과 배포 완벽 가이드: 컨테이너에서 커스텀 이미지 만들기 (4) | 2025.07.11 |
| Docker 볼륨과 마운트 완벽 가이드: 데이터 영속성을 위한 스토리지 관리 (4) | 2025.07.10 |