$ yh.log
[AWS 자격증] AWS Containers (Docker, ECS, ECR, EKS) 정리

[AWS 자격증] AWS Containers (Docker, ECS, ECR, EKS) 정리

AWSDockerECSECREKSFargate자격증

작성자 : 오예환 | 작성일 : 2026-01-11 | 수정일 : 2026-01-11

1. Docker 개요

Docker란?

  • 앱 배포를 위한 소프트웨어 개발 플랫폼
  • 앱을 컨테이너에 패키징하여 어떤 OS에서든 실행 가능

Docker의 장점

장점설명
이식성어떤 머신에서든 동일하게 실행
호환성호환성 문제 없음
예측 가능동작 예측 가능
효율성유지보수/배포 용이
범용성모든 언어, OS, 기술 지원

사용 사례

  • 마이크로서비스 아키텍처
  • On-premises → AWS 클라우드 마이그레이션 (Lift-and-shift)

2. Docker vs Virtual Machines

비교

┌─────────── VM ───────────┐    ┌─────────── Docker ──────────┐

  ┌─────┐ ┌─────┐ ┌─────┐│  ┌───┐ ┌───┐ ┌───┐ ┌───┐
 App App App ││  │App│ │App│ │App│ │App│
  ├─────┤ ├─────┤ ├─────┤│  └───┘ └───┘ └───┘ └───┘
  │Guest│ │Guest│ │Guest││  ┌──────────────────────┐
 OS OS OS  ││    Docker Daemon
  └─────┘ └─────┘ └─────┘│  └──────────────────────┘
  ┌──────────────────────┐│  ┌──────────────────────┐
      Hypervisor      ││   Host OS (EC2)      │    │
  └──────────────────────┘│  └──────────────────────┘
  ┌──────────────────────┐│  ┌──────────────────────┐
       Host OS        ││    Infrastructure
  └──────────────────────┘│  └──────────────────────┘
  ┌──────────────────────┐│
    Infrastructure    ││
  └──────────────────────┘│
└──────────────────────────┘    └──────────────────────────────┘
구분VMDocker
리소스Guest OS마다 별도Host와 리소스 공유
오버헤드높음낮음
밀도낮음높음 (하나의 서버에 많은 컨테이너)

3. Docker 이미지 저장소

Docker Repository 종류

저장소유형설명
Docker HubPublic기본 이미지 (Ubuntu, MySQL 등)
Amazon ECRPrivate/PublicAWS 관리형 컨테이너 레지스트리

Docker 워크플로우

Dockerfile Build Image Push Docker Repository (ECR)

                      Pull

                       Run Container

4. AWS 컨테이너 서비스 개요

서비스설명
Amazon ECSAWS 자체 컨테이너 플랫폼
Amazon EKSAWS 관리형 Kubernetes
AWS Fargate서버리스 컨테이너 플랫폼 (ECS/EKS와 함께 사용)
Amazon ECR컨테이너 이미지 저장소

5. Amazon ECS (Elastic Container Service)

Launch Type 비교

구분EC2 Launch TypeFargate Launch Type
인프라 관리직접 관리 (EC2 프로비저닝)서버리스 (관리 불필요)
ECS AgentEC2에 설치 필요불필요
스케일링EC2 + Task 모두 관리Task만 증가
복잡도높음낮음

EC2 Launch Type

┌─────────────── ECS Cluster ───────────────┐

  ┌──────────┐  ┌──────────┐  ┌──────────┐
   EC2   EC2   EC2
 Instance Instance Instance

  │┌────────┐│  │┌────────┐│  │┌────────┐│
  ││ECS Agent│  ││ECS Agent│  ││ECS Agent│
  │└────────┘│  │└────────┘│  │└────────┘│
  │┌────────┐│  │┌────────┐│  │┌────────┐│
  ││  Task  ││  ││  Task  ││  ││  Task  ││
  │└────────┘│  │└────────┘│  │└────────┘│
  └──────────┘  └──────────┘  └──────────┘
└────────────────────────────────────────────┘

Fargate Launch Type

