Docker Overview
Docker คือ software platform สำหรับ deploy applications ใน containers — package app + dependencies เข้าด้วยกัน ทำให้รันได้ทุกที่บนทุก OS โดยไม่มีปัญหา compatibility
- รันได้ทุก OS (Linux, Windows, Mac) — ไม่มีปัญหา compatibility ระหว่างเครื่อง
- Predictable — ทำงานเหมือนกันทุกที่ ลดปัญหา "it works on my machine"
- ทำงานน้อยลง, maintain ง่ายขึ้น, deploy เร็วขึ้น
- ใช้ได้กับทุก programming language และทุก OS
- เหมาะกับ microservices architecture และ modern app deployment
Docker Repositories
Public: Docker Hub (https://hub.docker.com) — public registry ที่ใหญ่ที่สุด | Private: Amazon ECR (Elastic Container Registry) — private registry บน AWS
Docker vs Virtual Machine (VM)
Docker containers share kernel และ resources กับ host OS — เบา เร็ว รัน containers ได้หลายตัวบน server เดียว มี efficiency มากกว่า VMs ที่ต้องรัน full OS แยก
Amazon ECS (Elastic Container Service)
Amazon ECS คือ container orchestration service ของ AWS — ใช้ launch Docker containers บน AWS โดย AWS จัดการ start/stop containers ให้
- Launch Docker containers บน AWS = launch ECS Tasks
- ใน EC2 Launch Type: เราเป็นคน provision และ maintain EC2 instances ที่รัน containers
- AWS จัดการ start/stop containers ให้บน infrastructure ของเรา
- Integrate กับ ALB (Application Load Balancer) สำหรับกระจาย traffic ไปยัง containers
- Integrate กับ IAM, CloudWatch, ECR และ AWS services อื่นๆ
AWS Fargate
AWS Fargate คือ launch type ที่ให้รัน Docker containers บน AWS โดยไม่ต้องจัดการ infrastructure เลย — เป็น serverless สำหรับ containers
- Serverless — ไม่มี EC2 instances ให้ดูแล, ไม่ต้อง provision/patch/scale
- AWS จะรัน containers ให้ตาม CPU + RAM ที่เรากำหนด
- ง่ายกว่า ECS + EC2 มาก — เหมาะกับทีมที่ไม่อยากดูแล server
- จ่ายเฉพาะ resource ที่ container ใช้จริง (per-second billing)
- ใช้ได้กับทั้ง ECS และ EKS
Amazon ECR (Elastic Container Registry)
Amazon ECR คือ private Docker image repository บน AWS — ใช้เก็บ Docker images ก่อนนำไป deploy ผ่าน ECS หรือ EKS
- Private repository สำหรับ Docker images (มี public option ด้วย — ECR Public)
- Fully integrated กับ ECS — pull images ได้เร็วเพราะอยู่ใน AWS network
- Backed by Amazon S3 — เก็บ images บน S3 (durable + encrypted at rest)
- Access ควบคุมด้วย IAM — security ดี, กำหนดได้ว่าใคร push/pull images ได้
- รองรับ image scanning หา vulnerabilities อัตโนมัติ
Amazon EKS (Elastic Kubernetes Service)
Amazon EKS คือ managed Kubernetes service บน AWS — ช่วยรัน Kubernetes clusters โดยไม่ต้อง manage control plane เอง
- Managed Kubernetes — AWS จัดการ control plane (API server, etcd, scheduler) ให้
- Compatible กับ on-premises Kubernetes 100% — migrate มาได้ง่าย
- เหมาะเมื่อ ทีมรู้จัก Kubernetes อยู่แล้ว หรือต้องการ multi-cloud portability
- รองรับทั้ง EC2 Nodes (จัดการเอง/managed groups) และ Fargate (serverless)
- ใช้ K8s ecosystem ทั้งหมด: kubectl, Helm, add-ons ต่างๆ
EKS vs ECS
EKS = open-source Kubernetes (portable, K8s ecosystem) | ECS = AWS proprietary (ง่ายกว่า, integrate AWS ดี) — ทั้งคู่รองรับ Fargate
เมื่อไรเลือก EKS
ใช้ K8s อยู่แล้ว, ต้องการ multi-cloud, มีคน expertise K8s, ต้องการ migrate from on-prem Kubernetes
Serverless Concept
Serverless = paradigm ที่ developer ไม่ต้อง manage servers เลย — แค่ deploy code/functions แล้ว AWS จัดการที่เหลือ
- เริ่มต้นจาก FaaS (Function as a Service) เช่น AWS Lambda
- ปัจจุบันรวม managed databases, messaging, storage ที่เป็น serverless ทั้งหมด
- Serverless ไม่ได้แปลว่าไม่มี server — แค่ developer ไม่ต้อง manage หรือ provision เอง
- AWS จัดการ scaling, patching, availability ให้อัตโนมัติ
- Pay per use — ไม่ใช้ก็ไม่จ่าย (ส่วนใหญ่)
AWS Serverless Services ที่เคยเรียน
S3 (storage) | DynamoDB (NoSQL DB) | Fargate (containers) | Lambda (functions) | Aurora Serverless (relational DB)
ไม่ใช่ Serverless
EC2, RDS (ปกติ), ECS + EC2 Launch Type, EKS + EC2 Nodes — services เหล่านี้ยังต้อง provision/manage instances
AWS Lambda
AWS Lambda คือ virtual functions — รัน code โดยไม่มี servers, รันสั้นๆ (max 15 นาที), ทำงาน on-demand, scaling อัตโนมัติ
Amazon EC2
Virtual servers ใน cloud — ทำงานตลอดเวลา, sized ตาม RAM/CPU, scaling = manual (เพิ่ม/ลด instances เอง หรือ ASG)
AWS Lambda
Virtual functions — on-demand, run สั้นๆ (max 15 นาที), scaling อัตโนมัติ, ไม่มี server ให้ดูแล
- Pay per request + compute time — Free tier: 1M requests/เดือน + 400,000 GB-seconds ฟรี
- Integrated กับ AWS services เกือบทั้งหมด
- Event-driven — function ทำงานเมื่อมี event เข้ามาเท่านั้น
- รองรับหลาย languages: Node.js, Python, Java, C#, Go, Ruby, Custom Runtime
- Monitoring ผ่าน CloudWatch
- RAM สูงสุด 10GB per function — ยิ่ง RAM เยอะ → ได้ CPU + network bandwidth เพิ่มขึ้นด้วย
Common Lambda Triggers
API Gateway, S3 (events), DynamoDB Streams, CloudWatch Events / EventBridge, SQS, SNS, Kinesis
Common Use Cases
Serverless API backends, image/file processing on S3 upload, scheduled cron jobs, real-time stream processing, event-driven automation
Amazon API Gateway
Amazon API Gateway คือ fully managed service สำหรับ create, publish, maintain, monitor และ secure APIs ที่ scale ใหญ่ — เป็น serverless และ scalable
- Serverless + scalable — ไม่ต้อง manage server
- รองรับ RESTful APIs และ WebSocket APIs (real-time)
- ฟีเจอร์ครบ: security, authentication, API throttling, API keys, monitoring
- ใช้ร่วมกับ Lambda เป็น serverless REST API ที่นิยมที่สุด
- Integrate ได้กับ Lambda, EC2, on-prem services, AWS services อื่นๆ
AWS Batch
AWS Batch คือ fully managed service สำหรับรัน batch processing jobs ที่ scale ใหญ่ (รันได้ 100,000+ jobs)
- Batch job = job ที่มี start และ end ชัดเจน (ไม่ใช่ continuous service)
- AWS Batch launch EC2 instances หรือ Spot Instances ให้แบบ dynamic ตามจำนวน jobs
- Provisions CPU + memory ที่เหมาะสมกับแต่ละ job อัตโนมัติ
- Jobs ถูกกำหนดเป็น Docker images และรันบน ECS
- เราแค่ submit jobs — AWS จัดการ scheduling, scaling, retry ให้
AWS Batch
ไม่มี time limit | runtime อะไรก็ได้ (ผ่าน Docker) | ใช้ EBS / Instance Store | รันบน EC2-based infrastructure
AWS Lambda
มี time limit (15 นาที) | runtime จำกัด (ที่ AWS รองรับ) | temporary disk เท่านั้น | Serverless สมบูรณ์
Amazon Lightsail
Amazon Lightsail คือบริการที่รวม virtual servers + storage + databases + networking ในที่เดียว ราคาถูกและ predictable — ง่ายกว่า EC2/RDS/ELB/EBS มาก เหมาะกับ beginners
- Low + predictable pricing — ราคาเริ่มต้นไม่กี่ดอลลาร์/เดือน
- Simpler กว่าใช้ EC2 + RDS + ELB + EBS แยก
- เหมาะกับ beginners ที่ยังไม่คุ้นกับ AWS services
- มี templates สำเร็จรูป: LAMP, Nginx, MEAN, Node.js, WordPress, Magento, Joomla และอื่นๆ
- High Availability ได้ แต่ไม่มี auto-scaling
- Limited integrations กับ AWS services อื่นๆ (ไม่เหมือน EC2 ที่ integrate ลึก)
Use Cases
Simple web applications, websites (เช่น WordPress), dev/test environments, small business apps, การเรียนรู้ AWS เบื้องต้น
ไม่เหมาะกับ
Production workloads ขนาดใหญ่ที่ต้อง auto-scaling, high traffic, deep AWS integrations → ใช้ EC2 + Auto Scaling แทน
ECS vs EKS vs Fargate Comparison
AWS มี container services หลายตัว ต้องแยกให้ออกว่าตัวไหนเป็น orchestrator, ตัวไหน serverless, และเลือกใช้ตอนไหน:
Amazon ECS
Container orchestrator: ใช่ (AWS proprietary) | Control plane: AWS manages | Launch types: EC2 + Fargate | เลือกเมื่อ: ใช้ AWS เป็นหลัก, ต้องการความง่าย, ไม่มี K8s expertise
Amazon EKS
Container orchestrator: ใช่ (Kubernetes) | Control plane: AWS manages K8s control plane | Launch types: EC2 Nodes + Fargate | เลือกเมื่อ: ใช้ K8s อยู่แล้ว, ต้องการ multi-cloud portability
AWS Fargate
Container orchestrator: ไม่ใช่ (เป็น compute engine) | Control plane: ไม่มี (serverless) | Launch types: ใช้ร่วมกับ ECS หรือ EKS | เลือกเมื่อ: ต้องการ serverless containers, ไม่อยาก manage EC2
Amazon ECR
Container orchestrator: ไม่ใช่ (เป็น registry) | ใช้เก็บ Docker images | ใช้ร่วมกับ ECS หรือ EKS | Backed by S3, controlled by IAM
Lambda Summary
AWS Lambda = serverless Function as a Service (FaaS) — สรุปประเด็นหลักที่ข้อสอบชอบถาม:
- Serverless FaaS — focus ที่ code, ไม่ดูแล server
- Billing = (compute time) × (RAM allocated) + จำนวน requests — pay per use จริงๆ
- Language support: Node.js, Python, Java, C#, Go, Ruby + Custom Runtime
- 15-minute limit — ถ้านานกว่านี้ใช้ ECS/Fargate/Batch แทน
- Use cases ยอดฮิต: S3 thumbnail generation, serverless cron (CloudWatch Events), REST API ที่อยู่หลัง API Gateway
Other Compute Summary
สรุป Other Compute Services ทั้งหมดที่ต้องรู้สำหรับ CLF-C02 — แต่ละ service มีจุดแข็งและ use case ต่างกัน เลือกให้เหมาะกับ workload
ECS
AWS-native container orchestration — รัน Docker containers บน EC2 หรือ Fargate
Fargate
Serverless compute engine สำหรับ containers — ไม่ต้อง provision EC2 เอง
EKS
Managed Kubernetes — เหมาะกับทีมที่ใช้ K8s อยู่แล้วหรือต้องการ multi-cloud
ECR
Private Docker image registry บน AWS — backed by S3, controlled by IAM
Lambda
Serverless FaaS — รันสั้นๆ (max 15 นาที), event-driven, pay per execution
API Gateway
Managed REST/WebSocket APIs — มักใช้คู่ Lambda เป็น serverless API
AWS Batch
รัน batch jobs ขนาดใหญ่บน EC2/Spot ผ่าน Docker — ไม่จำกัดเวลา
Lightsail
บริการรวม VM + DB + networking ราคาถูก predictable เหมาะ beginners
- Short event-driven function → Lambda
- Long-running batch jobs (>15 นาที) → AWS Batch
- Containers แบบ serverless → Fargate (กับ ECS หรือ EKS)
- ใช้ Kubernetes อยู่แล้ว → EKS
- AWS-native + ง่าย → ECS (EC2 หรือ Fargate launch type)
- Simple website / dev-test → Lightsail