docker, ecs fargate 배포 기록

soob·2024년 2월 5일
0

deploy

목록 보기
4/4

배포순서

  1. Dockerfile 작성
  2. 이미지 생성
  3. 컨테이너 만들고 실행 테스트
    AWS-----
  4. AWS ECR에 이미지 푸시
  5. ECS 클러스터 생성
  6. 태스크 정의
  7. 서비스 만들기

Dockerfile

docker 문서에 있는 react 예제를 그대로 사용했다.
빌드한 파일을 nginx로 띄우는 이미지를 생성했다.
(서버사이드렌더링인 경우엔 노드를 실행 시킨다.)

FROM node:18 AS build
WORKDIR /app
COPY package.* yarn.lock ./

RUN yarn install
COPY . .
RUN yarn build

FROM nginx:alpine
COPY --from=build /app/build /usr/share/nginx/html

aws ECR에 이미지 푸시

ECR(Elastic Container Registry): Amazon에서 제공하는 컨테이너 이미지 저장소

aws ECS에 들어가면 왼쪽 메뉴에 ECR 메뉴가 있다. 들어가서 생성.

ECR에 프라이빗으로 리포지토리를 만든다.


푸시명령 보기를 클릭하고 순서에 따라 이미지를 리포지토리에 푸시한다.

ECS 클러스터 생성

클러스터(cluster) : 작업 또는 서비스의 논리적 그룹. 클러스터를 실행하여 작업을 실행할 수 있다.

클러스터 메뉴에 들어가서 생성 메뉴에 들어가 이름을 써준다.
ec2 설정을 따로 해주지 않고 Fargate(서버리스 환경)를 선택해서 배포할 예정이다.

태스크 정의

태스크 정의(task definition) : 애플리케이션을 구성하는 파라미터 및 하나 이상의 컨테이너를 설명하는 JSON 형식의 텍스트 파일
태스크에 대한 운영체제, 용량, 컨테이너 설정 등을 할 수 있다.
(태스크 정의는 태스크들에 대한 설정들을 하는 곳이다.)

클러스터에서 설정한 유형으로 선택하고 그에 따라 운영체제, CPU/메모리 용량을 선택한다. 나같은 경우는 태스크 크기를 제일 작은 걸로 선택해서 했다.(0.25 vCPU, 메모리는 0.5GB)

필수 컨테이너의 이름, ECR에 푸시한 이미지 URL을 쓰고, 매핑할 포트를 설정한다.

vpc, 서브넷, internet gateway 설정

aws vpc 메뉴에 들어가서
1. vpc를 생성
2. 퍼블릭 서브넷 생성 (vpc 안에 같은 대역의 서브넷을 둘 수 없다.)
3. 인터넷 게이트웨이 연결
4. 라우팅 테이블 연결

서비스 만들기

태스크에 대한 관리를 한다. (스케줄링)
이전에 배포 도전했을 때, 로드밸런스에 대상그룹을 이것저것 바꿔봤는데 그렇게 하면 안되고 서비스 만들 때 vpc와 로드밸런스 설정하기 때문에 따로 로드밸런서 메뉴에서 해줄 것이 없다. 아마 그때 안됐던건 vpc 서브넷 설정을 '퍼블릭 IPv4 주소 자동 할당 활성화'로 바꿔주지 않아서 그랬던 것 같다.



태스크 정의를 패밀리를 선택하고 서비스 이름을 써준다.

이전에 생성한 vpc와 서브넷을 설정하고 보안그룹을 선택한다.
보안그룹에서 프로토콜과 포트번호를 설정한다.

보안그룹 : 인스턴스에 대한 인바운드(외부 - > 인스턴스) & 아웃바운드(인스턴스 - > 외부) 트래픽을 제어하는 가상 방화벽 역할


ALB를 생성한다.

대상그룹을 생성한다.

배포가 완료되면 로드밸런서 DNS 이름 주소로 들어가면 사이트가 뜬다.

참고
docker, ecs
vpc설정
ALB

0개의 댓글