[ECR] Amazon ECR 리포지토리 생성 및 이미지 푸시 가이드
Prerequisite
본 가이드를 진행하기 전에 다음 항목이 준비되어 있어야 합니다:
- AWS 계정 접근 권한: ECR 리포지토리를 생성할 수 있는 IAM 권한이 필요합니다.
- Docker 설치: 로컬 환경에 Docker가 설치되어 있어야 합니다.
- macOS: Docker Desktop 설치
- Windows: Docker Desktop 설치
- 설치 확인: 터미널에서
docker --version명령어 실행
- AWS CLI 설치 및 구성: AWS 명령줄 도구가 설치되고 자격 증명이 설정되어 있어야 합니다.
- 설치 확인:
aws --version - 자격 증명 설정:
aws configure
- 설치 확인:
- Docker 이미지 준비: ECR에 업로드할 Docker 이미지가 로컬에 빌드되어 있거나 빌드 가능한 상태여야 합니다.
알아두기
ECR(Elastic Container Registry)이란?
- AWS에서 제공하는 Docker 컨테이너 이미지를 저장하고 관리하는 서비스입니다.
- Docker Hub와 유사하지만 AWS 환경과 완벽하게 통합되어 있습니다.
- Private 저장소로 운영되어 보안이 강화됩니다.
주요 용어
- 리포지토리(Repository): Docker 이미지를 저장하는 공간 (예: my-app, web-server)
- 이미지 태그(Tag): 이미지의 버전을 구분하는 레이블 (예: latest, v1.0, prod)
- 레지스트리 URI: ECR 리포지토리의 주소 (예: 123456789012.dkr.ecr.ap-northeast-2.amazonaws.com)
Process
1. ECR 리포지토리 생성
AWS 콘솔에서 ECR 리포지토리를 생성하는 단계입니다.
-
AWS Management Console에 로그인합니다.

-
검색창에 "ECR"을 입력하거나 서비스 목록에서 Elastic Container Registry를 선택합니다.

-
왼쪽 메뉴에서 프라이빗 레지스트리/리포지토리(Repositories)를 클릭합니다.

-
우측 상단의 리포지토리 생성(Create repository) 버튼을 클릭합니다.

-
리포지토리 설정을 입력합니다:

일반 설정
- 리포지토리 이름(Repository name):
- 간결한 이름을 입력합니다. 리포지토리는 네임스페이스를 지원하며, 이를 사용하여 유사한 리포지토리를 그룹화할 수 있습니다.
- 이름은 문자로 시작해야 하며 소문자, 숫자 및 특수 문자(._-/)만 포함할 수 있습니다.
- 최소 2자, 최대 256자까지 입력 가능합니다.
- 예시:
my-web-app,backend/api-server,frontend-app
(중요) 리포지토리 이름은 생성 후 변경할 수 없으므로 신중하게 정합니다.
이미지 태그 설정
- 이미지 태그 변경 가능성(Tag mutability):
- Mutable(변경 가능): 이미지 태그를 덮어쓸 수 있습니다. (기본값)
- Immutable(변경 불가): 이미지 태그를 덮어쓸 수 없습니다. 동일한 태그로 푸시 시 에러가 발생합니다.
알아두기: 프로덕션 환경에서는 Immutable 설정을 권장하여 실수로 이미지가 덮어써지는 것을 방지할 수 있습니다.
- 변경 가능한 태그 제외(Mutable tag exclusion) (선택사항):
- 특정 태그 패턴을 변경 불가능하게 설정할 수 있습니다.
- 와일드카드(*)를 사용하여 패턴을 지정합니다.
- 예시:
prod-*,release-*등의 프로덕션 관련 태그만 보호
암호화 설정
- 암호화 구성(Encryption configuration):
- AES-256 (기본값, 권장): 업계 표준 Advanced Encryption Standard (AES) 암호화를 사용합니다.
- AWS KMS: AWS Key Management Service(KMS)에 저장된 키를 사용하여 리포지토리의 이미지를 암호화합니다.
(Notice) 리포지토리 생성 후에는 암호화 설정을 변경할 수 없습니다.
이미지 스캔 설정 - deprecated
- 푸시할 때 스캔(Scan on push):
- 활성화 시 리포지토리에 푸시된 후 각 이미지를 자동으로 보안 취약점 스캔을 수행합니다.
- 비활성화 시 각 이미지 스캔을 수동으로 시작해야 합니다.
(Notice) 이 설정은 deprecated(사용 중단 예정)되었으며, 레지스트리 수준 구성으로 이동되었습니다. 새로운 방식의 스캔 설정은 ECR 레지스트리 설정에서 리포지토리 필터링을 통해 구성할 수 있습니다.
- 하단의 리포지토리 생성(Create repository) 버튼을 클릭합니다.
- 생성이 완료되면 리포지토리 목록에서 새로 생성된 리포지토리를 확인할 수 있습니다.

