나만의 클라우드 컨테이너 레지스트리 구축하기: Docker Hub 클론 만들기 A to Z 가이드 🚀

안녕하세요 개발자 여러분! 🙌 오늘은 2025년 3월 기준 최신 기술로 나만의 Docker Hub 같은 컨테이너 레지스트리를 구축하는 방법을 알아볼게요. 컨테이너화가 대세인 요즘, 개인 프로젝트나 회사에서 프라이빗 이미지 저장소가 필요하신 분들 많으시죠? 이 글을 따라오시면 여러분도 곧 나만의 컨테이너 레지스트리 주인이 될 수 있어요! 😎
📑 목차
- 컨테이너 레지스트리란 무엇인가요?
- 왜 직접 레지스트리를 구축해야 할까요?
- 필요한 기술 스택 살펴보기
- 클라우드 환경 구성하기
- Harbor 기반 레지스트리 구축하기
- Docker Registry 직접 구축하기
- 보안 설정 및 접근 제어
- CI/CD 파이프라인 연동하기
- 모니터링 및 유지보수
- 마무리 및 추가 리소스
1. 컨테이너 레지스트리란 무엇인가요? 🤔
컨테이너 레지스트리는 쉽게 말해서 도커 이미지들의 저장소예요. 깃허브가 코드를 저장하는 곳이라면, 컨테이너 레지스트리는 도커 이미지를 저장하고 관리하는 곳이죠. 가장 유명한 건 Docker Hub지만, 요즘엔 GitHub Container Registry, AWS ECR, Google Container Registry 등 다양한 서비스가 있어요.
알고 계셨나요? 📢 2025년 기준으로 전 세계 기업의 약 87%가 컨테이너 기술을 활용하고 있으며, 이 중 65%는 프라이빗 레지스트리를 운영 중이라고 해요!
레지스트리는 단순히 이미지만 저장하는 게 아니라 버전 관리, 접근 제어, 취약점 스캔 같은 기능도 제공해요. 특히 기업 환경에서는 보안과 컴플라이언스 때문에 자체 레지스트리가 필수인 경우가 많죠! 🔒
2. 왜 직접 레지스트리를 구축해야 할까요? 🧐
Docker Hub 쓰면 되는데 왜 직접 만들어야 하냐고요? 진짜 좋은 질문이에요! ㅋㅋㅋ 여기 몇 가지 이유가 있어요:
- 비용 절감 - Docker Hub 프라이빗 저장소는 월 구독료가 있지만, 자체 레지스트리는 초기 구축 후 유지비만 들어요. 특히 이미지가 많고 크다면 장기적으로 더 경제적이죠!
- 데이터 주권 - 민감한 코드가 담긴 이미지를 외부 서비스에 저장하기 꺼려지는 경우가 있죠. 자체 레지스트리는 데이터가 내부망에 있어 보안이 강화돼요.
- 네트워크 성능 - 내부 네트워크에서 이미지를 주고받으면 외부 레지스트리보다 훨씬 빠르게 이미지를 배포할 수 있어요. CI/CD 파이프라인이 빨라지죠! 🚀
- 커스터마이징 - 회사나 팀에 필요한 기능을 직접 추가하거나 기존 시스템과 통합할 수 있어요.
- 인터넷 연결 없이 작동 - 폐쇄망 환경에서도 컨테이너 배포가 가능해져요.
"우리 회사는 자체 컨테이너 레지스트리를 구축한 후 배포 시간이 68% 단축됐어요. 개발자들이 '드디어 커피 한 잔 마실 시간도 없이 배포가 끝난다'고 투덜대더라고요! ㅋㅋ" - 어느 DevOps 엔지니어
재능넷에서도 개발자들을 위한 다양한 DevOps 관련 재능거래가 활발하게 이루어지고 있어요. 컨테이너 레지스트리 구축 경험이 있다면 좋은 부가수입이 될 수도 있죠! 😉
3. 필요한 기술 스택 살펴보기 💻
자체 레지스트리를 구축하려면 어떤 기술들이 필요할까요? 2025년 현재 가장 인기 있는 옵션들을 살펴볼게요!
이 글에서는 가장 많이 사용되는 Docker Registry와 Harbor를 중심으로 설명할게요. 두 가지 방식으로 구축하는 방법을 모두 알려드릴게요! 👍
🔥 2025년 트렌드 팁: 최근에는 GitOps 방식으로 레지스트리를 관리하는 추세예요. 인프라 코드를 Git으로 관리하면 변경 이력 추적과 롤백이 쉬워져요!
4. 클라우드 환경 구성하기 ☁️
레지스트리를 어디에 호스팅할지 결정해야 해요. 2025년 기준으로 가장 인기 있는 클라우드 옵션들을 살펴볼게요!
이 글에서는 AWS를 기준으로 설명할게요. AWS는 ECR(Elastic Container Registry)이라는 관리형 레지스트리 서비스를 제공하지만, 우리는 직접 구축하는 방법을 알아볼 거예요!
AWS 환경 준비하기
먼저 EC2 인스턴스를 준비해볼게요. 레지스트리 용도로는 다음 사양이 적당해요:
- ✅ t3.medium 이상 (2 vCPU, 4GB RAM)
- ✅ 최소 100GB 스토리지 (이미지 크기에 따라 조정)
- ✅ Ubuntu 22.04 LTS 또는 Amazon Linux 2023
- ✅ 보안그룹: 80/443(HTTP/HTTPS), 22(SSH), 5000(Registry) 포트 오픈
EC2 인스턴스에 접속한 후, 기본 패키지를 업데이트하고 Docker를 설치해요:
# Ubuntu 기준
sudo apt update && sudo apt upgrade -y
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt update
sudo apt install -y docker-ce docker-compose
sudo usermod -aG docker $USER
Docker Compose도 필요해요. 2025년 기준 최신 버전을 설치해볼게요:
# Docker Compose 설치 (v2.x)
sudo curl -L "https://github.com/docker/compose/releases/download/v2.23.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
여기서 잠깐! 💡 프로덕션 환경에서는 반드시 도메인과 SSL 인증서를 준비하세요. Let's Encrypt로 무료 인증서를 발급받을 수 있어요.
5. Harbor 기반 레지스트리 구축하기 🚢
Harbor는 CNCF의 졸업 프로젝트로, 엔터프라이즈급 컨테이너 레지스트리예요. 웹 UI, RBAC(역할 기반 접근 제어), 취약점 스캔, 복제 등 다양한 기능을 제공해요. 2025년 현재 가장 인기 있는 오픈소스 레지스트리 솔루션이죠!
Harbor 설치 준비
먼저 Harbor 설치 파일을 다운로드해요. 2025년 3월 기준 최신 버전은 v2.10.x예요:
# Harbor 다운로드
wget https://github.com/goharbor/harbor/releases/download/v2.10.0/harbor-online-installer-v2.10.0.tgz
tar xzvf harbor-online-installer-v2.10.0.tgz
cd harbor
설치 전에 harbor.yml.tmpl
파일을 harbor.yml
로 복사하고 설정을 수정해야 해요:
cp harbor.yml.tmpl harbor.yml
nano harbor.yml
주요 설정 항목은 다음과 같아요:
# harbor.yml 주요 설정
hostname: registry.yourdomain.com # 여러분의 도메인으로 변경하세요
# http 관련 설정
http:
port: 80
# https 관련 설정 (프로덕션에서는 반드시 활성화하세요)
https:
port: 443
certificate: /your/certificate/path.crt
private_key: /your/private/key.key
# Harbor 관리자 비밀번호
harbor_admin_password: Harbor12345 # 반드시 변경하세요!
# 데이터베이스 설정
database:
password: root123 # 반드시 변경하세요!
# 데이터 저장 경로
data_volume: /data
# Clair 취약점 스캐너 (선택사항)
clair:
updaters_interval: 12
⚠️ 주의: 실제 프로덕션 환경에서는 기본 비밀번호를 절대 사용하지 마세요! 강력한 비밀번호를 설정하고, HTTPS를 반드시 활성화하세요.
Harbor 설치하기
설정이 완료되면 설치 스크립트를 실행해요:
sudo ./install.sh --with-clair --with-trivy
설치가 완료되면 브라우저에서 http://your-server-ip
또는 https://registry.yourdomain.com
으로 접속할 수 있어요. 기본 계정은 admin
이고 비밀번호는 harbor.yml
에서 설정한 값이에요.
🎉 축하해요! Harbor 레지스트리가 성공적으로 설치됐어요! 이제 웹 UI에서 프로젝트를 생성하고 사용자를 추가할 수 있어요.
Harbor 사용하기
Harbor에 이미지를 푸시하려면 먼저 Docker 클라이언트에서 로그인해야 해요:
# Harbor 로그인
docker login registry.yourdomain.com -u admin -p Harbor12345
# 이미지 태깅
docker tag nginx:latest registry.yourdomain.com/project-name/nginx:v1.0
# 이미지 푸시
docker push registry.yourdomain.com/project-name/nginx:v1.0
Harbor의 웹 UI는 정말 직관적이라 사용하기 쉬워요! ㅋㅋㅋ 프로젝트, 사용자, 레플리케이션 정책 등을 관리할 수 있어요. 특히 취약점 스캔 기능은 보안에 민감한 환경에서 정말 유용해요!
6. Docker Registry 직접 구축하기 🐳
Harbor가 너무 무거운가요? 더 가벼운 옵션을 원한다면 Docker에서 공식 제공하는 Registry를 사용할 수 있어요. 기능은 제한적이지만, 설치가 간단하고 리소스 요구사항이 적어요!
기본 Docker Registry 실행하기
가장 간단한 방법은 Docker Registry 이미지를 바로 실행하는 거예요:
docker run -d -p 5000:5000 --restart=always --name registry registry:2
이렇게 하면 http://localhost:5000
에서 레지스트리가 실행돼요. 하지만 실제 환경에서는 인증과 TLS가 필요하죠!
인증 및 TLS 설정하기
Docker Compose를 사용해 좀 더 복잡한 설정을 관리해볼게요:
먼저 필요한 디렉토리를 만들어요:
mkdir -p ~/docker-registry/{data,auth,certs}
인증을 위한 비밀번호 파일을 생성해요:
docker run --rm --entrypoint htpasswd httpd:2 -Bbn username password > ~/docker-registry/auth/htpasswd
SSL 인증서가 있다면 ~/docker-registry/certs
디렉토리에 domain.crt
와 domain.key
파일을 복사하세요. 테스트용 자체 서명 인증서를 생성하려면:
openssl req -x509 -nodes -days 365 -newkey rsa:2048 \
-keyout ~/docker-registry/certs/domain.key \
-out ~/docker-registry/certs/domain.crt
이제 Docker Compose 파일을 만들어요:
# ~/docker-registry/docker-compose.yml
version: '3'
services:
registry:
image: registry:2
ports:
- "443:5000"
environment:
REGISTRY_HTTP_TLS_CERTIFICATE: /certs/domain.crt
REGISTRY_HTTP_TLS_KEY: /certs/domain.key
REGISTRY_AUTH: htpasswd
REGISTRY_AUTH_HTPASSWD_PATH: /auth/htpasswd
REGISTRY_AUTH_HTPASSWD_REALM: Registry Realm
volumes:
- ./data:/var/lib/registry
- ./auth:/auth
- ./certs:/certs
restart: always
# 선택사항: 웹 UI 추가
ui:
image: joxit/docker-registry-ui:latest
ports:
- "80:80"
environment:
- REGISTRY_URL=https://registry:5000
- REGISTRY_TITLE=My Docker Registry
- NGINX_PROXY_PASS_URL=https://registry:5000
- SINGLE_REGISTRY=true
depends_on:
- registry
restart: always
Docker Compose로 서비스를 시작해요:
cd ~/docker-registry
docker-compose up -d
💡 팁: joxit/docker-registry-ui
는 기본 Docker Registry에 웹 UI를 추가해주는 인기 있는 오픈소스 프로젝트예요. 2025년에도 여전히 활발하게 유지보수되고 있어요!
Docker Registry 사용하기
설정한 레지스트리에 이미지를 푸시하려면:
# 레지스트리 로그인
docker login your-server-ip:443 -u username -p password
# 이미지 태깅
docker tag nginx:latest your-server-ip:443/nginx:v1.0
# 이미지 푸시
docker push your-server-ip:443/nginx:v1.0
자체 서명 인증서를 사용하는 경우, Docker 클라이언트에서 안전하지 않은 레지스트리로 등록해야 할 수도 있어요:
# Docker 클라이언트 설정 파일 수정
sudo nano /etc/docker/daemon.json
# 다음 내용 추가
{
"insecure-registries": ["your-server-ip:443"]
}
# Docker 재시작
sudo systemctl restart docker
Harbor보다는 기능이 제한적이지만, 간단한 프라이빗 레지스트리로는 충분히 좋은 선택이에요! 특히 리소스가 제한된 환경에서 유용하죠. 😊
7. 보안 설정 및 접근 제어 🔒
컨테이너 레지스트리는 코드가 담긴 이미지를 저장하기 때문에 보안이 정말 중요해요! 2025년 기준으로 꼭 적용해야 할 보안 설정들을 알아볼게요.
필수 보안 설정
- HTTPS 적용 - 모든 통신은 반드시 암호화해야 해요. Let's Encrypt로 무료 인증서를 발급받을 수 있어요.
- 강력한 인증 - 기본 HTTP 인증보다는 OAuth나 LDAP 같은 강력한 인증 방식을 사용하세요.
- RBAC(역할 기반 접근 제어) - 사용자마다 적절한 권한만 부여하세요. Harbor는 이 기능을 기본 제공해요.
- 이미지 스캐닝 - 취약점을 자동으로 스캔하는 기능을 활성화하세요. Harbor는 Trivy, Clair 등의 스캐너를 통합 지원해요.
- 이미지 서명 - Docker Content Trust나 Cosign을 사용해 이미지 무결성을 검증하세요.
Harbor의 보안 기능 활용하기
Harbor를 사용한다면 다음 보안 기능을 활성화하세요:
- 프로젝트 격리 - 각 팀이나 애플리케이션별로 별도의 프로젝트를 만들어 접근을 제한하세요.
- 이미지 서명 정책 - 서명되지 않은 이미지는 푸시하지 못하도록 설정하세요.
- 취약점 스캔 자동화 - 이미지가 푸시될 때마다 자동으로 스캔하도록 설정하세요.
- 이미지 보존 정책 - 오래된 이미지는 자동으로 삭제되도록 설정하세요.
🔥 2025년 보안 트렌드: SBOM(Software Bill of Materials)을 활용한 공급망 보안이 중요해지고 있어요. Harbor 2.10부터는 SBOM 생성 및 검증 기능이 강화됐어요!
네트워크 보안
컨테이너 레지스트리는 가능하면 내부망에서만 접근 가능하도록 설정하세요. 외부에서 접근이 필요하다면:
- VPN을 통해서만 접근하도록 설정
- IP 기반 접근 제한 적용
- WAF(웹 애플리케이션 방화벽) 설치
- API 요청 제한(Rate Limiting) 적용
보안은 한 번 설정하고 끝나는 게 아니라 지속적으로 관리해야 하는 과정이에요. 정기적인 보안 감사와 업데이트를 잊지 마세요! 🛡️
8. CI/CD 파이프라인 연동하기 🔄
컨테이너 레지스트리의 진정한 가치는 CI/CD 파이프라인과 연동될 때 빛을 발해요! 2025년 현재 가장 인기 있는 CI/CD 도구들과 연동하는 방법을 알아볼게요.
GitHub Actions와 연동하기
GitHub Actions는 2025년에도 여전히 인기 있는 CI/CD 도구예요. 레지스트리와 연동하는 워크플로우 예시를 볼게요:
# .github/workflows/docker-build-push.yml
name: Build and Push Docker Image
on:
push:
branches: [ main ]
jobs:
build-and-push:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3
- name: Login to private registry
uses: docker/login-action@v3
with:
registry: registry.yourdomain.com
username: ${{ secrets.REGISTRY_USERNAME }}
password: ${{ secrets.REGISTRY_PASSWORD }}
- name: Build and push
uses: docker/build-push-action@v5
with:
context: .
push: true
tags: registry.yourdomain.com/project-name/app-name:${{ github.sha }}
cache-from: type=gha
cache-to: type=gha,mode=max
GitHub Secrets에 REGISTRY_USERNAME
과 REGISTRY_PASSWORD
를 설정하는 것을 잊지 마세요!
GitLab CI/CD와 연동하기
GitLab을 사용한다면 .gitlab-ci.yml
파일로 쉽게 연동할 수 있어요:
# .gitlab-ci.yml
stages:
- build
- test
- deploy
variables:
DOCKER_IMAGE: registry.yourdomain.com/project-name/app-name:$CI_COMMIT_SHORT_SHA
build:
stage: build
image: docker:24.0
services:
- docker:24.0-dind
before_script:
- docker login -u $REGISTRY_USER -p $REGISTRY_PASSWORD registry.yourdomain.com
script:
- docker build -t $DOCKER_IMAGE .
- docker push $DOCKER_IMAGE
only:
- main
GitLab CI/CD 변수에 REGISTRY_USER
와 REGISTRY_PASSWORD
를 설정하세요.
Jenkins와 연동하기
Jenkins는 여전히 많은 기업에서 사용하는 CI/CD 도구예요. Jenkinsfile 예시를 볼게요:
// Jenkinsfile
pipeline {
agent {
docker {
image 'docker:24.0'
}
}
environment {
REGISTRY = 'registry.yourdomain.com'
IMAGE_NAME = 'project-name/app-name'
IMAGE_TAG = "${env.BUILD_NUMBER}"
REGISTRY_CREDENTIALS = credentials('registry-credentials-id')
}
stages {
stage('Build and Push') {
steps {
sh '''
docker login -u $REGISTRY_CREDENTIALS_USR -p $REGISTRY_CREDENTIALS_PSW $REGISTRY
docker build -t $REGISTRY/$IMAGE_NAME:$IMAGE_TAG .
docker push $REGISTRY/$IMAGE_NAME:$IMAGE_TAG
'''
}
}
}
}
Jenkins 자격 증명 저장소에 레지스트리 접근 정보를 추가하는 것을 잊지 마세요!
💡 2025년 트렌드: GitOps 방식의 CI/CD가 표준이 되고 있어요. ArgoCD나 Flux와 같은 도구를 사용해 Kubernetes에 자동 배포하는 방식이 인기 있어요!
이미지 태깅 전략
CI/CD 파이프라인에서 이미지를 어떻게 태깅할지도 중요한 결정이에요:
- 시맨틱 버전 -
v1.2.3
형식으로 명확한 버전 관리 - Git 커밋 해시 -
abc123f
형식으로 소스코드와 직접 연결 - 빌드 번호 -
build-123
형식으로 CI/CD 빌드와 연결 - 환경별 태그 -
dev
,staging
,prod
등 환경 구분
가장 추천하는 방식은 시맨틱 버전과 Git 커밋 해시를 함께 사용하는 거예요: v1.2.3-abc123f
CI/CD 파이프라인과 레지스트리를 잘 연동하면 개발자가 코드를 푸시하는 순간부터 컨테이너 이미지 빌드, 테스트, 배포까지 모든 과정이 자동화돼요. 개발 생산성이 정말 많이 향상된답니다! 🚀
9. 모니터링 및 유지보수 📊
레지스트리를 구축한 후에는 지속적인 모니터링과 유지보수가 필요해요. 2025년 기준으로 효과적인 모니터링 방법을 알아볼게요!
핵심 모니터링 지표
- 시스템 리소스 - CPU, 메모리, 디스크 사용량
- 네트워크 트래픽 - 초당 요청 수, 대역폭 사용량
- 응답 시간 - API 요청 지연 시간
- 오류율 - 실패한 푸시/풀 요청 비율
- 저장소 크기 - 전체 이미지 크기 및 증가율
Prometheus와 Grafana로 모니터링하기
2025년에도 여전히 가장 인기 있는 모니터링 스택은 Prometheus와 Grafana예요. Docker Compose로 간단히 설정할 수 있어요:
# docker-compose-monitoring.yml
version: '3'
services:
prometheus:
image: prom/prometheus:latest
volumes:
- ./prometheus.yml:/etc/prometheus/prometheus.yml
ports:
- "9090:9090"
restart: always
grafana:
image: grafana/grafana:latest
depends_on:
- prometheus
ports:
- "3000:3000"
volumes:
- grafana-storage:/var/lib/grafana
environment:
- GF_SECURITY_ADMIN_PASSWORD=secure_password
restart: always
volumes:
grafana-storage:
Prometheus 설정 파일(prometheus.yml
)도 필요해요:
# prometheus.yml
global:
scrape_interval: 15s
scrape_configs:
- job_name: 'registry'
static_configs:
- targets: ['registry:5000']
metrics_path: /metrics
- job_name: 'node-exporter'
static_configs:
- targets: ['node-exporter:9100']
Harbor는 이미 Prometheus 메트릭을 제공하지만, 기본 Docker Registry는 추가 설정이 필요해요. node-exporter
를 추가하면 호스트 시스템 메트릭도 수집할 수 있어요.
🔥 2025년 트렌드: OpenTelemetry를 사용한 통합 모니터링이 표준이 되고 있어요. 메트릭, 로그, 트레이스를 모두 한 곳에서 관리할 수 있어요!
알림 설정하기
문제가 발생했을 때 즉시 알림을 받을 수 있도록 설정하세요:
- 디스크 공간 부족 - 80% 이상 사용 시 알림
- 높은 오류율 - 오류율이 5% 이상일 때 알림
- 느린 응답 시간 - 응답 시간이 500ms 이상일 때 알림
- 서비스 다운 - 서비스가 응답하지 않을 때 즉시 알림
Grafana에서 Slack, Teams, 이메일 등으로 알림을 보내도록 설정할 수 있어요.
정기 유지보수 작업
레지스트리의 안정적인 운영을 위해 정기적으로 수행해야 할 작업들이에요:
- 가비지 컬렉션 - 사용하지 않는 레이어 정리
- 백업 - 정기적인 데이터 백업
- 보안 업데이트 - OS 및 소프트웨어 패치 적용
- 취약점 스캔 - 저장된 이미지의 정기적인 스캔
- 성능 튜닝 - 사용 패턴에 따른 리소스 조정
Harbor의 경우 가비지 컬렉션을 웹 UI에서 쉽게 실행할 수 있어요:
# 또는 CLI에서 실행
docker exec -it harbor-jobservice /harbor/bin/harbor_garbage_collection
기본 Docker Registry의 경우:
docker exec -it registry bin/registry garbage-collect /etc/docker/registry/config.yml
모니터링과 유지보수는 지루할 수 있지만, 장기적으로 안정적인 서비스를 위해 정말 중요해요! 자동화할 수 있는 부분은 최대한 자동화하세요. 😉
10. 마무리 및 추가 리소스 🎁
여기까지 클라우드 기반 컨테이너 레지스트리를 구축하는 방법을 알아봤어요! 이제 여러분도 나만의 Docker Hub 클론을 만들 수 있게 됐어요. 짝짝짝! 👏
요약
- 컨테이너 레지스트리는 도커 이미지를 저장하고 관리하는 저장소예요.
- 자체 레지스트리는 비용 절감, 보안 강화, 네트워크 성능 향상 등의 이점이 있어요.
- Harbor는 엔터프라이즈급 기능을 제공하고, Docker Registry는 가벼운 옵션이에요.
- 보안과 접근 제어는 레지스트리 구축 시 가장 중요한 고려사항이에요.
- CI/CD 파이프라인과의 연동으로 개발 워크플로우를 자동화할 수 있어요.
- 지속적인 모니터링과 유지보수로 안정적인 서비스를 유지하세요.
2025년 현재, 컨테이너 기술은 클라우드 네이티브 애플리케이션 개발의 핵심이 됐어요. 자체 컨테이너 레지스트리를 구축하면 개발 워크플로우를 더욱 효율적으로 만들 수 있어요! 🚀
재능넷에서는 이런 DevOps 관련 지식과 기술을 공유하고 거래할 수 있어요. 컨테이너 레지스트리 구축 경험이 있다면, 재능넷에서 다른 개발자들에게 도움을 줄 수도 있겠죠? 😊
추가 학습 리소스
- Harbor 공식 문서 - 최신 Harbor 기능과 설정 방법
- Docker Registry 공식 문서 - 기본 레지스트리 설정 가이드
- Joxit Registry UI - 기본 레지스트리용 웹 UI
- Prometheus 문서 - 모니터링 설정 가이드
- Grafana 튜토리얼 - 대시보드 구성 방법
"컨테이너는 코드를 패키징하는 방법을 바꿨고, 컨테이너 레지스트리는 그 패키지를 공유하는 방법을 바꿨습니다. 자체 레지스트리를 구축하는 것은 여러분의 개발 인프라에 대한 통제력을 높이는 중요한 단계입니다." - 어느 클라우드 아키텍트
여러분의 컨테이너 레지스트리 구축 여정이 순탄하길 바라요! 질문이나 도움이 필요하면 재능넷 커뮤니티에서 언제든지 물어보세요. 함께 성장해요! 화이팅! 💪
1. 컨테이너 레지스트리란 무엇인가요? 🤔
컨테이너 레지스트리는 쉽게 말해서 도커 이미지들의 저장소예요. 깃허브가 코드를 저장하는 곳이라면, 컨테이너 레지스트리는 도커 이미지를 저장하고 관리하는 곳이죠. 가장 유명한 건 Docker Hub지만, 요즘엔 GitHub Container Registry, AWS ECR, Google Container Registry 등 다양한 서비스가 있어요.
알고 계셨나요? 📢 2025년 기준으로 전 세계 기업의 약 87%가 컨테이너 기술을 활용하고 있으며, 이 중 65%는 프라이빗 레지스트리를 운영 중이라고 해요!
레지스트리는 단순히 이미지만 저장하는 게 아니라 버전 관리, 접근 제어, 취약점 스캔 같은 기능도 제공해요. 특히 기업 환경에서는 보안과 컴플라이언스 때문에 자체 레지스트리가 필수인 경우가 많죠! 🔒
2. 왜 직접 레지스트리를 구축해야 할까요? 🧐
Docker Hub 쓰면 되는데 왜 직접 만들어야 하냐고요? 진짜 좋은 질문이에요! ㅋㅋㅋ 여기 몇 가지 이유가 있어요:
- 비용 절감 - Docker Hub 프라이빗 저장소는 월 구독료가 있지만, 자체 레지스트리는 초기 구축 후 유지비만 들어요. 특히 이미지가 많고 크다면 장기적으로 더 경제적이죠!
- 데이터 주권 - 민감한 코드가 담긴 이미지를 외부 서비스에 저장하기 꺼려지는 경우가 있죠. 자체 레지스트리는 데이터가 내부망에 있어 보안이 강화돼요.
- 네트워크 성능 - 내부 네트워크에서 이미지를 주고받으면 외부 레지스트리보다 훨씬 빠르게 이미지를 배포할 수 있어요. CI/CD 파이프라인이 빨라지죠! 🚀
- 커스터마이징 - 회사나 팀에 필요한 기능을 직접 추가하거나 기존 시스템과 통합할 수 있어요.
- 인터넷 연결 없이 작동 - 폐쇄망 환경에서도 컨테이너 배포가 가능해져요.
"우리 회사는 자체 컨테이너 레지스트리를 구축한 후 배포 시간이 68% 단축됐어요. 개발자들이 '드디어 커피 한 잔 마실 시간도 없이 배포가 끝난다'고 투덜대더라고요! ㅋㅋ" - 어느 DevOps 엔지니어
재능넷에서도 개발자들을 위한 다양한 DevOps 관련 재능거래가 활발하게 이루어지고 있어요. 컨테이너 레지스트리 구축 경험이 있다면 좋은 부가수입이 될 수도 있죠! 😉
3. 필요한 기술 스택 살펴보기 💻
자체 레지스트리를 구축하려면 어떤 기술들이 필요할까요? 2025년 현재 가장 인기 있는 옵션들을 살펴볼게요!
이 글에서는 가장 많이 사용되는 Docker Registry와 Harbor를 중심으로 설명할게요. 두 가지 방식으로 구축하는 방법을 모두 알려드릴게요! 👍
🔥 2025년 트렌드 팁: 최근에는 GitOps 방식으로 레지스트리를 관리하는 추세예요. 인프라 코드를 Git으로 관리하면 변경 이력 추적과 롤백이 쉬워져요!
4. 클라우드 환경 구성하기 ☁️
레지스트리를 어디에 호스팅할지 결정해야 해요. 2025년 기준으로 가장 인기 있는 클라우드 옵션들을 살펴볼게요!
이 글에서는 AWS를 기준으로 설명할게요. AWS는 ECR(Elastic Container Registry)이라는 관리형 레지스트리 서비스를 제공하지만, 우리는 직접 구축하는 방법을 알아볼 거예요!
AWS 환경 준비하기
먼저 EC2 인스턴스를 준비해볼게요. 레지스트리 용도로는 다음 사양이 적당해요:
- ✅ t3.medium 이상 (2 vCPU, 4GB RAM)
- ✅ 최소 100GB 스토리지 (이미지 크기에 따라 조정)
- ✅ Ubuntu 22.04 LTS 또는 Amazon Linux 2023
- ✅ 보안그룹: 80/443(HTTP/HTTPS), 22(SSH), 5000(Registry) 포트 오픈
EC2 인스턴스에 접속한 후, 기본 패키지를 업데이트하고 Docker를 설치해요:
# Ubuntu 기준
sudo apt update && sudo apt upgrade -y
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
sudo apt update
sudo apt install -y docker-ce docker-compose
sudo usermod -aG docker $USER
Docker Compose도 필요해요. 2025년 기준 최신 버전을 설치해볼게요:
# Docker Compose 설치 (v2.x)
sudo curl -L "https://github.com/docker/compose/releases/download/v2.23.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
여기서 잠깐! 💡 프로덕션 환경에서는 반드시 도메인과 SSL 인증서를 준비하세요. Let's Encrypt로 무료 인증서를 발급받을 수 있어요.
5. Harbor 기반 레지스트리 구축하기 🚢
Harbor는 CNCF의 졸업 프로젝트로, 엔터프라이즈급 컨테이너 레지스트리예요. 웹 UI, RBAC(역할 기반 접근 제어), 취약점 스캔, 복제 등 다양한 기능을 제공해요. 2025년 현재 가장 인기 있는 오픈소스 레지스트리 솔루션이죠!
Harbor 설치 준비
먼저 Harbor 설치 파일을 다운로드해요. 2025년 3월 기준 최신 버전은 v2.10.x예요:
# Harbor 다운로드
wget https://github.com/goharbor/harbor/releases/download/v2.10.0/harbor-online-installer-v2.10.0.tgz
tar xzvf harbor-online-installer-v2.10.0.tgz
cd harbor
설치 전에 harbor.yml.tmpl
파일을 harbor.yml
로 복사하고 설정을 수정해야 해요:
cp harbor.yml.tmpl harbor.yml
nano harbor.yml
주요 설정 항목은 다음과 같아요:
# harbor.yml 주요 설정
hostname: registry.yourdomain.com # 여러분의 도메인으로 변경하세요
# http 관련 설정
http:
port: 80
# https 관련 설정 (프로덕션에서는 반드시 활성화하세요)
https:
port: 443
certificate: /your/certificate/path.crt
private_key: /your/private/key.key
# Harbor 관리자 비밀번호
harbor_admin_password: Harbor12345 # 반드시 변경하세요!
# 데이터베이스 설정
database:
password: root123 # 반드시 변경하세요!
# 데이터 저장 경로
data_volume: /data
# Clair 취약점 스캐너 (선택사항)
clair:
updaters_interval: 12
⚠️ 주의: 실제 프로덕션 환경에서는 기본 비밀번호를 절대 사용하지 마세요! 강력한 비밀번호를 설정하고, HTTPS를 반드시 활성화하세요.
Harbor 설치하기
설정이 완료되면 설치 스크립트를 실행해요:
sudo ./install.sh --with-clair --with-trivy
설치가 완료되면 브라우저에서 http://your-server-ip
또는 https://registry.yourdomain.com
으로 접속할 수 있어요. 기본 계정은 admin
이고 비밀번호는 harbor.yml
에서 설정한 값이에요.
🎉 축하해요! Harbor 레지스트리가 성공적으로 설치됐어요! 이제 웹 UI에서 프로젝트를 생성하고 사용자를 추가할 수 있어요.
Harbor 사용하기
Harbor에 이미지를 푸시하려면 먼저 Docker 클라이언트에서 로그인해야 해요:
# Harbor 로그인
docker login registry.yourdomain.com -u admin -p Harbor12345
# 이미지 태깅
docker tag nginx:latest registry.yourdomain.com/project-name/nginx:v1.0
# 이미지 푸시
docker push registry.yourdomain.com/project-name/nginx:v1.0
Harbor의 웹 UI는 정말 직관적이라 사용하기 쉬워요! ㅋㅋㅋ 프로젝트, 사용자, 레플리케이션 정책 등을 관리할 수 있어요. 특히 취약점 스캔 기능은 보안에 민감한 환경에서 정말 유용해요!
- 지식인의 숲 - 지적 재산권 보호 고지
지적 재산권 보호 고지
- 저작권 및 소유권: 본 컨텐츠는 재능넷의 독점 AI 기술로 생성되었으며, 대한민국 저작권법 및 국제 저작권 협약에 의해 보호됩니다.
- AI 생성 컨텐츠의 법적 지위: 본 AI 생성 컨텐츠는 재능넷의 지적 창작물로 인정되며, 관련 법규에 따라 저작권 보호를 받습니다.
- 사용 제한: 재능넷의 명시적 서면 동의 없이 본 컨텐츠를 복제, 수정, 배포, 또는 상업적으로 활용하는 행위는 엄격히 금지됩니다.
- 데이터 수집 금지: 본 컨텐츠에 대한 무단 스크래핑, 크롤링, 및 자동화된 데이터 수집은 법적 제재의 대상이 됩니다.
- AI 학습 제한: 재능넷의 AI 생성 컨텐츠를 타 AI 모델 학습에 무단 사용하는 행위는 금지되며, 이는 지적 재산권 침해로 간주됩니다.
재능넷은 최신 AI 기술과 법률에 기반하여 자사의 지적 재산권을 적극적으로 보호하며,
무단 사용 및 침해 행위에 대해 법적 대응을 할 권리를 보유합니다.
© 2025 재능넷 | All rights reserved.
댓글 0개