┌─────────────── ECS Cluster (Fargate) ───────────────┐

   ┌──────┐  ┌──────┐  ┌──────┐  ┌──────┐  ┌──────┐
 Task Task Task Task Task
   └──────┘  └──────┘  └──────┘  └──────┘  └──────┘

        서버리스! EC2 인스턴스 관리 불필요
└──────────────────────────────────────────────────────┘

6. ECS IAM Roles

Role 유형

Role적용 대상용도
EC2 Instance ProfileEC2 Launch Type만ECS Agent 사용
ECS Task Role각 TaskTask별 AWS 서비스 접근

EC2 Instance Profile 용도

  • ECS 서비스에 API 호출
  • CloudWatch Logs에 로그 전송
  • ECR에서 Docker 이미지 Pull
  • Secrets Manager / SSM Parameter Store 접근

ECS Task Role

  • Task Definition에 정의
  • 각 서비스별 다른 Role 부여 가능
  • 예: Task A → S3 접근, Task B → DynamoDB 접근
┌─────────────────────────────────────────────┐
              EC2 Instance
  ┌─────────────────────────────────────────┐│
         EC2 Instance Profile            ││
  (ECS Agent용: ECR Pull, CloudWatch)    ││
  └─────────────────────────────────────────┘│

  ┌──────────────┐   ┌──────────────┐
    Task A    Task B

 Task Role A Task Role B
 (S3 접근)    │   │ (DynamoDB)   │        │
  └──────────────┘   └──────────────┘
└─────────────────────────────────────────────┘

7. ECS Load Balancer 연동

지원 Load Balancer

Load Balancer권장비고
ALB✅ 권장대부분의 사용 사례
NLB특수 목적고성능, AWS PrivateLink 연동
CLB❌ 비권장고급 기능 없음, Fargate 미지원

EC2 Launch Type - Dynamic Host Port Mapping

┌─────────────────────────────────────────────┐
                    ALB
                  80/443
└─────────────────────────────────────────────┘

        ┌────────────┼────────────┐

    ┌───────┐    ┌───────┐    ┌───────┐
 36789 39586 39748 Dynamic Host Port
 Task Task Task
 (80)  │    │ (80)  │    │ (80)  │  ← Container Port
    └───────┘    └───────┘    └───────┘
  • Container Port만 정의하면 Host Port 자동 할당
  • EC2 Security Group: ALB Security Group의 모든 포트 허용 필요

Fargate - 고유 Private IP

┌─────────────────────────────────────────────┐
                    ALB
                  80/443
└─────────────────────────────────────────────┘

        ┌────────────┼────────────┐

    ┌───────┐    ┌───────┐    ┌───────┐
  80  80  80
 Task Task Task
    │172.16.│    │172.17.│    │172.18.│ 고유 Private IP
    └───────┘    └───────┘    └───────┘
  • 각 Task에 고유 Private IP 할당
  • Host Port 개념 없음 (Container Port만 사용)

8. ECS Data Volumes

EFS (Elastic File System)

항목설명
지원EC2 + Fargate 모두
특징여러 AZ의 Task가 동일 데이터 공유
조합Fargate + EFS = 완전 서버리스

⚠️ S3는 파일 시스템으로 마운트 불가

Bind Mounts (임시 스토리지)

  • 같은 Task Definition 내 여러 컨테이너 간 데이터 공유
  • EC2 Tasks: EC2 인스턴스 스토리지 사용
  • Fargate Tasks: Ephemeral 스토리지 (20~200GiB, 기본 20GiB)

Sidecar 패턴 예시:

┌─────────────── ECS Task ───────────────┐

  ┌───────────────┐  ┌───────────────┐
  Application   Sidecar
   Container  (Logs/Metrics)│ │

    write ─────┼──┼──→ read
  └───────────────┘  └───────────────┘

          └───────┬───────────┘

          ┌───────▼───────┐
  Bind Mount
  (/var/logs/) │             │
          └───────────────┘
└─────────────────────────────────────────┘

9. ECS Auto Scaling

ECS Service Auto Scaling (Task 레벨)

