컨테이너 이미지와 레지스트리의 이해
1️⃣ + 컨테이너 이미지란 무엇인가?
컨테이너 이미지는 실행 가능한 소프트웨어를 패키징한 파일입니다.
OS, 애플리케이션, 의존성 등이 포함되어 있으며, “어디서나 동일하게 실행"될 수 있게 해줍니다.
1. 도커 이미지 구조
┌────────────┐
│ Container │
├────────────┤
│ Image │ ← 애플리케이션 + 런타임 + 의존성 + 설정 파일 등
├────────────┤
│ Layers │ ← 여러 레이어로 구성됨
└────────────┘
2. 예시
# Nginx 이미지를 받아 실행하는 예시
docker pull nginx:latest
docker run -d -p 80:80 nginx
3. 이미지와 컨테이너의 차이
항목 | 이미지 (Image) | 컨테이너 (Container) |
---|---|---|
정적 | ✅ | ❌ |
실행 여부 | ❌ | ✅ |
상태 저장 | ❌ | ✅ (볼륨 필요 시) |
2️⃣ + Docker Hub, Private Registry 비교
컨테이너 이미지를 저장하고 배포하기 위한 공간이 바로 레지스트리입니다.
1. Docker Hub
- Public 기반
- 익숙하고 간단한 사용
- 자동 빌드 및 GitHub 연동 가능
- 단점: 보안/속도/사설 요구에는 한계
2. Private Registry
- 사내망 혹은 클라우드에 자체 운영
- 접근 제어, 보안 강화
- 저장소 크기와 수명 관리 가능
- 대표적인 예시: Harbor
3. 비교 표
항목 | Docker Hub | Private Registry (Harbor 등) |
---|---|---|
접근 제어 | 기본 제공 (제한적) | 세분화된 RBAC 제공 |
속도/전송 | 글로벌 CDN | 로컬 또는 전용망 가능 |
보안 감사 | 유료 | Clair 취약점 스캐너 통합 가능 |
저장소 제어 | 제한적 | 정교한 정책 및 수명 관리 가능 |
3️⃣ + 왜 Harbor인가? (Harbor의 등장 배경과 필요성)
Harbor는 CNCF(Cloud Native Computing Foundation)에서 관리하는 오픈소스 컨테이너 이미지 레지스트리입니다.
1. 기존 Private Registry의 한계
- 보안 기능 부족
- 이미지 스캔 불가
- 접근 제어가 미흡
- 감사 로그 기능 없음
2. Harbor의 필요성
- 엔터프라이즈 환경에서 다음을 만족해야 함:
- 보안
- 감사
- 멀티테넌시
- LDAP 연동
- 이미지 검증 및 스캔
3. Harbor 주요 특징
기능 | 설명 |
---|---|
Role-Based Access Control (RBAC) | 프로젝트 기반 권한 관리 |
LDAP/AD 연동 | 조직과 통합 인증 가능 |
취약점 스캔 | Clair 또는 Trivy 연동 |
Content Signing | Notary로 이미지 서명 |
이미지 복제 | 멀티 리전 동기화 가능 |
Helm Chart 저장소 | Helm Chart도 저장 가능 |
4. Harbor 아키텍처 다이어그램
┌─────────────┐ ┌──────────────┐
│ Client │◄────►│ Reverse │
│ (Docker) │ │ Proxy │
└─────────────┘ └─────┬────────┘
│
┌────────────┬──┴────────────┬──────────────┐
│ Core │ Registry │ Chart Repo │
│ Service │ (Distribution)│ │
└────────────┴───────────────┴──────────────┘
▲ ▲ ▲
│ │ │
┌─────┴─────┐ ┌─────┴──────┐ ┌────┴───────┐
│ DB │ │ Job │ │ Scanner │
│ (PgSQL) │ │ Service │ │ (Clair) │
└───────────┘ └───────────┘ └────────────┘
4️⃣ + OCI (Open Container Initiative) 개념
OCI는 컨테이너 생태계의 표준화를 위한 오픈 이니셔티브입니다.
Docker에서 분리되어 모든 컨테이너 도구가 동일한 규격을 따르도록 설계됨.
1. OCI가 만든 표준
- Image Format: 컨테이너 이미지 구조
- Runtime Spec: 실행 환경 규격 (예: runc)
- Distribution Spec: 이미지 배포 및 레지스트리 통신 규격
2. Harbor와 OCI
Harbor는 OCI Distribution Spec을 준수합니다.
즉, Docker뿐만 아니라 Podman, CRI-O, containerd 등 다양한 컨테이너 엔진과도 호환됩니다.
3. OCI 기반 흐름
Build (Docker/Podman)
↓
Push to OCI Registry (Harbor)
↓
Store in OCI-compliant format
↓
Pull from Harbor
↓
Run using OCI runtime (runc/containerd)
마지막 수정일자