컨테이너 레지스트리 모범 사례

마지막 업데이트: 2026년 2월 25일

개요

이 문서는 Docker Hub, Amazon ECR, Harbor 등 컨테이너 레지스트리를 운영할 때 적용해야 할 모범 사례를 다룹니다. 태그 전략, 보안, 비용 최적화, CI/CD 통합 패턴을 포함합니다.


태그 관리 전략

Immutable Tags 사용

프로덕션 환경에서는 반드시 immutable tags를 사용합니다:

# ❌ 문제: Mutable 태그
image: myapp:latest
# - 배포 간 이미지가 다를 수 있음
# - 롤백 시 어떤 버전인지 불명확
# - 감사 추적 불가

# ✅ 해결: Immutable 태그
image: myapp:v1.2.3
# - 항상 동일한 이미지 보장
# - 명확한 버전 추적
# - 재현 가능한 배포

ECR Immutable Tags 설정:

Semantic Versioning

버전 태그 자동화 (Git Tag 기반):

:latest 태그 금지

Kubernetes Admission Controller로 :latest 차단:

Tag Promotion Workflow

프로모션 스크립트:


이미지 네이밍 컨벤션

표준 형식

환경 접두사

Multi-arch 태그

메타데이터 태그


레지스트리 미러링 및 캐싱

spinner

containerd 레지스트리 미러 설정

ECR Pull-through Cache

Harbor Proxy Cache

외부 의존성 최소화


재해 복구

멀티 리전 복제

ECR 복제:

Harbor 복제:

백업 전략

ECR 백업 (S3 Export):

RTO/RPO 고려사항

복제 전략
RPO
RTO
비용

실시간 복제

~0

분 단위

높음

스케줄 복제 (1시간)

1시간

분 단위

중간

백업 복원

백업 주기

시간 단위

낮음

권장 구성:


비용 최적화

Lifecycle Policies

ECR:

Harbor:

이미지 크기 최적화

멀티스테이지 빌드:

Distroless 이미지:

전송 비용 절감

ECR vs 자체 호스팅 비용 비교

항목
ECR (500GB)
Harbor (EC2)

스토리지

$50/월

EBS ~$40/월

컴퓨트

포함

EC2 ~$100/월

전송 (리전 내)

무료

무료

운영

없음

인력 비용

총 비용

~$50/월

~$140/월+

결론: 500GB 미만 규모에서는 ECR이 비용 효율적. 대규모 또는 에어갭 환경에서는 Harbor 고려.


보안 체크리스트

1. 이미지 스캐닝

2. Admission Controller (서명된 이미지만 허용)

3. 최소 권한 원칙

4. 네트워크 정책

5. 보안 체크리스트


CI/CD 통합 패턴

GitHub Actions + ECR

GitLab CI + ECR

Build-Push-Scan-Deploy 파이프라인

spinner

ArgoCD 이미지 업데이트 자동화


skopeo를 활용한 이미지 관리

skopeoarrow-up-right는 컨테이너 이미지를 검사, 복사, 동기화할 수 있는 CLI 도구입니다. Docker 데몬 없이 동작하며, root 권한이 필요하지 않아 CI/CD 파이프라인과 에어갭 환경에서 특히 유용합니다.

skopeo 설치

skopeo inspect — 원격 이미지 검사

이미지를 pull하지 않고 메타데이터를 확인할 수 있습니다:

skopeo copy — 레지스트리 간 이미지 복사

이미지를 로컬에 pull하지 않고 레지스트리 간 직접 복사합니다:

skopeo sync — 대량 레지스트리 동기화

여러 이미지를 한번에 동기화합니다:

에어갭 환경 이미지 전송

skopeo는 에어갭 환경으로의 이미지 전송에 최적화되어 있습니다:

팁: docker save/load와 달리 skopeo는 Docker 데몬 없이 동작하므로, 서버에 Docker가 설치되지 않은 에어갭 환경에서도 사용할 수 있습니다.

도구 비교

기능
skopeo
docker
crane
ctr

데몬 필요

No

Yes

No

Yes (containerd)

Root 권한

No

Yes (기본)

No

Yes

원격 검사

Yes

No (pull 필요)

Yes

No

레지스트리 간 복사

Yes

pull+tag+push

Yes

No

대량 동기화

Yes (sync)

No

No

No

OCI 지원

Full

부분적

Full

Full

에어갭 전송

oci-archive

docker save

-

export

멀티 아키텍처

Yes

제한적

Yes

No

CI/CD 친화성

높음

중간

높음

낮음


요약

카테고리
권장 사항

태그

Immutable, SemVer, :latest 금지

네이밍

org/app:tag, 환경 접두사

미러링

Pull-through cache, 내부 미러

DR

멀티 리전 복제, 일간 백업

비용

Lifecycle policy, 멀티스테이지 빌드

보안

스캐닝, 서명, Admission Controller

CI/CD

GitHub Actions/GitLab CI + Trivy


참고 자료

마지막 업데이트