How does Docker Work? ฉบับเข้าใจง่ายใน 3 นาที

สำหรับใครที่สงสัยว่า Docker ทำงานยังไง? วันนี้ผมสรุป Architecture ของมันมาให้เห็นภาพง่ายๆ ครับ

1. Docker Client 💻 (ส่วนสั่งการ)

เปรียบเสมือน “รีโมตคอนโทรล” ที่เราใช้สั่งงาน นี่คือจุดที่เราพิมพ์คำสั่งต่างๆ ลงใน Terminal เช่น:

  • docker build ➜ สั่งให้สร้าง Image
  • docker pull ➜ สั่งให้ไปดึง Image มาจาก Registry
  • docker run ➜ สั่งให้สร้างและรัน Container จาก Image

2. Docker Host 🧠 (สมองและพื้นที่ทำงาน)

นี่คือเครื่อง Server หรือ Computer ที่ Docker ติดตั้งอยู่ ประกอบด้วย 2 ส่วนหลัก:

  • Docker Daemon (dockerd): คือ “สมอง” ที่คอยรับคำสั่งจาก Client มาประมวลผล และจัดการทุกอย่างเบื้องหลัง
  • Images & Containers:
    • 📄 Images: คือ “แม่แบบ” (Template) หรือไฟล์ต้นฉบับ (เช่น Ubuntu, Nginx) เป็นเหมือนไฟล์ Read-only
    • 📦 Containers: คือ Image ที่ถูกปลุกให้ “มีชีวิต” ทำงานได้จริง เปรียบเสมือนเครื่องเสมือนขนาดเล็ก

3. Docker Registry ☁️ (คลังเก็บของ)

เปรียบเสมือน “App Store” สำหรับ Docker Images

  • Docker Hub / GitHub Container Registry: เป็นที่ที่เราไปดึง (pull) Image มาใช้งาน หรือส่ง (push) Image ที่เราสร้างขึ้นไปเก็บไว้

🖼️ ภาพรวมการทำงาน (The Big Picture)

ข้อมูลโค้ด

graph LR
User((User)) -- คำสั่ง --> Client[Docker Client]
Client -- ส่ง API --> Daemon[Docker Daemon]

subgraph Host [Docker Host]
    Daemon
    Images[Images]
    Containers[Running Containers]
end

subgraph Registry [Docker Registry]
    Hub[Docker Hub / Cloud Registry]
end

Daemon -- Pull/Push --> Hub
Daemon -- สร้าง --> Containers
Images -- ต้นแบบ --> Containers

🎯 สรุปสั้นที่สุด

Docker คือระบบที่ช่วยให้เราสร้างและรันแอปในรูปแบบ “Container” ได้สะดวกขึ้น โดยใช้ Client ส่งคำสั่งไปให้ Daemon จัดการภาพรวม และดึง Images จาก Registry มารันใช้งานจริง

💡 Engineer’s Note: ในการทำงานจริงบน Cloud (เช่น Azure) เราอาจจะไม่ได้ใช้ Docker Host เดี่ยวๆ แต่จะใช้ผ่าน Container Orchestration อย่าง Kubernetes (K8s) หรือ Azure Container Apps ซึ่งเบื้องหลังก็ใช้หลักการ Container Runtime แบบเดียวกันนี้แหละครับ!