지난글에서는 ECS가 무엇인지 확인했다면, 이번에는 ECS로 서비스하기 위해서 무엇이 필요한지 알아보자. ECS로 서비스를 운영하기 위해서는 우선 컨테이너 이미지가 필요하다. 컨테이너 이미지를 저장하고 불러오기 위해서는 컨테이너 저장소가 필요하다. 대표적인 저장소인 도커 허브를 제외하고도 다양한 저장소가 있는데, 이번 글에서는 같은 AWS에서 지원하는 ECR을 활용해보자.
ECR (Elastic Container Registry)
ECR이란?
ECR은 AWS에서 제공하는 컨테이너 이미지 저장소다. S3를 기반으로 하고 있어, 기존의 S3 이용자라면 친숙하게 느껴질 것이다. 대부분의 이미지 저장소와 주요 기능은 동일하며, 보안적인 측면에서 장점이 있다. 그리고 AWS의 다른 컨테이너 서비스들 간의 호환성이 좋아, 이미 AWS를 사용하고 있는 사람이라면 빠르게 다양한 부분에 적용 가능하다.

ECR에 도커 이미지 올리기
Dockerfile 작성하기
도커 이미지를 빌드하기 위해서는 Dockerfile을 작성해야한다. Dockerfile은 도커 이미지를 빌드하는 스크립트 파일이다. Dockerfile은 작성하는 방법에 따라서, 도커 이미지의 용량이나 속도 등 다양한 요소에 영향을 끼친다. 각 코드 한 줄은 레이어라고 불리며, 하나의 레이어씩 순차적으로 실행된다.
FROM nvidia/cuda:11.8.0-cudnn8-runtime-ubuntu22.04
COPY . /app
RUN make /app
CMD python /app/app.py
아주 간단한 Dockerfile 작성 예시다. FROM을 통해 다른 도커 이미지 기반으로 이미지를 빌드 할 수 있으며, RUN이나 CMD를 통해서 기존에 코드를 실행하는 명령어를 입력해주면 된다. 더 자세한 예시는 Docker document를 참고하자. Docker-Compose를 활용해서 여러 개의 이미지를 한번에 빌드하는 방법도 있지만, ECR에서 지원하기 때문에 하나의 이미지만 빌드하여 세분화 하는것을 추천한다.
Docker Image 빌드하기
Dockerfile이 준비되었다면, 이를 기반으로 도커를 빌드하여 이미지로 저장해야한다. Dockerfile에 정의된 내용에 따라서, 도커 이미지로 저장할 수 있다. 이때의 명령어는 다음과 같다.
docker build -t {docker image name}:{tag} {docker build directory}
성공적으로 도커 이미지가 생성되었다면, docker images
명령어를 통해서 확인할 수 있다.
ECR에 생성한 Docker Image 올리기
1. Repository 생성
ECR의 Repository에 도커 이미지가 저장된다. S3를 기반으로 하고 있기 때문에, 설정이 대부분 유사하다. IAM 계정을 통해서 관리가 가능하며 키를 이용한 보안정책도 가능하다.
Amazon ECR에 접속해서 Repository 생성을 진행할 수 있다. 특별히 설정할 것이 없다면, 이름만 설정하고 진행하면 된다.

2. IAM 계정 권한 설정
ECR에 이미지를 업로드하고 다운 받기 위해서는 컨테이너 관련 권한이 필요하다. ECR 관련해서는 AmazonEC2ContainerRegistryFullAccess에 필요한 권한이 있으니 참고하자. (생성한 IAM 계정의 키 페어는 잘 기록해두자)

3. AWS CLI에 IAM 등록aws configure
명령어를 통해서 IAM 키 페어를 등록할 수 있다. ECR 관리 권한이 있는 IAM 계정을 등록해야 정상적으로 이미지를 업로드하고 다운 받을 수 있다.
4. 기존의 Docker Image 푸시하기
생성한 Repository에 접속하면, ‘푸시명령보기’라는 버튼이 활성화된다. 도커 이미지를 푸시 하기 위한 방법이 적혀있다. 이미 이미지는 생성했기 때문에, 2번은 생략 가능하다.

여기까지 ECS로 서비스를 운영하기 전, ECR에 도커 이미지를 올리는 과정을 살펴봤다. 다음 글에서는 ECR에 등록된 이미지로 ECS로 서비스를 운영하고 어떤 방법으로 관리하는지 살펴보도록 하자.
'Study > MLOps' 카테고리의 다른 글
AWS Container Support Service (3/3) (0) | 2024.04.16 |
---|---|
AWS Container Support Service (1/3) (0) | 2024.03.07 |
근본의 Ansible? (0) | 2024.01.03 |
Slurm과 Kubernetes 정답은? (0) | 2023.12.06 |
도대체 MLOps는 무엇일까? (1) | 2023.11.21 |