[2023 기능대회 준비] 3. ECR, ECR 푸쉬까지

Yohan_05·2023년 3월 20일
0
post-thumbnail

ECR이란?

ecr 은 docker container 의 이미지를 저장하는 repository 서비스임. 기능은 Docker hub의 repository 서비스와 동일. 특별한건 없음. docker private repository 를 구축하고 관리하는 수고를 aws 에 맡기는 Managed 서비스.

장점? container 이미지를 s3에 저장하기 때문에 고가용성이 유지되고, aws iam 인증을 통해 이미지 Push/pull 에 대한 권한 권리가 가능하다는 것.

실습

1. 생성

처음에 ECR을 들어오면 아무것도 생성되지 않았을 것이다. 생성버튼을 눌러 생성 페이지로 이동해주자.

리포지토리 생성이라고해도 별거 없다. 깃허브 리포지토리 만들때 별 설정을 안하는 것처럼 이것도 똑같다 ㅇㅇ. 그냥 간단하게 리포지토리 이름만 생성하고 넘어가주자. 필자는 hello_flask 라고 이름지었다.

2. 푸시 명령 살펴보기

생성하고나서 푸시 명령을 봐보면 아래와 같은 커맨드로 이 레포지토리에 푸시를 할 수 있다고 나온다. 그렇다면 EC2 안에 있는 app.py(전 글들을 읽었으면 충분히 해낼 수 있다)를 ECR 로 푸시를 해보자.

3. 기본적인 세팅을 하자

1. 도커 세팅

# Install
sudo yum install docker
 
# Docker 서비스 실행
sudo service docker start
 
# 부팅시 자동 실행 설정
sudo chkconfig docker on

2. Flaks 세팅

# 1. 파이썬을 설치해준다. 
$ sudo yum install python3

# 2. 설치되었으면 버전 확인
$ python3 --version

# 3. 가상환경 셋팅
$ python3 -m venv venv

# 4. 가상환경 접속
$ cd venv/bin
$ source activate

# 5. 플라스크 설치 이후 컨트롤 C V 해서 파일들 옮기기
$ pip3 install -U Flask

# 6. 실행
$ flask run

4. 권한 설정

ec2에서 Ecr 에 접근을 하기 위해선 권한이 필요한데 그것을 설정해줘야한다.

4-1. 유저 생성 후 권한 부여

무지성으로 루트 엑세스키를 생성해도되지만 기능대회이고, '최소한'의 권한을 요구할것이기때문에 docker_user 이라는 유저를 만들고 액세스키를 발급받아주겠다.

사용자의 이름을 알잘딱 입력해주고, ecr에 대한 접근 자체는 콘솔에서 하는것이 아니기 때문에 console에 대한 사용자 액세스 권한은 제공하지 않는다.

이후 뭐 연결하는 정책은 없고 그냥 생성을 눌러준다. 이후 인스턴스->application->보안->IAM 역할 수정에 들어가준다.

IAM 역할 생성을 클릭.

역할 만들기

aws 서비스 중 Ec2(인스턴스)와 연결할 정책이기 때문에 아래와 같이 선택해주고

ECR에 접근할 권한을 얻기 위해 AmazonEC2ContainerRegistryFullAccess 를 부여.

역할 이름과 설명을 알잘딱 정해주고 생성해준다.

이후 Ec2에 IAM 역할에 방금 만든 역할을 골라주고, IAM 역할을 업데이트해준다.

4-2. aws configure

이제 aws configure 를 통해 iam user 의 accessKey를 등록시켜줘야한다. AccessKey를 발급받기 위해 IAM -> 사용자 -> 발급받고자하는 사용자 이름을 클릭

보안 자격증명 -> 액세스키 -> 액세스 키 만들기를 눌러주고

aws cli를 사용할때 쓰는 액세스 키를 발급받기 때문에 Command Line Interface를 선택해주고 발급받아준다. 이때 발급받은 키는 절대 분실하지 말고 알잘딱 메모장에 복사 붙여넣기를 하든 .csv 파일로 저장하든 하자.

이후 $ aws configure로 자신의 액세스키와 시크릿 액세스키, 리전, 아웃풋 포멧을 입력해준다.

root] # aws configure
AWS Access Key ID : (YOUR_ACCESS_KEY_ID)
AWS Secret Access Key : (YOUR_SECRET_ACCESS_KEY)
Default region name : ap-northeast-2
Default output format : json

로 유저를 등록시켜준다.

3. 도커 파일 만들기

이때 도커파일은 한글자도 다름 없이 Dockerfile 이란 이름을 가지고 있어야한다.
도커파일에 대한 자세한 내용은 다음 글에서 알아보도록하자.

FROM python:3.8-slim

COPY . /app

RUN pip3 install flask 

WORKDIR /app

CMD ["python3", "-m", "flask", "run", "--host=0.0.0.0"]

4. 푸쉬 명령어로 진짜 푸쉬를 해보자

그냥 무지성으로다가 푸시 명령보기 눌러서 나온 명령어들을 순차적으로 입력하자.

1. aws cli 를 사용하여 클라이언트 인증
$ aws ecr get-login-password --region ap-northeast-2 | docker login --username AWS --password-stdin 368833186135.dkr.ecr.ap-northeast-2.amazonaws.com

로그인이 되지 않는다면 aws configure 를 잘못했거나, 권한이 없는것이니 다시한번 확인해보자.

2. 도커 이미지 빌드
$ docker build -t hello_flask .
빌드가 잘 됐다면 successfully 가 반겨줄 것이다.

3. 이미지 태그 지정
그냥 이미지에 태그만 지정해주는 명령어. 뭐 뜨는 창은 없을것이다.
$ docker tag hello_flask:latest 368833186135.dkr.ecr.ap-northeast-2.amazonaws.com/hello_flask:latest

4.이미지를 생성한 AWS 리포지토리로 푸쉬
이제 이 명령어를 입력해서 ECR로 푸쉬를 해주자.
$ docker push 368833186135.dkr.ecr.ap-northeast-2.amazonaws.com/hello_flask:latest
성공적으로 푸쉬를 했다면 ECR 리포지토리안에 자신이 푸쉬한 이미지가 업로드 되어있을것이다.

이제 이 이미지를 pull 받아서 사용하고 싶다면 $ docker pull 368833186135.dkr.ecr.ap-northeast-2.amazonaws.com/hello_flask:latest를 입력해주면된다.

profile
안녕하세요 DevOps 엔지니어로 현업에서 활동중인 요한이라고 합니다.

0개의 댓글