6. Docker คืออะไร? (แบบเข้าใจง่าย)
หน้า 6ลองจินตนาการเรื่อง "สูตรอาหาร" 🍳
ถ้าผมให้ "สูตรกะเพราไก่" (Source Code) คุณไปทำที่บ้าน...
รสชาติอาจจะไม่เหมือนที่ผมทำ เพราะน้ำปลาคนละยี่ห้อ ไฟแรงไม่เท่ากัน
(นี่คือปัญหา "Environment ไม่เหมือนกัน")
Docker = "อาหารกล่องสำเร็จรูป"
เหมือน: "สร้างบ้านใหม่ทั้งหลัง"
- ต้องลง Windows ใหม่ทั้งตัว
- หนักเครื่อง (กิน Ram/CPU เยอะ)
- เปิดช้า (เป็นนาที)
เหมือน: "เช่าห้องโรงแรม"
- แชร์ OS Kernel
- เบามาก (มีแค่แอปที่ต้องใช้)
- เปิดปุ๊บติดปั๊บ (วินาที)
7. Docker Structure (ส่วนประกอบสำคัญ)
หน้า 7คือ "พิมพ์เขียว" บอกว่าแอปต้องใช้อะไร (Python 3.9, copy ไฟล์ไหน)
คือ "แม่พิมพ์" สร้างมาจาก Dockerfile เป็น Read-only
คือ "ร่างโคลนที่ทำงานจริง" สร้างจาก Image สามารถเขียนข้อมูลได้
คือ "ที่เก็บ Image" เช่น Docker Hub
8. Docker Workflow & Commands
หน้า 8คำสั่งที่ใช้บ่อย (Cheatsheet)
docker build -t my-app-name .
docker run -d -p 80:80 my-app-name
docker ps
9. Infrastructure as Code (IaC) คืออะไร?
หน้า 9🏗️ IaC ในมุมมอง DevOps
Infrastructure as Code (IaC) คือการจัดการโครงสร้าง IT ผ่าน"การเขียนโค้ด" แทนการต้องไปกดตั้งค่าเองทีละส่วน (Manual Configuration)
ทำไมถึงสำคัญกับ DevOps?
เก็บ Config ไว้ใน Git เหมือนโค้ด
สร้าง/แก้/ลบ Server โดยอัตโนมัติ
10. ประโยชน์ของ IaC (Why IaC?)
หน้า 10ความเร็ว
สร้าง Server 100 เครื่องได้ในนาที
ความสม่ำเสมอ
ทุกเครื่องเหมือนกันเป๊ะตามโค้ด
ตรวจสอบย้อนกลับ
มี Git history สามารถ rollback ได้
ลดต้นทุน
เปิด-ปิดเครื่องตามต้องการ
Manual vs IaC
🐢 แบบเก่า (Manual)
- 💻 Develop locally
- 📤 ส่ง File ให้ทีม Ops
- 🧪 ทีม QA test ด้วยมือ
- 👤 Ops login server deploy
- 💥 ความเสี่ยง: Human Error
🚀 แบบใหม่ (IaC)
- 💻 Develop locally
- 🚀 Git push → Automatic!
- 🤖 ทดสอบ & Build หลายครั้ง
- ☕ Deploy โดยอัตโนมัติ
- ✨ Bug ลด Error ลด
11. แนะนำ Kubernetes (K8s)
หน้า 11Kubernetes คืออะไร?
ถ้า Docker คือ "ตู้คอนเทนเนอร์" Kubernetes ก็คือ **"กัปตันเรือ"** หรือระบบที่ใช้จัดการตู้คอนเทนเนอร์จำนวนมากๆ (Orchestration) ให้ทำงานประสานกันได้อย่างราบรื่นบน Server หลายเครื่อง (Cluster)
Multi-Node
จัดการ Server หลายเครื่องให้เสมือนเป็นเครื่องเดียว
Load Balancing
กระจาย Traffic ให้แต่ละตู้ทำงานเท่าๆ กัน
Self-Healing
ถ้า App พัง K8s จะสั่งเปิดตู้ใหม่ให้เองอัตโนมัติ
ส่วนประกอบของ Kubernetes
Pod (หน่วยย่อยที่สุด)
เปรียบเสมือน "บ้าน" ของ Container โดยปกติ 1 Pod จะมี 1 Container ทำงานอยู่ภายใน
Node (Server)
คือเครื่องคอมพิวเตอร์จริงหรือ Virtual Machine (EC2) ที่ใช้รัน Pod ต่างๆ
Service (ทางเข้า)
กำหนด IP หรือ Domain Name เพื่อให้คนภายนอกหรือ Pod อื่นเข้าถึงแอปได้
Deployment (ใบสั่งงาน)
บอก K8s ว่าเราต้องการรันแอปกี่เล่ม (Replicas) และใช้ Image เวอร์ชันไหน
12. Auto-Scaling & Self-Healing
หน้า 12📈 Auto-Scaling
เมื่อมีคนเข้าเว็บเยอะจน CPU พุ่งสูง K8s จะสั่ง "ก๊อปปี้" Pod เพิ่มขึ้นมาโดยอัตโนมัติ (Horizontal Pod Autoscaler - HPA) และเมื่อคนน้อยลงก็จะลดจำนวน Pod ลงเองเพื่อประหยัดเงิน
🩹 Self-Healing
ถ้าแอปเรา Error จนค้างหรือดับไป กัปตัน K8s จะตรวจพบทันที (Health Check) แล้วทำการสั่งลบ Pod ที่เสียนั้นทิ้ง และสร้าง Pod ใหม่ขึ้นมาแทนที่ในทันทีโดยที่เราไม่ต้องตื่นมาแก้ตอนตี 3
13. เจาะลึก Terraform (IaC Tool)
หน้า 13🏗️ Terraform คืออะไร?
Terraform คือเครื่องมือประเภท **Infrastructure as Code (IaC)** ยอดนิยมที่พัฒนาโดย HashiCorp ใช้สำหรับสร้าง แก้ไข และจัดการโครงสร้างพื้นฐาน (เช่น Server, Database, Network) บน Cloud ค่ายต่างๆ ผ่าน **"การเขียนโค้ด"** แทนการไปกดคลิกหน้า Console ครับ
🌟 ประโยชน์หลักของ Terraform
Multi-Cloud
เขียนโค้ดชุดเดียว จัดการได้ทั้ง AWS, Azure และ Google Cloud
Speed & Scale
สร้าง Server 100 เครื่องได้ภายในไม่กี่นาทีด้วยคำสั่งเดียว
Version Control
เก็บประวัติการแก้ไขใน Git ทำให้ Rollback หรือตรวจสอบย้อนหลังได้
🔄 ขั้นตอนการใช้งาน (Workflow)
เตรียมสภาพแวดล้อม และดาวน์โหลด Plugin (Providers) ที่จำเป็นมาไว้ในเครื่อง
เปรียบเสมือน "ใบเสนอราคา" Terraform จะตรวจสอบและบอกเราว่าจะสร้าง, แก้ไข หรือลบอะไรบ้าง
ขั้นตอนสำคัญ! คือการสั่งให้สร้างทรัพยากรจริงๆ บน Cloud ตามที่เราเขียนไว้
ลบทรัพยากรทั้งหมดทิ้งเมื่อไม่ใช้งานแล้ว เพื่อป้องกันค่าใช้จ่ายส่วนเกิน
"Write Once, Run Anywhere... for Cloud Infrastructure!"
14. สรุปภาพรวม DevOps Pipeline (End-to-End)
หน้า 14ก่อนจะเข้าสู่ Lab ใน Module 3 นี่คือแผนผังการทำงานทั้งหมดที่เราจะสร้างขึ้นจริง โดยเป็นการรวมร่างกันของ Docker, Terraform, Kubernetes และ GitHub Actions ครับ
การรวมโค้ดและทดสอบอัตโนมัติ
เมื่อเราแก้ไขโค้ดและ git push ขึ้น GitHub ระบบ GitHub Actions จะทำงาน:
การเตรียมระบบด้วยโค้ด
เราจะไม่เข้าไปกดสร้าง Server เอง แต่จะใช้ Terraform สั่งงานจากเครื่องเรา:
การนำแอปไปรันบน Kubernetes
ดึง Image ล่าสุดจาก ECR มาลงใน EKS Cluster: