ECR: 컨테이너 이미지 저장 및 가져오기
Docker 이미지를 Amazon ECR에 푸시하고, 수명 주기 정책을 적용해 오래된 이미지를 정리하며, ECS 작업으로 이미지를 안전하게 가져옵니다.
ECR: 컨테이너 이미지 저장 및 가져오기은(는) CoddyKit의 무료 AWS Solutions Architect 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 AWS Solutions Architect 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. AWS Solutions Architect 강의에는 총 4개의 강의가 포함되어 있습니다.
Amazon ECR이란 무엇인가요?
Amazon Elastic Container Registry (ECR)은 완전 관리형 Docker 호환 컨테이너 이미지 레지스트리입니다. AWS 내에서 컨테이너 이미지를 안전하게 저장, 관리 및 배포합니다. ECR을 사용하면 자체 레지스트리 인프라를 운영할 필요가 없으며 ECS, EKS, Lambda(컨테이너 이미지) 및 CodeBuild와 기본적으로 통합됩니다. ECR에 저장된 이미지는 높은 가용성을 위해 복제할 수 있고 보안 취약점을 자동으로 검사할 수 있습니다.
프라이빗 ECR 리포지토리와 퍼블릭 ECR 리포지토리 비교
ECR은 두 가지 리포지토리 유형을 지원합니다. Amazon ECR의 프라이빗 리포지토리에서 이미지를 가져오려면 AWS 인증이 필요하므로 독점 애플리케이션 이미지에 적합합니다. 액세스는 IAM 정책과 리포지토리 리소스 정책으로 제어합니다. ECR Public Gallery(public.ecr.aws)의 퍼블릭 리포지토리는 인터넷 어디에서나 인증 없이 이미지를 가져올 수 있으므로 오픈 소스 기본 이미지, 퍼블릭 도구 및 AWS 제공 이미지(Lambda 기본 이미지, ECS 최적화 AMI 이미지)에 적합합니다. 퍼블릭 리포지토리는 인증되지 않은 요청에 대한 속도 제한과 함께 무료 가져오기 한도를 제공합니다.
# Create a private ECR repository
aws ecr create-repository \
--repository-name 'myapp/backend' \
--image-scanning-configuration scanOnPush=true \
--image-tag-mutability IMMUTABLEDocker를 ECR에 인증하기
프라이빗 ECR 이미지를 푸시하거나 가져오려면 Docker가 AWS 자격 증명을 사용하여 인증해야 합니다. aws ecr get-login-password를 사용하여 임시 인증 토큰을 얻고 이를 docker login으로 파이프하십시오. 토큰은 12시간 동안 유효합니다. CI/CD 파이프라인에서는 푸시하기 전에 토큰을 새로 발급받으십시오. ECS 작업 에이전트, Lambda 및 EKS 작업자 노드는 IAM 역할을 사용하여 ECR에 자동으로 인증하므로 AWS 환경에서 실행 중 이미지를 가져올 때 수동 로그인이 필요하지 않습니다.
# Authenticate Docker CLI to ECR
aws ecr get-login-password --region us-east-1 | \
docker login \
--username AWS \
--password-stdin \
123456789012.dkr.ecr.us-east-1.amazonaws.com이미지를 ECR에 푸시하기
ECR에 이미지를 푸시하는 표준 작업 흐름은 다음과 같습니다. (1) 로컬에서 Docker 이미지를 Build합니다. (2) ECR 리포지토리 URI로 이미지에 태그를 지정합니다(형식: account.dkr.ecr.region.amazonaws.com/repo-name:tag). (3) 태그가 지정된 이미지를 푸시합니다. ECR은 각 이미지 계층을 별도로 저장하고 이미지 간에 공통 계층을 중복 제거하여 스토리지 비용을 줄입니다. 변경 불가능한 태그를 사용하면 태그를 덮어쓸 수 없으므로 배포된 이미지 버전의 안정성과 감사 가능성을 보장할 수 있습니다.
# Build, tag, and push
docker build -t myapp/backend .
docker tag myapp/backend \
123456789012.dkr.ecr.us-east-1.amazonaws.com/myapp/backend:v1.2.3
docker push \
123456789012.dkr.ecr.us-east-1.amazonaws.com/myapp/backend:v1.2.3이미지 태그 변경 가능성
IMMUTABLE 태그는 태그가 다른 이미지로 덮어쓰이는 것을 방지합니다. 태그 변경 가능성이 IMMUTABLE이면 기존 태그에 새 이미지를 푸시할 수 없으며 새 태그를 사용해야 합니다. 이는 프로덕션 환경의 모범 사례입니다. 예를 들어 :v1.2.3이 항상 정확히 동일한 이미지 다이제스트를 가리키도록 하여 안정적인 롤백과 감사를 지원합니다. MUTABLE 태그는 개발 브랜치 또는 비프로덕션 환경에서 편의상 사용하는 :latest 태그에만 사용하십시오.
취약점 이미지 검사
푸시 시 검사를 활성화하면 이미지가 푸시될 때 알려진 CVE를 자동으로 검사합니다. ECR은 Amazon Inspector 통합(향상된 검사) 또는 오픈 소스 Clair 검사기를 기반으로 하는 기본 검사를 사용합니다. 향상된 검사는 푸시할 때만 검사하는 것이 아니라 지속적으로 검사하며 OS 패키지와 언어별 패키지(Node.js, Python, Java)를 포함합니다. ECR 콘솔에서 검사 결과를 검토하거나 EventBridge 알림을 통해 보안 팀에 전달할 수 있습니다.
# Enable enhanced scanning for a registry
aws ecr put-registry-scanning-configuration \
--scan-type ENHANCED \
--rules '[{"repositoryFilters": [{"filter": "*", "filterType": "WILDCARD"}], "scanFrequency": "CONTINUOUS_SCAN"}]'이미지 비용 관리를 위한 수명 주기 정책
ECR은 GB당 월별 스토리지 비용을 청구합니다. 관리하지 않으면 오래된 이미지가 계속 쌓여 비용이 증가합니다. 수명 주기 정책은 규칙에 따라 이미지를 자동으로 만료시키고 삭제합니다. 예를 들어 태그가 지정된 최근 릴리스 10개만 유지하거나 7일이 지난 태그 없는 이미지를 삭제할 수 있습니다. 수명 주기 정책은 매일 실행됩니다. 모든 커밋마다 새 이미지를 푸시하여 매주 수백 개의 이미지가 쌓일 수 있는 CI/CD 파이프라인에서는 특히 중요합니다.
aws ecr put-lifecycle-policy \
--repository-name 'myapp/backend' \
--lifecycle-policy-text '{
"rules": [
{
"rulePriority": 1,
"description": "Keep last 10 tagged images",
"selection": {"tagStatus": "tagged", "tagPrefixList": ["v"], "countType": "imageCountMoreThan", "countNumber": 10},
"action": {"type": "expire"}
},
{
"rulePriority": 2,
"description": "Delete untagged images after 7 days",
"selection": {"tagStatus": "untagged", "countType": "sinceImagePushed", "countUnit": "days", "countNumber": 7},
"action": {"type": "expire"}
}
]
}'계정 간 이미지 액세스
계정 A의 ECR 리포지토리에서 계정 B의 ECS/EKS/Lambda로 이미지를 가져오려면 계정 A의 ECR 리포지토리에 리포지토리 정책(리소스 기반 정책)을 구성해야 합니다. 이 정책에서 계정 B의 IAM 보안 주체에 ecr:GetDownloadUrlForLayer, ecr:BatchGetImage, ecr:BatchCheckLayerAvailability 호출 권한을 부여합니다. 이렇게 하면 계정 간에 이미지를 복사할 필요가 없으며, 중앙 집중식 이미지 관리와 분산된 이미지 사용이 가능합니다.
다중 리전 배포를 위한 ECR 복제
ECR 복제는 기본 레지스트리의 이미지를 다른 AWS 리전의 레지스트리(선택적으로 다른 계정의 레지스트리 포함)로 자동 복사합니다. 다른 리전의 ECS 작업이 이미지를 가져올 때 해당 리전의 로컬 레지스트리에서 가져오므로 데이터 전송 비용과 이미지 가져오기 지연 시간이 줄어듭니다. 레지스트리 수준에서 복제 규칙을 구성하여 복제할 리포지토리와 대상 리전 및 계정을 지정하십시오. 복제는 비동기 방식으로 거의 실시간에 가깝게 수행됩니다.
aws ecr put-replication-configuration \
--replication-configuration '{
"rules": [{
"destinations": [
{"region": "eu-west-1", "registryId": "123456789012"},
{"region": "ap-southeast-1", "registryId": "123456789012"}
],
"repositoryFilters": [{"filter": "prod/*", "filterType": "PREFIX_MATCH"}]
}]
}'ECR 암호화
ECR은 서버 측 암호화를 사용하여 저장된 이미지를 암호화합니다. 기본적으로 AWS 관리형 키(AWS_MANAGED_KEY)를 사용합니다. 제어 및 감사 가능성을 높이려면 고객 관리형 KMS 키(CMK)를 구성하십시오. CMK를 사용하면 키 교체를 제어하고 키를 비활성화하여 액세스를 취소할 수 있으며, CloudTrail에서 모든 복호화 작업을 감사할 수 있습니다. 규정 준수(PCI-DSS, HIPAA, FedRAMP)에 고객이 제어하는 암호화 키가 필요한 경우 KMS 암호화를 활성화하십시오.
CI/CD 파이프라인에서 ECR과 ECS 사용하기
ECR을 사용하는 ECS용 전체 CI/CD 파이프라인은 다음과 같습니다. (1) 개발자가 Git에 코드를 푸시합니다. (2) CodeBuild가 Docker 이미지를 빌드하고 커밋 SHA 태그와 함께 ECR에 푸시합니다. (3) CodePipeline이 새 이미지 URI로 ECS 작업 정의를 업데이트합니다. (4) ECS가 ECR에서 새 이미지를 가져와 서비스의 롤링 업데이트를 수행합니다. ECS 작업은 작업 실행 역할을 사용하여 ECR에 자동으로 인증하므로 실행 중 이미지를 가져오기 위한 자격 증명을 파이프라인에서 관리할 필요가 없습니다.
빠른 확인
이 단원에서 다룬 AWS Solutions Architect(SAA-C03) 개념에 대한 이해도를 확인해 보십시오.
단원 요약
이 단원에서는 다음을 배웠습니다. ECR 프라이빗 리포지토리는 IAM으로 제어되는 액세스, 프로덕션 안정성을 위한 변경 불가능한 태그, Inspector를 통한 자동 취약점 검사를 사용하여 컨테이너 이미지를 저장합니다. 수명 주기 정책은 오래되었거나 태그가 없는 이미지를 자동으로 만료시켜 활발한 CI/CD 환경의 스토리지 비용을 관리합니다. ECR 복제는 다중 리전 배포를 위해 다른 리전과 계정으로 이미지를 복사하여 가져오기 지연 시간을 줄입니다. 다음에는 ECS 서비스 Auto Scaling과 로드 밸런싱 통합을 살펴보겠습니다.
자주 묻는 질문
“ECR: 컨테이너 이미지 저장 및 가져오기” 강의는 무료인가요?
네 — “ECR: 컨테이너 이미지 저장 및 가져오기” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 AWS Solutions Architect 강의 전체를 잠금 해제할 수 있습니다. AWS Solutions Architect 강의에는 총 4개의 강의가 포함되어 있습니다.
“ECR: 컨테이너 이미지 저장 및 가져오기”에서 뭘 배우나요?
Docker 이미지를 Amazon ECR에 푸시하고, 수명 주기 정책을 적용해 오래된 이미지를 정리하며, ECS 작업으로 이미지를 안전하게 가져옵니다. 브라우저에서 직접 실행하는 실습 코드로 AWS Solutions Architect을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
AWS Solutions Architect을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 AWS Solutions Architect은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.
“ECR: 컨테이너 이미지 저장 및 가져오기” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 AWS Solutions Architect 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 AWS Solutions Architect 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- ECS 클러스터, 작업 정의 및 서비스
- EC2 시작 유형과 Fargate 비교
- ECR: 컨테이너 이미지 저장 및 가져오기
- ECS 서비스 자동 확장 및 로드 밸런싱