2. 리포지토리 URI 확인
생성된 리포지토리의 주소를 확인하는 단계입니다.
-
리포지토리 목록에서 방금 생성한 리포지토리 이름을 클릭합니다.
-
상단의 URI 정보를 확인하고 복사합니다.
URI 형식: [AWS계정ID].dkr.ecr.[리전].amazonaws.com/[리포지토리명]
예시: 123456789012.dkr.ecr.ap-northeast-2.amazonaws.com/my-web-app
[스크린샷]
(Notice) 이 URI는 이미지 태그 작업과 푸시 작업에 필요하므로 메모장에 복사해 둡니다.
3. Docker 이미지 준비
ECR에 업로드할 Docker 이미지를 준비합니다.
기존 이미지가 있는 경우
- 터미널에서 로컬 Docker 이미지 목록을 확인합니다.
docker images

예시 출력:
REPOSITORY TAG IMAGE ID CREATED SIZE my-app latest abc123def456 2 hours ago 500MB
새로운 이미지를 빌드하는 경우
- Dockerfile이 있는 디렉토리로 이동합니다.
cd /path/to/your/project
- Docker 이미지를 빌드합니다.
docker build -t [이미지명] .
예시:
docker build -t my-web-app .
- 빌드가 완료되면 이미지를 확인합니다.
docker images
4. ECR 인증 (Docker Login)
Docker 클라이언트가 ECR에 접근할 수 있도록 인증하는 단계입니다.
- 터미널에서 다음 명령어를 실행하여 ECR 로그인을 수행합니다.
AWS CLI v2 사용 (권장)
aws ecr get-login-password --region [리전명] | docker login --username AWS --password-stdin [AWS계정ID].dkr.ecr.[리전명].amazonaws.com
예시:
aws ecr get-login-password --region ap-northeast-2 | docker login --username AWS --password-stdin 123456789012.dkr.ecr.ap-northeast-2.amazonaws.com

- 로그인 성공 시
Login Succeeded메시지가 출력됩니다.
(중요) 이 인증은 12시간 동안 유효하며, 만료 시 다시 로그인해야 합니다.
5. Docker 이미지 태그 지정
로컬 이미지에 ECR 리포지토리 주소로 태그를 추가합니다.
- 다음 형식으로 이미지에 태그를 지정합니다.
docker tag [로컬이미지명]:[태그] [ECR리포지토리URI]:[태그]
예시:
docker tag my-web-app:latest 123456789012.dkr.ecr.ap-northeast-2.amazonaws.com/my-web-app:latest

버전별 태그 예시:
docker tag my-web-app:latest 123456789012.dkr.ecr.ap-northeast-2.amazonaws.com/my-web-app:v1.0.0
- 태그가 정상적으로 지정되었는지 확인합니다.
docker images
예시 출력:
REPOSITORY TAG IMAGE ID CREATED SIZE my-web-app latest abc123def456 2 hours ago 500MB 123456789012.dkr.ecr.ap-northeast-2.amazonaws.com/my-web-app latest abc123def456 2 hours ago 500MB

6. ECR에 이미지 푸시
태그가 지정된 이미지를 ECR 리포지토리로 업로드합니다.
- 다음 명령어로 이미지를 푸시합니다.
docker push [ECR리포지토리URI]:[태그]
예시:
docker push 123456789012.dkr.ecr.ap-northeast-2.amazonaws.com/my-web-app:latest
- 푸시 진행 상황이 터미널에 표시됩니다.
The push refers to repository [123456789012.dkr.ecr.ap-northeast-2.amazonaws.com/my-web-app] abc123def: Pushed 456789ghi: Pushed latest: digest: sha256:1234567890abcdef... size: 2421
(Notice) 이미지 크기에 따라 업로드 시간이 소요될 수 있습니다. 네트워크 상태를 확인하세요.

7. ECR 콘솔에서 이미지 확인
업로드된 이미지를 AWS 콘솔에서 확인합니다.
-
AWS 콘솔의 ECR 서비스로 돌아갑니다.

-
리포지토리 목록에서 해당 리포지토리를 클릭합니다.

-
이미지(Images) 탭에서 업로드된 이미지를 확인할 수 있습니다.