메트릭설명
CPU Utilization평균 CPU 사용률
Memory Utilization평균 메모리 사용률
ALB Request Count Per TargetALB 요청 수

스케일링 유형

유형설명
Target Tracking특정 CloudWatch 메트릭 목표값 기준
Step ScalingCloudWatch Alarm 기준
Scheduled Scaling예약 시간 기준

EC2 Launch Type - 인스턴스 스케일링

방법설명
Auto Scaling GroupCPU 사용률 기반 EC2 추가
ECS Cluster Capacity ProviderTask 용량 부족 시 자동으로 EC2 추가 (권장)

💡 ECS Service Auto Scaling (Task) ≠ EC2 Auto Scaling (Instance)

💡 Fargate Auto Scaling이 훨씬 간단! (서버리스라 인스턴스 관리 불필요)


10. ECS Rolling Updates

설정 파라미터

파라미터설명범위
Minimum Healthy Percent유지해야 할 최소 Task 비율0~100%
Maximum Percent허용할 최대 Task 비율100~200%

예시 1: Min 50%, Max 100%

시작: [v1] [v1] [v1] [v1]  (4개)
   2개 종료 (50% 유지)
단계1: [v1] [v1]
   2개 v2 생성
단계2: [v1] [v1] [v2] [v2]
   v1 2개 종료
단계3: [v2] [v2]
   2개 v2 생성
완료: [v2] [v2] [v2] [v2]

예시 2: Min 100%, Max 150%

시작: [v1] [v1] [v1] [v1]  (4개)
   2개 v2 추가 생성 (150%)
단계1: [v1] [v1] [v1] [v1] [v2] [v2]
   v1 2개 종료
단계2: [v1] [v1] [v2] [v2]
   2개 v2 추가 생성
단계3: [v1] [v1] [v2] [v2] [v2] [v2]
   v1 2개 종료
완료: [v2] [v2] [v2] [v2]

11. ECS Task 트리거 패턴

EventBridge로 Task 호출

이벤트 기반 (S3 업로드 시):

S3 Upload EventBridge ECS Task (Fargate)

                              ├─→ S3에서 객체 가져오기
                              └─→ DynamoDB에 결과 저장

스케줄 기반 (배치 처리):

EventBridge (매 1시간) → ECS Task → S3 배치 처리

SQS Queue 패턴

SQS Queue ←─── Messages

     └─→ ECS Service (Auto Scaling)

              ├─→ Task 1 (Poll)
              ├─→ Task 2 (Poll)
              └─→ Task 3 (Poll)

EventBridge로 Task 종료 감지

ECS Task 종료 EventBridge SNS 관리자 이메일 알림

12. ECS Task Definition

Task Definition이란?

  • ECS에게 Docker 컨테이너 실행 방법을 알려주는 JSON 메타데이터

포함 정보

항목설명
Image NameDocker 이미지
Port BindingContainer/Host 포트 매핑
Memory/CPU리소스 요구량
Environment Variables환경 변수
Networking네트워크 설정
IAM RoleTask Role
LoggingCloudWatch 등 로깅 설정

💡 하나의 Task Definition에 최대 10개 컨테이너 정의 가능


13. ECS 환경 변수

환경 변수 소스

소스용도예시
Hardcoded고정 값URL
SSM Parameter Store민감한 변수API 키, 공유 설정
Secrets Manager민감한 변수DB 비밀번호
S3 (Environment Files)대량 환경 변수.env 파일
┌───────────────────┐
  Task Definition

  ┌─→ SSM Parameter Store (fetch values)

  ├─→ Secrets Manager (fetch values)

  └─→ S3 Bucket (fetch files)
└───────────────────┘

14. ECS Task Placement (EC2 Launch Type만)

Task Placement 프로세스

1. CPU, Memory, Port 요구사항 만족하는 인스턴스 식별

2. Task Placement Constraints 만족하는 인스턴스 식별

3. Task Placement Strategies 적용

4. 인스턴스 선택

Task Placement Strategies

