본문 바로가기
Public Cloud/AWS

[ECR] AWS ECR과 온프레미스 환경 연결하기(Public Repository)

by Yoon_estar 2025. 2. 15.
728x90

개요

docker hub, harbor 등 다양한 레파지 토리들이 있는데 그중 aws ECR 과 연결하는 실습을 하겠습니다. 

 

사전 준비

일단 접속할 리눅스 서버에서 aws 콘솔 로그인을 합니다.

아래 2가지 글을 참고하여 aws 콘솔과 연결을 합니다. 

2024.12.15 - [Public Cloud/AWS] - [AWS] IAM 계정 생성 후 AWS CLI console 연결하기

 

[AWS] IAM 계정 생성 후 AWS CLI console 연결하기

IAM 계정 생성하기 보안 자격 증명 (계정 별 설정)MFA (권장 사항)사용자의 키 값을 탈취 당했을 때를 방지하기 위하여 설정  키 값 등록하기아래 파일을 수정 직전에 얻은 키 정보 아래와 같이

www.estar987.com

 

2025.01.29 - [Public Cloud/AWS] - [AWS] Linux 환경에서 AWS CLI 설치하기

 

현재 연결이 완료된 상태입니다. 

# aws sts get-caller-identity
{
    "UserId": "AIDA4AQ3TYVK4ZDU2ZTKD",
    "Account": "825765381461",
    "Arn": "arn:aws:iam::825765381461:user/estar987"
}

 

AWS ECR 생성하기

ECR 서비스로 이동

  • AWS 콘솔에서 Elastic Container Registry 검색하고 클릭하여 ECR 서비스 페이지로 이동합니다. 
  • 왼쪽 카테고리에서 [Public registry] - [Repository] 클릭 후 [리포지토리 생성]
    • 리포지토리 이름 : petclinic
    • 리포지토리 로고 업로드(선택)
    • 간단한 설명 : spring petclinic
    • 콘텐츠 유형 - x86-64, Linux
    • 소개
    • 사용방법

리포지토리 이름 클릭
오른쪽 상단에 푸시 명령 보기 클릭
복사 후 온프레미스 리눅스 서버에 입력

 

AWS CLI 연결을 위한 Access 키 생성하기

  • IAM → [보안 자격 증명] - [액세스키 만들기] - Access Key, Secret Key 확인 및 저장
  • Bastion Host(ubuntu Linux)에 AWS CLI 관리툴인 aws 설치
  • 참고 

https://docs.aws.amazon.com/ko_kr/cli/latest/userguide/install-cliv2-linux.html

 

최신 버전의 AWS CLI 설치 또는 업데이트 - AWS Command Line Interface

이전 버전에서 업데이트하는 경우 unzip 명령을 실행하면 기존 파일을 덮어쓸지 묻는 메시지가 표시됩니다. 스크립트 자동화와 같은 경우에 이러한 프롬프트를 건너뛰려면 unzip에 대한 -u 업데이

docs.aws.amazon.com

 

# sudo apt update
# sudo apt install -y unzip

# curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
# unzip awscliv2.zip
# sudo ./aws/install

# aws --version
# aws-cli/2.17.36 Python/3.11.9 Linux/6.8.0-1012-aws exe/x86_64.ubuntu.24

 

AWS 프로파일 등록

# AWS CLI에서 AWS 서비스에 접근할 수 있는 자격 증명을 설정
aws configure
AWS Access Key ID [None]: AKIASJVPYM...
AWS Secret Access Key [None]: M7x...N
Default region name [None]: ap-northeast-2
Default output format [None]:json

# 현재 인증된 AWS 사용자가 누구인지 확인
aws sts get-caller-identity
{
    "Account": "<ID>", 
    "UserId": "AID...M", 
    "Arn": "arn:aws:iam::<ID>:user/<NAME>"
}

 

푸시 명령 가이드 라인에 따라 명령 실행

# aws ecr-public get-login-password --region us-east-1 | docker login --username AWS --password-stdin public.ecr.aws/i63abv4i48732h7

 

도커 파일 작성

# vi Dockerfile

FROM public.ecr.aws/amazonlinux/amazonlinux:latest

# Update installed packages and install Apache
RUN yum update -y && \
 yum install -y httpd

# Write hello world message
RUN echo 'Hello World!' > /var/www/html/index.html

# Configure Apache
RUN echo 'mkdir -p /var/run/httpd' >> /root/run_apache.sh && \
 echo 'mkdir -p /var/lock/httpd' >> /root/run_apache.sh && \
 echo '/usr/sbin/httpd -D FOREGROUND' >> /root/run_apache.sh && \
 chmod 755 /root/run_apache.sh

EXPOSE 80

CMD /root/run_apache.sh

 

도커 빌드

# docker build -t petclinic .

 

이미지 태그 지정 후 리포지토리에 푸시

# docker tag petclinic:latest public.ecr.aws/i6a4i2h7/petclinic:latest
# docker push public.ecr.aws/i6a4i2h7/petclinic:latest

ECR에 이미지 생성 확인

 

 

업로드 된 컨테이너 확인 및 실행 - Bastion 서버(AWS EC2)

$ sudo apt update
$ sudo apt install docker.io

$ sudo usermod -a -G docker ubuntu
exit
!! logout후 다시 login
$ id

$ docker images
!! 아무것도 안 나옴

 

  • 위의 이미지와 같이 URL 복사 후 아래 명령어에서 8080:8080 뒤에 본인의 URL을 복사 붙여넣기 합니다. 
  • 해당 명령어를 AWS Bastion 서버에서 실행합니다. 
$ docker run --name petclinic -p 8080:8080 public.ecr.aws/i6a4i2h7/petclinic:latest
Unable to find image 'public.ecr.aws/i6a4i2h7/petclinic:latest' locally
latest: Pulling from i6a4i2h7/petclinic
a2e8122f4c85: Extracting  557.1kB/53.15MB
74cb50cecc7b: Downloading  49.65MB/81.24MB
c431491c76f6: Download complete
a7c23f3d5548: Download complete

 

확인

$ docker ps
CONTAINER ID   IMAGE                                      COMMAND                  CREATED         STATUS         PORTS                                               NAMES
1cce25f21874   public.ecr.aws/i6a4i2h7/petclinic:latest   "/bin/sh -c /root/ru…"   3 minutes ago   Up 3 minutes   80/tcp, 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp   petclinic
$ docker images
REPOSITORY                          TAG       IMAGE ID       CREATED          SIZE
public.ecr.aws/i6a4i2h7/petclinic   latest    afadcec2235b   27 minutes ago   286MB

AWS EC2 인바운드 규칙 수정 및 접속 테스트

IP주소:8080 으로 접속 테스트 

 

리소스 삭제

[ECR] - [Public registry] - [Repository] - petclinic 선택 후 tag 이미지 모두 삭제 - petclinic 선택 후 tag 이미지 삭제