AWS ECR(Elastic Container Registry)은 아마존에서 제공하는 완전 관리형 Docker 컨테이너 레지스트리다. Docker Hub처럼 이미지를 저장하고 관리하는 곳인데, AWS 생태계와 완벽하게 통합되어 있다는 게 가장 큰 특징이다.
Docker Hub vs ECR 비교로 이해하면 쉽다:
Docker Hub는 공공 도서관 같은 곳이다. 누구나 책(이미지)을 올릴 수 있고, 전 세계 사람들이 자유롭게 열람할 수 있다. 오픈소스 프로젝트나 공개 이미지를 공유하기 좋지만, 회사의 중요한 코드를 올리기엔 보안이 걱정된다.
ECR은 회사 내부 서고다. AWS 계정을 가진 사람만 접근할 수 있고, IAM(AWS 권한 관리 시스템)으로 누가 어떤 이미지를 볼 수 있는지 세밀하게 통제할 수 있다. 특히 AWS의 다른 서비스(ECS, EKS, Lambda 등)와 바로 연결되기 때문에 배포가 매우 빠르고 간편하다.
ECR을 선택해야 하는 경우:
로컬에서 빌드한 이미지를 ECR로 올리는 과정은 4단계로 진행된다. 각 단계를 자세히 살펴보자.
aws ecr create-repository --repository-name next15-app
ECR에 이미지를 푸시하려면 먼저 이미지를 담을 "저장소(Repository)"를 만들어야 한다. 이건 마치 GitHub에 코드를 올리기 전에 먼저 레포지토리를 만드는 것과 같은 원리다. 명령어를 실행하면 JSON 형태의 응답이 돌아온다:
{
"repository": {
"repositoryArn": "arn:aws:ecr:ap-northeast-2:123456789012:repository/next15-app",
"registryId": "123456789012",
"repositoryName": "next15-app",
"repositoryUri": "123456789012.dkr.ecr.ap-northeast-2.amazonaws.com/next15-app",
"createdAt": "2024-01-15T10:30:00.000000+09:00"
}
}
여기서 repositoryUri가 매우 중요하다. 이 주소가 바로 이미지를 푸시하고 풀(pull)할 때 사용하는 ECR 레포지토리의 전체 주소다.