"컨테이너 이미지를 어디에 어떻게 저장할 것인가"는 생각보다 복잡한 문제다. Docker Hub에 올리면 되지 않느냐는 접근은 규모가 커지면 깨진다. Docker Hub의 Rate Limit(인증 없이 6시간에 100 pull, 2020년 기준)이 EKS 클러스터 수백 개 노드의 이미지 pull을 막는 사고가 실제로 있었다. npm 패키지에 숨겨진 악성 코드처럼 외부 레지스트리의 이미지에 백도어가 심어진 공급망 공격도 현실 위협이다. 멀티 리전 배포에서 매번 인터넷을 거쳐 이미지를 pull하면 레이턴시와 비용 문제가 생긴다.
ECR은 이 문제들을 AWS 생태계 안에서 해결하는 컨테이너 이미지 레지스트리다. 단순한 저장소가 아니라 보안 스캔(취약점), 수명 주기 관리(비용), 복제(가용성), 캐시(외부 의존성 격리)를 하나의 서비스로 제공한다.
ECR은 Docker Registry API v2를 구현하고 OCI(Open Container Initiative) 이미지 스펙을 따른다. OCI는 2015년 Docker와 CoreOS가 설립한 표준화 기구로, 컨테이너 런타임과 이미지 형식을 중립적인 표준으로 정의했다.
OCI 이미지의 구조를 이해하면 ECR의 동작이 명확해진다: