최종 프로젝트
Docker ECS
컨테이너를 사용하는 이유
컨테이너의 특징
- 하드웨어의 가상화를 하지 않고 커널만을 공유한다.
- 하드웨어 에뮬레이션이 없기 때문에 빠른 속도로 빠르게 실행된다.
- 이미지의 용량이 가상 머신에 비해 훨씬 작다.
- 컨테이너 간에 영향을 주지 않으며 도커와 같이 이미지 기반으로 컨테이너를 실행하는 경우 특정 실행 환경을 쉽게 재사용 할 수 있다.
- 실행/패치/업데이트 등 유지 관리와 관련하여 오버헤드가 감소한다.
- 서비스가 세분화 되어 있는 마이크로 서비스 아키텍쳐(MSA)의 특성에 컨테이너의 서비스 별 격리나 확장성 등을 잘 활용할 수 있다.
- 단, 처음 이미지를 정의한 OS에서만 사용 할 수 있다. (리눅스라면 리눅스에서만 윈도우라면 윈도우에서만 가능)
즉, "애플리케이션의 배포/관리를 간단하게 해주고 오버헤드도 적다"라는 특징
도커의 작동 방식
도커에서는 애플리케이션을 실행하기 위한 파일들의 모음을 이미지 라는 개념으로 관리한다. 이미지에는 애플리케이션의 종속성 및 실행에 필요한 정보가 포함되어 있다.
이러한 이미지는 로컬 혹은 도커 허브 등과 같은 원격 저장소에 태그를 붙여 커밋하고, 이 태그로 이미지의 버전을 구분한다.
그리고 커밋한 이미지를 사용하여 컨테이너를 생성함. 생성한 컨테이너에는 포트 포워딩으로 접근할 수 있다.
- 이 중 이미지를 구성하기 위해서 다양한 패키지의 다운로드나 환경 설정 등이 필요
- 하지만 하나하나 직접 작업하는 것은 너무 비효율적이다...
- 이를 해결하기 위해 커밋하는 이미지의 내용(환경 구축의 내용)을 dockerfile이라는 파일에 작성할 수 있다.
서버 간의 컨테이너의 관리는 어떻게 해야할까?
다양한 서버들의 컨테이너를 관리하는 컨테이너 오케스트레이션이라는 개념이 필요하게 되었고 이러한 기능을 하는 것을 컨테이너 오케스트레이션 툴이라고 함
ECS도 이러한 컨테이너 오케스트레이션 서비스의 일종이다.
오케스트레이션 툴의 기능
- 서버의 특성이나 자원, 배포 상태를 파악하여 컨테이너를 할당하는 스케쥴링
- 서버에서 도커를 통해 지정된 컨테이너를 안전하게 실행
- 업그레이드, 롤백 등 서비스의 배포에 관한 대응
- 오류 등의 대응
- 새로운 서버나 컨테이너가 추가되었을 때 발견하는 서비스 디스커버리(service discovery), 서버 간 네트워킹 등의 클러스터 리소스 생성
ECS 관련 서비스
- AWS ECR(Elastic Container Registry)
- AWS Fargate
- 종량제 서버리스 컴퓨팅 엔진. ECS와 EKS 둘 다 호환 가능함.
- AWS ELB(Elastic Load Balancer)
- 로드밸런서
- ALB와 함께 사용하여 동적 포트를 지정할 수 있다.
- AWS VPC
- ECS의 사용에 필요한 네트워크 리소스를 제공하는 서비스.
- AWS IAM
- 클러스터나 서비스 등 다양한 작업의 권한을 설정하는 서비스.
- AWS CloudWatch
- 컨테이너의 각 지표와 로그 등을 확인할 수 있다. 컨테이너형 애플리케이션 및 마이크로 서비스에 대한 모니터링, 트러블 슈팅 및 알람을 위한 서비스인 Container Insight도 제공하고 있음.
ECS의 작동 방식
ECS의 구성 요소는 크게 5가지다.
- Task Definition(작업 정의)
- Task(작업)
- Continer Instacne(컨테이너 인스턴스)
- Service(서비스)
- Cluster(클러스터)

- Task ECS의 최소 단위는 task. 그리고 1개 이상의 컨테이너가 task에 구성됩니다.
- Task Definition task의 구성 요소는 task definition에 json 형식으로 작성되어 있다. 작성된 내용을 참고로 task가 구성된다.
- task definition에서 작업 및 컨테이너가 참고할 이미지, 사용할 리소스 양, 시작 유형, 로깅 구성 등 다양한 매개변수를 정의할 수 있다.
- Service task definition을 참고하여 task를 실행한다. 또한 원하는 수의 task를 유지 관리하는 스케쥴러 역할을 한다.
- 선택적으로 로드 밸런서 뒤에서 실행하여 로드 밸런싱과 오토 스케일링 기능을 할 수 있다.
- Container Instance ECS 컨테이너 에이전트를 실행하고 cluster에 등록된 EC2 인스턴스.
- 리눅스, 윈도우 OS를 지원하며 온프레미스 VM 등의 다른 OS도 지원한다.
- Fargate 시작 유형을 사용하는 task는 서버리스로 배포되므로 container instance는 적용되지 않습니다.
- Cluster container instance(Fargate라면 task)의 논리적 그룹.
따라서 작업 순서는...
- 컨테이너의 이미지를 저장소(ECR)에 커밋
- task definition에서 사용할 이미지 및 시작 유형, 리소스 정의
- cluster 생성
- service가 task definition을 참고하여 task 생성
- elb에 들어온 요청에 따라 오토 스케일링 및 로드 밸런싱