표시 정보:
- 이미지 태그
- 푸시된 시간
- 이미지 크기
- 취약점 스캔 결과 (스캔이 활성화된 경우)
8. ECR 이미지 풀(Pull) 및 실행
ECR에 저장된 이미지를 다른 환경(다른 PC, EC2 인스턴스 등)에서 가져와 사용하는 단계입니다.
ECR 로그인
- 이미지를 가져올 환경에서 터미널을 열고 ECR에 로그인합니다.
aws ecr get-login-password --region [리전명] | docker login --username AWS --password-stdin [AWS계정ID].dkr.ecr.[리전명].amazonaws.com
예시:
aws ecr get-login-password --region ap-northeast-2 | docker login --username AWS --password-stdin 123456789012.dkr.ecr.ap-northeast-2.amazonaws.com
Login Succeeded메시지가 출력되면 로그인 성공입니다.
이미지 풀(Pull)
- ECR 리포지토리에서 이미지를 로컬로 다운로드합니다.
docker pull [ECR리포지토리URI]:[태그]
예시:
docker pull 123456789012.dkr.ecr.ap-northeast-2.amazonaws.com/my-web-app:latest

- 다운로드가 완료되면 로컬 이미지 목록을 확인합니다.
docker images ```
예시 출력: ``` REPOSITORY TAG IMAGE ID CREATED SIZE 123456789012.dkr.ecr.ap-northeast-2.amazonaws.com/my-web-app latest abc123def456 2 hours ago 500MB
이미지 실행
- 다운로드한 이미지를 컨테이너로 실행합니다.
docker run -d -p [호스트포트]:[컨테이너포트] [ECR리포지토리URI]:[태그]
예시:
docker run -d -p 80:80 123456789012.dkr.ecr.ap-northeast-2.amazonaws.com/my-web-app:latest

옵션 설명:
-d: 백그라운드에서 컨테이너 실행 (detached mode)-p 80:80: 호스트의 80번 포트를 컨테이너의 80번 포트로 연결
- 실행 중인 컨테이너를 확인합니다.
docker ps ```
예시 출력: ``` CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES abc123def456 123456789012.dkr.ecr.ap-northeast-2.amazonaws.com/my-web-app:latest "docker-entrypoint.s…" 5 seconds ago Up 4 seconds 0.0.0.0:80->80/tcp amazing_curie
Trouble Shooting
no basic auth credentials
증상: docker push 실행 시 no basic auth credentials 에러 발생
원인: ECR 로그인이 만료되었거나 로그인을 하지 않은 상태입니다.
해결 방법:
- ECR 로그인 명령어를 다시 실행합니다.
aws ecr get-login-password --region ap-northeast-2 | docker login --username AWS --password-stdin 123456789012.dkr.ecr.ap-northeast-2.amazonaws.com
denied: Your authorization token has expired
증상: 이미지 푸시 중 authorization token 만료 에러 발생
원인: ECR 인증 토큰은 12시간 동안만 유효하며, 그 이후에는 재로그인이 필요합니다.
해결 방법:
- ECR에 다시 로그인합니다.
aws ecr get-login-password --region ap-northeast-2 | docker login --username AWS --password-stdin 123456789012.dkr.ecr.ap-northeast-2.amazonaws.com
Repository does not exist
증상: 이미지 푸시 시 리포지토리가 존재하지 않는다는 에러 발생
원인:
- ECR 콘솔에서 리포지토리를 생성하지 않았습니다.
- 리포지토리 이름이나 리전이 잘못되었습니다.
해결 방법:
- ECR 콘솔에서 리포지토리가 생성되어 있는지 확인합니다.
- 리전이 올바른지 확인합니다 (예: ap-northeast-2).
- 리포지토리 이름의 대소문자와 철자를 정확히 확인합니다.
retrying in ... seconds
증상: 이미지 푸시가 매우 느리거나 계속 재시도됩니다.
원인: 네트워크 연결이 불안정하거나 이미지 크기가 매우 큽니다.
해결 방법:
- 네트워크 연결 상태를 확인합니다.
.dockerignore파일을 활용하여 불필요한 파일을 제외하고 이미지 크기를 줄입니다.- 안정적인 네트워크 환경에서 다시 시도합니다.
Cannot connect to the Docker daemon
증상: docker 명령어 실행 시 Docker daemon 연결 에러 발생
원인: Docker가 실행되고 있지 않습니다.
해결 방법:
- Docker Desktop을 실행합니다 (macOS/Windows).
- Linux의 경우 Docker 서비스를 시작합니다:
sudo systemctl start docker