전략설명장점
BinpackCPU/Memory 가장 적게 남은 인스턴스에 배치비용 절감 (EC2 수 최소화)
Random무작위 배치단순함
Spread지정 값 기준으로 균등 분산고가용성 (AZ 분산)

Spread 예시 (AZ 기준):

us-east-1a        us-east-1b        us-east-1c
┌──────────┐     ┌──────────┐     ┌──────────┐
   EC2   EC2   EC2
  [Task]  │     │  [Task]  │     │  [Task]  │
└──────────┘     └──────────┘     └──────────┘

Task Placement Constraints

제약설명
distinctInstance각 Task를 다른 EC2에 배치
memberOf특정 조건 만족하는 EC2에만 배치 (Cluster Query Language)

💡 Strategies 조합 가능: 예) Spread(AZ) + Binpack(Memory)


15. Amazon ECR (Elastic Container Registry)

ECR이란?

  • AWS 관리형 Docker 이미지 저장소
  • Private + Public 레지스트리 지원
  • ECS와 완전 통합, S3 백엔드

기능

기능설명
이미지 취약점 스캔보안 취약점 탐지
버전 관리이미지 버전 관리
이미지 태그태그로 이미지 구분
Lifecycle 정책오래된 이미지 자동 삭제

ECR 사용 (AWS CLI)

# 1. ECR 로그인
aws ecr get-login-password --region region | \
  docker login --username AWS \
  --password-stdin aws_account_id.dkr.ecr.region.amazonaws.com
 
# 2. 이미지 Push
docker push aws_account_id.dkr.ecr.region.amazonaws.com/demo:latest
 
# 3. 이미지 Pull
docker pull aws_account_id.dkr.ecr.region.amazonaws.com/demo:latest

⚠️ 이미지 Pull 실패 시 IAM 권한 확인!


16. AWS Copilot

Copilot이란?

  • 컨테이너 앱의 빌드, 릴리스, 운영을 위한 CLI 도구
  • 인프라 설정 대신 앱 개발에 집중

지원 서비스

  • Amazon ECS
  • AWS Fargate
  • AWS App Runner

기능

기능설명
인프라 자동 프로비저닝ECS, VPC, ELB, ECR 자동 설정
자동 배포CodePipeline 연동
다중 환경dev, staging, prod 등
운영 지원로그, 헬스 체크, 트러블슈팅

17. Amazon EKS (Elastic Kubernetes Service)

EKS란?

  • AWS 관리형 Kubernetes 클러스터
  • ECS의 대안 (같은 목표, 다른 API)

특징

항목설명
오픈소스Kubernetes는 오픈소스
클라우드 무관Azure, GCP에서도 사용 가능
마이그레이션기존 K8s 환경에서 AWS로 이전 시 유리
리전당 클러스터멀티 리전 = 리전별 EKS 클러스터
모니터링CloudWatch Container Insights

ECS vs EKS

구분ECSEKS
기술AWS 자체Kubernetes (오픈소스)
이식성AWS 종속클라우드 무관
학습 곡선낮음높음
사용 시점AWS 전용K8s 경험 있거나 멀티클라우드

EKS Node Types

유형설명관리
Managed Node GroupsEKS가 EC2 생성/관리AWS 관리
Self-Managed Nodes직접 EC2 생성/등록직접 관리
AWS Fargate서버리스노드 관리 불필요

EKS Data Volumes (CSI 드라이버)

스토리지Fargate 지원
Amazon EBS
Amazon EFS
Amazon FSx for Lustre
Amazon FSx for NetApp ONTAP

핵심 비교 요약

ECS vs EKS vs Fargate

구분ECSEKSFargate
유형컨테이너 오케스트레이션K8s 오케스트레이션서버리스 컴퓨팅
인프라 관리EC2 관리 필요Node 관리 필요불필요
호환성AWS 전용K8s 호환ECS/EKS와 함께 사용
복잡도낮음높음가장 낮음

IAM Role 요약 (ECS)

Role대상용도
EC2 Instance ProfileEC2ECS Agent (ECR Pull, CloudWatch)
ECS Task Role각 TaskAWS 서비스 접근 (S3, DynamoDB 등)