본문
도커 이미지를 AWS ECR에 등록하기
AWS/실습 2025. 12. 19. 06:57
반응형
스크립트 개요
이 스크립트는 Docker Hub의 공식 Python 3.11-slim 이미지를 가져와 사용자의 AWS ECR(Elastic Container Registry)로 자동 업로드하는 과정을 자동화한 도구입니다.
주요 기능 및 단계
- ECR 인증: aws ecr get-login-password를 사용하여 Docker가 AWS 리포지토리에 접근할 수 있도록 로그인합니다.
- 이미지 확보: Docker Hub로부터 python:3.11-slim 이미지를 로컬로 다운로드(pull)합니다.
- 태그 설정: 다운로드한 이미지를 지정된 AWS 계정의 ECR 주소 형식에 맞춰 다시 명명(tag)합니다.
- 리포지토리 자동 생성: 대상 ECR 리포지토리가 없을 경우, AWS CLI를 통해 자동으로 생성하는 예외 처리가 포함되어 있습니다.
- 이미지 업로드: 준비된 이미지를 AWS ECR로 최종 전송(push)합니다.
- 정보 확인: 업로드가 완료된 후, 이미지의 다이제스트(Digest)와 푸시 시간을 표 형태로 출력하여 성공 여부를 확인시켜 줍니다.
ecr_upload_python311_slim.py
#!/bin/bash
# 변수 설정
AWS_ACCOUNT_ID="104871657422" #sandbox
AWS_REGION="ap-northeast-2"
ECR_REPOSITORY="python311-slim"
SOURCE_IMAGE="python:3.11-slim"
IMAGE_TAG="latest"
echo "🚀 Starting Python 3.11-slim ECR upload..."
# 1. ECR 로그인
echo "🔐 Logging in to ECR..."
aws ecr get-login-password --region $AWS_REGION | docker login --username AWS --password-stdin $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com
if [ $? -ne 0 ]; then
echo "❌ ECR login failed!"
exit 1
fi
# 2. Python 3.11-slim 이미지 풀
echo "📥 Pulling Python 3.11-slim image..."
docker pull $SOURCE_IMAGE
if [ $? -ne 0 ]; then
echo "❌ Failed to pull Python 3.11-slim image!"
exit 1
fi
# 3. 이미지 태깅
echo "🏷️ Tagging image for ECR..."
docker tag $SOURCE_IMAGE $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/$ECR_REPOSITORY:$IMAGE_TAG
if [ $? -ne 0 ]; then
echo "❌ Failed to tag image!"
exit 1
fi
# 4. ECR 리포지토리 존재 확인 및 생성
echo "🏗️ Checking ECR repository..."
if ! aws ecr describe-repositories --repository-names $ECR_REPOSITORY --region $AWS_REGION >/dev/null 2>&1; then
echo "Creating ECR repository..."
aws ecr create-repository --repository-name $ECR_REPOSITORY --region $AWS_REGION
if [ $? -ne 0 ]; then
echo "❌ Failed to create ECR repository!"
exit 1
fi
else
echo "ECR repository already exists"
fi
# 5. ECR에 이미지 푸시
echo "📤 Pushing image to ECR..."
docker push $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/$ECR_REPOSITORY:$IMAGE_TAG
if [ $? -ne 0 ]; then
echo "❌ Failed to push image to ECR!"
exit 1
fi
echo "✅ Python 3.11-slim image successfully uploaded to ECR!"
echo "🔗 ECR Repository URI: $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/$ECR_REPOSITORY:$IMAGE_TAG"
# 6. 업로드된 이미지 정보 확인
echo ""
echo "📊 Repository information:"
aws ecr describe-images --repository-name $ECR_REPOSITORY --region $AWS_REGION --query 'imageDetails[0].{ImageDigest:imageDigest,ImageSizeInBytes:imageSizeInBytes,ImagePushedAt:imagePushedAt}' --output table
echo ""
echo "🔧 Useful commands:"
echo " - List images: aws ecr list-images --repository-name $ECR_REPOSITORY --region $AWS_REGION"
echo " - Delete repository: aws ecr delete-repository --repository-name $ECR_REPOSITORY --region $AWS_REGION --force"
echo " - Pull from ECR: docker pull $AWS_ACCOUNT_ID.dkr.ecr.$AWS_REGION.amazonaws.com/$ECR_REPOSITORY:$IMAGE_TAG"
AWS ECR 도커 이미지를 다른 리포지토리로 복사 및 이전하기
1. 첫 번째 ECR에서 이미지 다운로드
#aws configure
#104871657422
# 첫 번째 ECR에 로그인
aws ecr get-login-password --region ap-northeast-2 | docker login --username AWS --password-stdin 104871657422.dkr.ecr.ap-northeast-2.amazonaws.com
# 이미지 다운로드
docker pull 104871657422.dkr.ecr.ap-northeast-2.amazonaws.com/kbsec-agent-base:latest
2. 이미지 태그 변경
# 새로운 ECR 주소로 태그 생성
docker tag 104871657422.dkr.ecr.ap-northeast-2.amazonaws.com/kbsec-agent-base:latest 060795923899.dkr.ecr.ap-northeast-2.amazonaws.com/ks2-kai-prd-kabie/kbsec-ai/kbsec-agent-base:latest
3. 두 번째 ECR에 업로드
#aws configure
#060795923899
# 두 번째 ECR에 로그인
aws ecr get-login-password --region ap-northeast-2 | docker login --username AWS --password-stdin 060795923899.dkr.ecr.ap-northeast-2.amazonaws.com
# 이미지 업로드
docker push 060795923899.dkr.ecr.ap-northeast-2.amazonaws.com/ks2-kai-prd-kabie/kbsec-ai/kbsec-agent-base:latest
반응형
댓글