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

© 2026 newgirok

← 글 목록

Docker Registry — 이미지를 저장하는 프라이빗 레지스트리

2025년 7월 17일
DockerRegistryAWS ECRPrivate Registrydocker tag

팀 내에서 Docker 이미지를 공유할 때 Docker Hub에 올리면 소스코드가 외부에 노출될 위험이 있다. 프라이빗 레지스트리를 사용하면 이미지 접근을 팀 내부로 제한하면서 CI/CD 파이프라인과 자연스럽게 연결할 수 있다. AWS ECR이나 Self-hosted Registry 중 환경에 맞는 방식을 선택하면 된다.

Docker Hub vs 프라이빗 레지스트리

항목Docker Hub프라이빗 레지스트리
공개 여부Public 기본완전 비공개
비용무료(제한) / 유료인프라 비용
접근 제어계정 기반IAM / 토큰
속도외부 네트워크VPC 내부
관리 주체Docker Inc.팀 직접 관리

프라이빗 레지스트리는 이미지 저장소를 직접 운영하거나 클라우드 서비스로 위임하는 방식이다.

Registry: Docker 이미지를 저장하고 버전별로 관리하는 서버. Docker Hub가 가장 대표적인 퍼블릭 레지스트리다.

이미지 흐름

[개발자 로컬]
    │  docker build
    ▼
[로컬 이미지]
    │  docker tag / docker push
    ▼
[프라이빗 레지스트리]  ◀──── 접근 제어 (IAM / 토큰)
    │  docker pull
    ▼
[프로덕션 서버 / K8s Pod]

AWS ECR 설정

AWS ECR은 IAM 권한으로 접근을 제어하는 관리형 레지스트리다. 별도 서버 없이 AWS 계정 내에서 바로 사용할 수 있다.

1. 레포지토리 생성

aws ecr create-repository \
  --repository-name my-app \
  --region ap-northeast-2

2. 로그인

aws ecr get-login-password --region ap-northeast-2 \
  | docker login --username AWS \
    --password-stdin 123456789.dkr.ecr.ap-northeast-2.amazonaws.com

3. 이미지 태그 및 푸시

docker build -t my-app .

docker tag my-app:latest \
  123456789.dkr.ecr.ap-northeast-2.amazonaws.com/my-app:latest

docker push \
  123456789.dkr.ecr.ap-northeast-2.amazonaws.com/my-app:latest

docker tag: 기존 이미지에 새 이름(레지스트리 주소 포함)을 붙이는 명령. 이미지 복사가 아니라 동일 레이어를 가리키는 별칭을 만든다.

Self-hosted Registry

AWS 의존성 없이 직접 운영하려면 Docker 공식 registry 이미지로 5분 안에 구성할 수 있다.

docker run -d \
  -p 5000:5000 \
  --name local-registry \
  -v /data/registry:/var/lib/registry \
  registry:2

이미지 push는 동일한 패턴이다.

docker tag my-app:latest localhost:5000/my-app:latest
docker push localhost:5000/my-app:latest

운영 환경에서는 TLS 인증서와 HTTP Basic Auth 또는 토큰 기반 인증을 반드시 설정해야 한다.

Self-hosted Registry: 팀이 직접 서버를 운영하는 레지스트리. 네트워크 지연이 낮고 데이터 주권을 유지할 수 있지만 운영 비용이 발생한다.

접근 제어 전략

AWS ECR은 IAM Policy로 Push/Pull 권한을 분리한다. CI 서버에는 Push 권한, 프로덕션 서버에는 Pull 권한만 부여하는 것이 원칙이다.

{
  "Effect": "Allow",
  "Action": [
    "ecr:GetDownloadUrlForLayer",
    "ecr:BatchGetImage"
  ],
  "Resource": "arn:aws:ecr:ap-northeast-2:123456789:repository/my-app"
}

Self-hosted의 경우 htpasswd로 사용자별 자격증명을 관리하거나 OAuth2 Proxy를 앞단에 두는 방식을 사용한다.

docker pull

다른 서버에서 이미지를 내려받을 때는 동일하게 로그인 후 pull한다.

docker pull \
  123456789.dkr.ecr.ap-northeast-2.amazonaws.com/my-app:latest

ECR 토큰은 12시간마다 만료되므로, K8s 환경에서는 ecr-credential-helper나 IRSA를 활용해 자동 갱신을 설정해야 한다.

← 이전 글Docker 프로덕션 배포 — 실무 배포 전략
다음 글 →Docker Compose 개요 — 다중 컨테이너를 함께 실행하는 도구 (소개)