[AWS] ECR에 이미지를 Push/Pull 해보자

2025. 7. 19. 10:54·Study/AWS
반응형

AWS ECR이란?

AWS에서 제공하는 Docker Hub와 비슷한 리포지토리를 업로드하고 사용할 수 있는 서비스이다. Docker Hub와 비슷하다고 볼 수 있지만, S3로 이미지를 관리하므로 고가용성이 보장되고, AWS IAM 인증을 통해 안전하게 Push/Pull을 관리할 수 있다.


실습

이번 글에서는 간단한 Python Code를 개발하여 alpine 이미지를 사용해서 빌드한 다음, ECR에 Push하고 사용해보는것 까지 해보겠습니다.

1. ECR 생성

이번 글에서는 Private ECR을 사용할 것이기에 리포지토리의 이름은 원하는대로 정해주시면 됩니다.

2. VPC, Instance 생성

VPC와 인스턴스는 원하는 대로 설정하셔도 됩니다. 저는 간단하게만 설정하겠습니다. 또한 인스턴스는 외부와 통신할 수 있어야 합니다. 저는 Amazon Linux 2023으로 인스턴스를 생성하겠습니다.

2-1. IAM Role 부여

Instance에서 AWS ECR에 접근하기 위한 역할을 부여해주겠습니다. 저희는 간단히 실습만 해볼것이기에 AmazonEC2ContainerRegistryFullAccess 권한을 부여해주겠습니다. IAM 역할의 이름은 알아볼 수 있게 원하는 대로 설정해 주세요.

이제 방금전 생성했던 인스턴스에 IAM Role을 부여해주면 됩니다.

3. Docker 설치

Docker를 설치하고 실행시켜보겠습니다.

sudo yum install -y docker
sudo systemctl start docker

설치되셨다면, 아래 명령어로 docker가 정상적으로 실행되고있는지 확인해주세요.

sudo systemctl status docker

3-1. dockerfile 생성 및 Python 코드 작성

먼저 원하는 위치에 dockerfile을 생성해주세요. 저는 ec2-user의 홈 디렉토리에 생성하였습니다.

FROM alpine
COPY python/weather.py /home
RUN apk update
RUN apk add python3 py3-pip
RUN apk add py3-flask
CMD ["python3", "/home/weather.py"]

dockerfile에서 python 디렉토리의 weather.py을 필요로 하기 때문에, dockerfile과 같은 위치에 python 디렉토리를 생성한뒤, weather.py 파일을 작성해주세요. 저의 경우에는 /home/ec2-user/python/weather.py 경로에 작성했습니다.

from flask import Flask
import random
alist = ['맑음','흐림','비','눈','바람','안개','천둥번개']
app = Flask(__name__)

@app.route('/')
def main():
    return '내일날씨 확인', 200

@app.route('/weather')
def weather():
   return f'내일의 날씨는 {alist[random.randrange(0,7)]}입니다. 확률 {random.randrange(1,101)}%', 200

if __name__ == "__main__":
  app.run(host='0.0.0.0', port=80)

4. docker build 및 push

docker build를 하기전, ECR에 로그인을 해 클라이언트 인증을 해야합니다.아래와 같이 입력해주세요.

aws ecr get-login-password --region [리전] | docker login --username AWS --password-stdin [AWS 유저 아이디].dkr.ecr.[리전].amazonaws.com

만약 위 명령어로 로그인이 되지않는다면, IAM Role을 정확히 설정하고 인스턴스에 부여했는지 확인해주세요.

성공적으로 로그인이 되었다면, 작성한 dockerfile이 존재하는 위치에서 다음 명령어를 실행하시면 됩니다.

docker build -t <원하는 이미지 이름> .
docker tag py-weather <생성한 ECR의 URI>
docker push <생성한 ECR의 URI>

ECR을 확인해 보시면 성공적으로 Push가 되었다는 것을 볼 수 있습니다.

5. ECR에서 이미지 Pull 및 실행

ECR에 Push를 해보았으니 Pull하고 실행하는 것 까지 해보겠습니다. 일단 저희가 생성했던 이미지는 전부 삭제해주세요.

아래 명령어를 사용하시면 생성된 이미지를 확인하고, 이미지를 지울 수 있습니다.

docker images #생성한 이미지 확인
docker rmi <Image Name> #이미지 삭제

ECR에 보시면 저희가 Push한 이미지옆에 Image URI라는 것이 있을 것입니다. URI를 복사해주세요. 그런다음 아래 명령어를 입력해서 Pull 해보겠습니다.

docker pull <Image URI>

그 다음 docker images를 입력하시면 성공적으로 이미지가 pull 된것을 보실 수 있을것입니다.

이미지에 포함된 파이썬 코드는 80포트에서 작성하는 Flask 코드입니다. 테스트를 하기위해 저희가 접속중인 Host 인스턴스의 포트와 실행시킬 컨테이너의 포트를 연결하여 실행시키겠습니다.

docker run -d -p 80:80 <Image Name>

이제 curl localhost와 curl localhost/weather 명령어를 입력하면 정상적으로 응답이 오는것을 확인하실 수 있습니다.

오늘은 ECR에 이미지를 Push하고 Pull 해보았습니다. 긴 글 읽어주셔서 감사합니다!

구독과 공감 눌러주시면 대단히 감사드리겠습니다!

반응형

'Study > AWS' 카테고리의 다른 글

[AWS] Visual Studio Code로 EC2에 접근하기!  (3) 2025.08.01
[AWS] aws-nuke 사용하기  (2) 2025.06.16
'Study/AWS' 카테고리의 다른 글
  • [AWS] Visual Studio Code로 EC2에 접근하기!
  • [AWS] aws-nuke 사용하기
tttttttt9-h
tttttttt9-h
tttttttt9-h 님의 블로그 입니다.
    반응형
  • tttttttt9-h
    어둠의모몽가지지단 은신처
    tttttttt9-h
  • 전체
    오늘
    어제
    • 분류 전체보기 (5)
      • Study (3)
        • Network (0)
        • Linux (0)
        • AWS (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 글쓰기
    • 관리 페이지
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    ssh remote
    AWS
    instance
    OSI 7 layer
    Container
    aws-nuke
    ssh
    nat
    Nuke
    ecr
    private
    Visual Studio
    docker
    OSI 7계층
    Network
    EC2
    OSI
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
tttttttt9-h
[AWS] ECR에 이미지를 Push/Pull 해보자
상단으로

티스토리툴바