Developing

패스트캠퍼스 캐시백 챌린지 35일차 본문

Devops/Fastcampus 캐시백 챌린지

패스트캠퍼스 캐시백 챌린지 35일차

DEV_BLOG 2022. 5. 22. 22:42

 

 

수강 인증샷

 

AWS ECR에 컨테이너 업로드해보는 클립을 수강하는식으로 챌린지를 진행하였다. 이전에 들어보지 못했던 서비스인데 이런식으로 docker 관리를 할 수 있다는 것을 알 수 있었다. 그외에도 AWS cli를 위한 인증등의 과정도 알 수 있었고, docker tag 명령어도 사용해보았다. 다음 포스팅은 AWS Fargate을 통한 배포와 관련된 포스팅을 다룰 예정이다.

 

 

 

AWS ECR

 

  • Elastic Container Registry

⇒ 컨테이너 저장소로 용량이나 size를 마음대로 조절할 수 있다.

 

AWS Docker 배포방식

 

  • 프로젝트 배포용 개발 파일들을 도커 이미지로 각각 생성해서 컨테이너로 각각 생성해둔다.
  • 컨테이너가 서버내에 위치하기보다는 외부에 두는 것이 좋다.(다른 서버에서 똑같은 이미지를 여러번 만드는 번거로움이 없도록)

⇒ AWS ECR이 있기전에도 Docker Registry라는 것이 존재하였음

⇒ 자체적으로 제작해둔 Docker Registry라는 컨테이너 저장소를 만들어놨는데, 같은 기능을 ECR에서 제공을 해준다.

 

  • Option 1

⇒ 개발한 뒤 도커이미지를 생성하고 외부 레지스트리에 등록하고(django+nginx registry), 그 다음에 등록된 이미지를 ECS(Elcastic Container Service)라는 서비스를 통해 여러가지 EC2에 배포한다.

⇒ 예전에는 ECS와 ECR이 다른 개념이었는데 최근에는 AWS상에서 ECS안에 ECR이 포함되도록 하고있다..

⇒ 살짝 고전적인 방식이며 노가다가 필요하다. 관리이슈가 커진다.(도커 이미지도 관리해야하고 생성한 컨테이너가 들어가는 EC2도 관리해야함.) 관리이슈를 해결하기 위해 Option2 방식을 사용한다.

 

  • Options 2

⇒ 저장소까지는 Option 1과 동일한데 배포하는 과정이 다르다. 이전까지는 EC2라는 서버를 만들어서 거기에 띄워서 배포했었는데 AWS Fargate를 활용하면 마치 ECS와 EC2를 동시에 활용하는 것과 같은 효과를 얻게 된다. (관리이슈를 위해 노가다를 줄이기 위한 서비스다.) AWS Fargate에 올려놓기만해도 EC2서버 하나를 운영하는 효과를 얻게 된다.

 

 

AWS CLI

 

  • AWS 명령줄 인터페이스는 AWS 서비스를 관리하는 통합 도구이다.
  • EC2나 fargete 만들다던지 autoscaling 설정 등을 gui로 클릭으로 만드는 것은 ui적으로 직관적이라서 편한데 자동화가 어렵다는 점이 있다. 코드를 이용해서 aws cli를 이용해서 Command line에서 실행시킬 수 있다.

 

ECR 컨테이너 업로드 실습

EC2를 하나 생성해주고 Name tag는 docker-ECR 정도로 해두자.

docker를 다운받는다.

curl -fsSL <https://get.docker.com/> | sudo sh

 

권한 등록을 해준다. (빌드할때 문제가 없도록)

sudo usermod -aG docker $USER

 

private repo에있는것을 deploy keys로 연결해주어도 되지만 authentication 설정하지않도록 예시 repo를 clone해준다.

mkdir docker-server
cd docker-server

git clone <https://github.com/SongGeunil1/fastcampus_test.git>

 

dockerFile을 만들어준다. (지난번과 마찬가지로 같은 dockerfile을 사용한다.)

vi Dockerfile
FROM python:3.10.4

ENV PYTHONUNBUFFERED 1

RUN apt-get -y update
RUN apt-get -y install vim

RUN mkdir /srv/docker-django
ADD . /srv/docker-django

WORKDIR /srv/docker-django

RUN pip install --upgrade pip
RUN pip install -r requirements.txt

EXPOSE 8000
CMD ["python" , "manage.py" , "runserver", "0.0.0.0:8000"]

 

docker image를 빌드해준다.

docker build -t ecr/django .

docker에 tag를 달아줄건데, Image ID를 넣어주고 ECR에서 생성한 레지스트리를 넣어주어야한다.

아직 저장소 생성을 안했기에 aws에서 ECS를 검색해주고, 리포지토리 페이지로 진입한다.

 

 

 

 

리포지토리 생성을 선택한다.

 

 

 

리포지토리 이름은 fargate_django 정도로 해두고 하단의 리포지토리 생성을 눌러준다.

 

 

 

이제 이 URL 주소를 복사하고, docker tag로 다음과 같은 command를 입력해준다.

docker tag [Image ID] [URI]

 

 

AWS상에서 실행하고싶은 작업들을 cli에서 사용하고싶으면 AWS cli를 설치해야한다.

sudo apt install awscli

 

aws login 명령어를 치기전에 aws configure를 통해 aws 사용자임을 알려야한다.

aws 서비스의 IAM 페이지로 진입해준다.

 

프로그래밍 방식 엑세스를 선택해준다.

 

 

administratoracess는 다양한 권한설정을 할 수 있기에 선택해준다.

 

이제 access key 값이 나올 것이다. aws configure에서 사용자인증을 해주자.

 

aws configure

- AWS Access Key Id [None] : 첫번째 Access ID
- AWS Secret Access [None] : 비밀 액세스 키

 

아래와 같은 명령어를 입력해주면, 매우 긴 내용이 출력될 것이다. 그 긴 값을 모두 복사해서 그대로 쳐주면 된다. Login succeeded가 출력되면 성공적이다.

aws ecr get-login --no-include-email --region ap-northeast-2

 

로그인을 했으니 image에 fargate_django 라는 레지스트리에 업로드를 할 것이라는 태깅을 해주었으니(docker tag) 이제 올려주자.

docker push [URI]

 

URL 뒤에 : 를 붙여서 따로 이름을 설정해주지 않으면 저렇게 latest 라는 태그로 생성된다.

 

 

ECS는 굉장히 과금이 나간다고한다..^^;; 꼭 실습하고 바로 삭제해주자.

 

 

 

 

 

 

https://bit.ly/3L3avNW

 

패스트캠퍼스 [직장인 실무교육]

프로그래밍, 영상편집, UX/UI, 마케팅, 데이터 분석, 엑셀강의, The RED, 국비지원, 기업교육, 서비스 제공.

fastcampus.co.kr

* 본 포스팅은 패스트캠퍼스 환급 챌린지 참여를 위해 작성되었습니다.