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

© 2026 newgirok

← 글 목록

ECR — Docker 이미지 저장소

2026년 3월 14일
AWSECRDocker컨테이너

ECR(Elastic Container Registry)은 Docker 컨테이너 이미지를 저장하고 관리하는 AWS의 완전 관리형 이미지 레지스트리 서비스입니다. Docker Hub와 같은 역할을 하지만, AWS 환경에 통합되어 있어 IAM 기반 접근 제어, 암호화, ECS/EKS와의 자연스러운 연동이 가능합니다.

ECR을 사용하면 이미지를 퍼블릭 인터넷의 Docker Hub에 올리지 않고 AWS 내부에서만 관리할 수 있어 보안이 강화됩니다. ECS와 Fargate에서 이미지를 pull할 때 AWS 내부 네트워크를 사용하므로 빠르고 데이터 전송 비용도 없습니다.

Repository — 이미지 저장 단위

ECR에서 이미지는 Repository(저장소) 단위로 관리됩니다. 하나의 Repository는 하나의 애플리케이션 이미지를 여러 버전으로 저장하는 공간입니다.

ECR 계정 (123456789012.dkr.ecr.ap-northeast-2.amazonaws.com)
|
+-- Repository: my-app
|     +-- Image: my-app:1.0.0
|     +-- Image: my-app:1.1.0
|     +-- Image: my-app:latest
|
+-- Repository: my-api
      +-- Image: my-api:prod
      +-- Image: my-api:staging

Repository URI는 123456789012.dkr.ecr.ap-northeast-2.amazonaws.com/my-app처럼 AWS 계정 ID, Region, 저장소 이름으로 구성됩니다.

ECR Repository는 프라이빗(Private)과 퍼블릭(Public) 두 종류가 있습니다. 프라이빗은 IAM 권한이 있는 주체만 접근할 수 있고, 퍼블릭은 누구나 pull할 수 있어 오픈소스 이미지 배포에 사용합니다.

Image와 Tag

ECR에 저장되는 각 Docker 이미지는 Tag로 식별됩니다.

태그(Tag): Docker 이미지의 특정 버전을 식별하는 레이블. latest, 1.0.0, prod 등이 일반적으로 사용됩니다.

latest 태그는 가장 최근에 push된 이미지를 가리키는 관례적인 이름이지만, 실무에서는 명시적인 버전 태그(예: 1.2.3, 20260619-abc1234)를 함께 사용하는 것이 권장됩니다. latest만 사용하면 어떤 버전이 실행 중인지 추적하기 어렵습니다.

ECR Push/Pull 흐름

ECR에 이미지를 push하고 pull하는 전체 흐름은 다음과 같습니다.

[개발자 로컬]
    |
    | 1. docker build -t my-app:1.0.0 .
    |    (로컬에서 이미지 빌드)
    |
    | 2. aws ecr get-login-password | docker login ...
    |    (ECR에 Docker 클라이언트 인증)
    |
    | 3. docker tag my-app:1.0.0 <URI>/my-app:1.0.0
    |    (ECR URI를 포함한 태그 부여)
    |
    | 4. docker push <URI>/my-app:1.0.0
    |    (ECR에 이미지 업로드)
    v
[ECR Repository]
    |
    | 5. ECS/Fargate가 Task 실행 시 docker pull
    |    (AWS 내부 네트워크로 이미지 다운로드)
    v
[ECS Task / Fargate Container]

실제 명령어 예시

# 1. ECR 로그인 (AWS CLI 필요)
aws ecr get-login-password --region ap-northeast-2 \
  | docker login --username AWS \
    --password-stdin 123456789012.dkr.ecr.ap-northeast-2.amazonaws.com

# 2. 이미지 빌드
docker build -t my-app:1.0.0 .

# 3. ECR URI 태그 추가
docker tag my-app:1.0.0 \
  123456789012.dkr.ecr.ap-northeast-2.amazonaws.com/my-app:1.0.0

# 4. ECR에 push
docker push \
  123456789012.dkr.ecr.ap-northeast-2.amazonaws.com/my-app:1.0.0

IAM 기반 접근 제어

ECR의 이미지 push/pull 권한은 IAM Policy로 제어합니다. ECS Task나 EC2 인스턴스가 ECR에서 이미지를 pull하려면 해당 리소스에 연결된 IAM Role에 ecr:GetDownloadUrlForLayer, ecr:BatchGetImage 등의 권한이 필요합니다.

AWS 관리형 정책인 AmazonEC2ContainerRegistryReadOnly(읽기)와 AmazonEC2ContainerRegistryPowerUser(읽기/쓰기)를 사용하면 편리합니다.

이미지 수명 주기 정책

ECR은 Lifecycle Policy를 통해 오래된 이미지를 자동으로 삭제할 수 있습니다. 예를 들어 "30일 이상 된 이미지는 자동 삭제", "latest 태그 외 이미지는 10개만 유지"와 같은 규칙을 설정하면 저장소를 깔끔하게 유지하고 스토리지 비용을 절감할 수 있습니다.

← 이전 글Lambda — 서버리스 함수 실행
다음 글 →ECS — 컨테이너 오케스트레이션