ข้ามไปเนื้อหาหลัก
คอนเทนเนอร์· ~12 นาที

Container คืออะไร (และต่างจาก VM ยังไง)

กล่องเล็ก ๆ ที่ห่อแอปพร้อมทุกอย่างที่มันต้องใช้ ให้รันเหมือนกันทุกที่

เปรียบเทียบให้เห็นภาพ

Container เหมือนตู้คอนเทนเนอร์เรือ — ไม่ว่าข้างในจะเป็นของอะไร ตู้มีขนาดมาตรฐานเท่ากัน จึงยกขึ้นเรือ/รถ/รถไฟลำไหนก็ได้โดยไม่ต้องแกะของ · แอปที่ถูกใส่ container ก็ "ยกไปรันที่ไหนก็ได้" เหมือนกัน — เครื่อง dev, เครื่องเพื่อน, หรือ cloud ก็ทำงานเหมือนเดิม

ปัญหาคลาสสิกก่อนมี container คือประโยค "บนเครื่องผมมันรันได้นะ" (works on my machine) — โค้ดเดียวกันรันได้บนเครื่องเรา แต่พอเอาขึ้น server จริงกลับพัง เพราะเวอร์ชัน library, ตัวแปรระบบ, หรือ OS ไม่เหมือนกัน

Container แก้ปัญหานี้โดยการห่อแอป + library + ไฟล์ตั้งค่า + runtime ทั้งหมดไว้ในกล่องเดียว กล่องนี้รันได้เหมือนกันเป๊ะทุกที่ที่มี container runtime (เช่น Docker) ติดตั้งอยู่

Container ต่างจาก Virtual Machine (VM) ยังไง

VM แบก OS ต่อเครื่อง · Container แชร์ OS kernel

Virtual Machines

App A
Guest OS
App B
Guest OS
App C
Guest OS
Hypervisor
Host OS + Hardware

หนัก · เปิดเป็นนาที · Guest OS ซ้ำทุกตัว

Containers

App A
App B
App C
App D
Container Runtime
Host OS (kernel ร่วม) + Hardware

เบา · เปิดเสี้ยววินาที · ไม่มี Guest OS ซ้ำ

VM แบกทั้ง OS ต่อเครื่อง · Container แชร์ OS kernel ของ host จึงเบาและเปิดเร็วกว่ามาก
  • VM = จำลองทั้งเครื่องรวม OS ของตัวเอง → หนัก (หลาย GB) เปิดใช้เวลาเป็นนาที
  • Container = แชร์ OS kernel ของเครื่อง host แล้วแยกกันแค่ระดับ process → เบา (หลัก MB) เปิดในเสี้ยววินาที
  • เครื่องหนึ่งรัน container ได้หลายสิบตัวสบาย ๆ ในทรัพยากรเท่ากับ VM ไม่กี่ตัว

สรุป Key Takeaways

  • Container ห่อแอป + dependency ทั้งหมด → รันเหมือนกันทุกที่ ("works on my machine" หมดไป)
  • ต่างจาก VM ตรงที่แชร์ OS kernel → เบากว่า เร็วกว่า หนาแน่นกว่า
  • Image = แม่พิมพ์ (อ่านอย่างเดียว), Container = ตัวที่กำลังรันจริง
  • Container เป็น ephemeral โดยธรรมชาติ — ข้อมูลถาวรต้องใช้ Volume
อ่านจบแล้วอย่าลืมทำเครื่องหมาย