Docker+ECS 배포

Haechan Kim·2024년 3월 14일

MSA 전환

목록 보기
6/7

용어

  • 이미지 : 서비스 운영에 필요한 서버 프로그램, 소스코드, 라이브러리, 컴파일된 실행 환경 모두 묶은 것. 즉 컨테이너 실행 위한 모든 파일과 설정값(환경)

  • 컨테이너 : 앱이 구동되는 환경까지 모두 감싸서 실행하게 하는 격리 기술. 이미지로 컨테이너 생성

  • 컨테이너 런타임 : 컨테이너 다루는 도구. 컨테이너를 만들고 사용할 수 있는 도구

  • Docker : 컨테이너 다루는 도구(컨테이너 런타임) 중 하나.

  • 오케스트레이션 : 여러 서버에 걸쳐 컨테이너와 사용 환경 설정 관리하는 행위

  • 쿠버네티스(k8s) : 컨테이너를 오케스트레이션 하는 도구. 컨테이너 관리 자동화

가상 머신과 컨테이너의 비교

전통적 배포

물리적 컴퓨터(하드웨어)에 하나의 OS 설치하고 여러 프로그램(App)을 설치.
한대의 컴퓨터에서 모두 처리하기 때문에 두 프로그램 간 간섭 가능성, 성능 저하.

가상화 배포

가상 머신(Virtual Machine)기반으로 한 배포.
하이퍼바이저는 하나의 OS에서 VM 여러대 구동할 수 있도록 해주는 중간 계층

전통적 배포에서 프로그램 간 간섭이 있을 때 VM에서 각각 실행시킨다면 간섭 x. CPU와 메모리도 프로그램에 맞게 분배 가능.

가상화 배포는 전통방식 보다는 효율적이지만, VM은 완전한 컴퓨터이고 일일히 OS를 설치해야 하기에 무거운 편.

가상화 배포

하이퍼바이저가 컨테이너 런타임(ex. 도커)로 대체되고,
VM은 컨테이너로 대체.

컨테이너는 VM과 다르게 OS를 매번 설치할 필요가 없고, 하나의 OS만을 사용.

컨테이너는 OS 하단의 동작에 직접 관심을 두지 않기 때문에 가상머신위에 올라간 OS에서도 컨테이너 기반 배포가 가능.
컨테이너는 OS를 공유하기 때문에 프로그램 간 간섭은 없지만, 프로그램이 OS에 문제를 일으킨다면 다른 컨테이너에도 문제가 될 수는 있음.

AWS ECS vs Kubernetes

둘 다 모두 컨테이너 오케스트레이션 서비스이다.
MSA 환경에서는 각 서버를 따로 배포하고 관리해야 하기 때문에 오케스트레이션 툴이 필수적이다.

ECS는 아마존에서, k8s는 구글에서 만든 프레임워크이다.
k8s가 대세이긴 하지만 AWS의 여러 서비스를 사용하고 있기 때문에 다른 AWS간 연계가 좋아 사용하기로 결정했다.

AWS ECS Fargate

ECS는 컨테이너 오케스트레이션 서비스이고, Fargate는 EC의 실행 모드 중 하나로, 서버리스 컴퓨팅을 지원한다.
기존 ECS는 EC2 인스턴스에 컨테이너를 배치라고 관리하지만, Fargate는 EC2 인스턴스를 관리하지 않고 컨테이너 자체만 관리하기 때문에 사용자도 EC2 없이 컨테이너를 실행할 수 있다.

과정 : Github Actions CI/CD로 서버리스 서비스를 배포하자!

도커로 빌드한 이미지를 ECR에 푸시하고, ECS task는 해당 이미지를 pull 하여 Fargate로 배포.

ECR

컨텐이너 이미지 레지스트리 서비스. 도커 허브와 비슷한 역할.
리포지토리를 생성하고 이미지를 push.

<참고>

0개의 댓글