도커는 앱 배포를 위한 Software 개발 플랫폼이다.
앱은 컨테이너에 패키지 되어서 어느 OS 에서도 작동이 가능하다.
마이크로서비스 아키텍처, 온프레미스에서 AWS 클라우드로의 앱 이동 등에 사용된다고 한다.
SErver 관점에서는 모두 도커 컨테이너 이다.
도커 이미지는 도커 리포지토리에 저장된다.
이 repository 는 두개가 있는데
Docker Hub 는 퍼블릭 리포지토리 이고
Amazon ECR 은 프라이빗 리포지토리이다.
아 물론 여기에 퍼블릭 리포지토리도 있다. Amazon ECR Public Gallery...
도커는 가상화의 기술이긴하지만 그건 아님.
그리고 한 서버에서 다수의 컨테이너 공유가 가능하ㅏ다.
Dockerfile 작성 - 도커 컨테이너를 구성하는 파일 작성
도커 이미지 구축 - 작성한 Dockerfile을 사용하여 도커 이미지를 구축. 도커 이미지는 베이스 이미지에 추가 파일 및 설정을 포함하여 생성
도커 이미지 Push - 구축한 도커 이미지를 도커 리포지토리(Docker Hub, Amazon ECR 등)에 저장하기 위해 Push
도커 이미지 Pull - 도커 리포지토리에서 필요한 이미지를 Pull하여 가져옴
도커 컨테이너 실행 - Pull한 도커 이미지를 실행하여 도커 컨테이너로 실행. 이때, 도커 이미지를 구축할 때 사용한 코드와 설정이 실행됨
Amazon Elastic Container Service (Amazon ECS): 도커 관리를 위한 Amazon의 전용 플랫폼
Amazon Elastic Kubernetes Service (Amazon EKS): 쿠버네티스의 관리형 버전 (오픈 소스)
AWS Fargate: Amazon의 서버리스 컨테이너 플랫폼. ECS, EKS 둘 다 함께 작동할 수 있음
Amazon ECR: 컨테이너 이미지를 저장하는데 사용
ECS CLuster 사용할떄는 인프라를 직접 프로비저닝하고 관리해야한다.
각 EC2 Instance 는 ECS Agent 실행해서 ECS Cluster 등록해야함.
인프라를 직접 프로비저닝 하거나 관리할필요없다.
서버리스이다.
확장하기 위해서는 단순히 태스크의 수만 늘리면 된다. EC2 를 사용하지 않으므로 훨씬 간단하게 확장할 수 있다.
EC2 Instance Profile (EC2 Launch Type 전용)
ECS 에이전트에 의해 사용됨
ECS 서비스에 API 호출
컨테이너 로그를 CloudWatch Logs로 전송
ECR에서 Docker 이미지를 가져옴
Secrets Manager나 SSM Parameter Store에 저장된 민감한 데이터를 참조할 수 있음
ECS Task Role
각각의 ECS 태스크에 특정 역할을 할당함
다른 ECS 서비스에 대해 다른 역할을 사용할 수 있음
태스크 정의 (Task definition)에서 태스크 역할 정의
컨테이너가 SQS, S3 등 다른 AWS 서비스를 호출하려고 할 때 사용
ECS Cluster 안에서 ECS 태스크 들이 실행되고 있는데 ALB를 앞에 실앻아면 모든 사용자가 ALB 및 백엔드 ECS 태스크에 직접 연결된다..
NLB 는 처리량 많거나 높은 성능 요구 될때만 사용된다.
EFS 파일 시스템을 ECS 태스크에 마운트 해서 데이터를 공유한다.
Ec2 Launch Type 과 Fargate Launch type 모두 호환된다.
ECS 작업 수를 자동으로 증가/감소 할수 있다.
ECS 의 어떠한 지표를 통해서 ASG 를 Scale in/out 을 할수 있다.
여기서 중요한건 ECS ASG 와 EC2 ASG 는 다르다 ECS 는 task level 이고 EC2 는 Instance level 이다.
AWS 에 도커 이미지를 저장하고 관리하는데 사용 된다.
ECS,S3 와 완전하게 호환된다.
IAM 을 통해서 엑세스르르 제어한다.
AWS 에 관리형 Kubernetes Cluster 를 실행 할수있는 서비스이다.
Kubernetes 는 컨테이너화된 Application의 자동 배포,확장 및 관리를 위한 오픈 소스 시스템이다.
EKS 는 두개의 실행 모드가 있다고 한다.
EC2 는 워커 노드 배포
Fargate 는 서버리스 컨테이너 배포이다.
회사가 이미 온프레미스나 다른 클라우드에서 Kubernetes를 사용하고 있으며, Kubernetes를 사용하여 AWS로 마이그레이션하려는 경우 이걸 사용한다고 한다.
관리형 노드 그룹
노드(EC2 인스턴스)를 생성하고 관리
노드는 EKS에서 관리하는 ASG(Auto Scaling Group)의 일부
온디맨드 또는 스팟 인스턴스를 지원
자체 관리형 노드
사용자가 생성하고 EKS 클러스터에 등록한 노드로, ASG에 의해 관리
Amazon EKS 최적화된 AMI와 같은 미리 빌드된 AMI를 사용할 수 있음
온디맨드 또는 스팟 인스턴스를 지원
AWS Fargate
유지 관리가 필요하지 않으며, 노드 관리가 없음
EKS 클러스터에 데이터 볼륨을 연결하려면 EKS 클러스터에 스토리지 클래스 매니페스트를 지정해야 함
컨테이너 스토리지 인터페이스(CSI) 호환 드라이버를 활용
Amazon EBS, Amazon EFS (Fargate 모드), Amazon FSx for Lustre, Amazon FSx for NetApp ONTAP 지원
웹 애플리케이션과 API를 대규모로 배포하기 쉽게 만드는 완전 관리형 서비스
인프라 경험이 필요하지 않음
소스 코드나 Docker 컨테이너 이미지로 시작함
웹 앱을 자동으로 빌드하고 배포함
오토 스케일링, 고가용성, 로드 밸런싱, 암호화 기능 지원
VPC 액세스 지원
데이터베이스, 캐시, 메시지 대기열 서비스에 연결 가능
사용 사례: 웹 앱, API, 마이크로서비스, 신속한 프로덕션 배포 등