Containers vs. Virtual Machines ต่างกันอย่างไร
MonsterConnect
2 min read
Containers vs. Virtual Machines ต่างกันอย่างไร
. .Virtual Machines คือ เทคนิค virtualization คือการสร้างคอมพิวเตอร์เสมือน (virtual machine หรือ VM) ที่มีทั้งซีพียู แรม สตอเรจ ระบบปฏิบัติการ ฯลฯ ขึ้นมารันบนคอมพิวเตอร์จริงๆ อีกทีหนึ่ง โดยตัวระบบปฏิบัติการของคอมพิวเตอร์เสมือน (Guest OS) จะไม่รู้ว่าตัวเองรันอยู่บน VM แต่เข้าใจว่ารันอยู่บนฮาร์ดแวร์คอมพิวเตอร์จริงๆ
วิธีการนี้ทำให้เกิดการแยกส่วน (isolation) ระหว่าง VM แต่ละตัวอย่างสมบูรณ์ สามารถรันระบบปฏิบัติการที่แตกต่างกันระหว่าง Guest OS กับ Host OS ได้
.
ข้อเสียคือใช้ทรัพยากรซ้ำซ้อน ทำงานช้า เปลืองพื้นที่เก็บ OS และซอฟต์แวร์ต่างๆ ที่มักจะใช้เหมือนกันใน VM ทุกตัว
.
.
คอนเทนเนอร์จึงถูกสร้างขึ้นมาเพื่อแก้ปัญหาข้างต้น โดยมีฮาร์ดแวร์และ OS เพียงชุดเดียวกัน ลดความซ้ำซ้อนของการใช้ทรัพยากรลง ส่วนตัวแอพพลิเคชันและซอฟต์แวร์ซึ่งเป็นจุดที่แตกต่างกันไปก็จะมี "container" (เทียบได้กับ VM) มาครอบเพื่อแบ่งส่วนทรัพยากรไว้ไม่ให้ยุ่งกัน
จุดเด่นของคอนเทนเนอร์จึงเป็นเรื่องการใช้ทรัพยากรที่น้อยกว่า virtualization มาก อิมเมจของคอนเทนเนอร์อาจมีขนาดเพียงกี่ไม่กี่สิบ MB ในขณะที่อิมเมจของ VM ต้องใช้พื้นที่ระดับหลาย GB นอกจากนี้ ระยะเวลาที่ใช้บูต, พลังซีพียูและปริมาณแรมที่ต้องใช้ ก็ลดลงตามไปด้วย ส่งผลให้เซิร์ฟเวอร์หนึ่งเครื่องสามารถยัดคอนเทนเนอร์จำนวนมากกว่าการรัน VM ที่ให้ผลแบบเดียวกันถึง 2-3 เท่าตัว
.
ข้อเสียของคอนเทนเนอร์ก็ย่อมเป็นความยืดหยุ่นที่น้อยกว่า virtualization แบบดั้งเดิม โดยเฉพาะไม่สามารถใช้ OS ที่แตกต่างกันระหว่าง Guest และ Host ได้ (เพราะจุดเด่นของคอนเทนเนอร์คือการแชร์ OS ก็อปปี้เดียวกัน)
.
Virtual Machine (VM)
.
.
- การสร้างคอมพิวเตอร์เสมือน ที่มีทั้งซีพียู แรม storage OS ฯลฯ ขึ้นมารันบนคอมพิวเตอร์จริงๆ อีกทีหนึ่ง
- สร้าง VM หลาย ๆ ตัวเพื่อ Run บน Physical Server เครื่องเดียวกันได้
- ติดตั้ง Operating System ที่แตกต่างกันในแต่ละ VM ได้
- แต่ละ VM ก็จะมี OS และ Bins/Libs เป็นของตัวเอง
.
VM จะเหมาะกับ
- Workload แบบดั้งเดิม ใช้กันเฉพาะภายในองค์กร
- แยก Instance เพื่อป้องกันความเสี่ยงเรื่องการพัฒนา Software หรือ Application
- ต้องการใช้งาน OS ที่อยู่ภายใน OS อีกที เช่น Run UNIX บน Linux
.
Containers
..

- ติดตั้งอยู่ Host OS ที่อยู่เหนือ Infrastructure
- แต่ละ Containers จะใช้ OS ร่วมกัน ทำให้มีขนาดไม่ใหญ่มาก ประหยัด Resource
- มี OS เดียวทำให้ดูแลเรื่องปัญหาการแก้ Bug, การ Patch และอื่น ๆ ทำงานได้ง่าย
- ดูแลน้อยกว่าและเสียหายได้ยากกว่าเนื่องจากไม่ต้องใช้ OS แยกในการ Run Application
Containers จะเหมาะกับ
- สร้าง Cloud-native app
- ทำ Microservices
- Developer สามารถ Deploy ได้เอง สามารถทำ CI/CD ได้ง่ายขึ้น
- สร้าง Project ใหม่ ๆ โดยไม่กระทบกับ Project อื่น ๆ โดยการ Share OS ร่วมกัน
ความแตกต่างของ VM และ Container
Containers
- ใช้เวลาไม่กี่วินาทีในการ Boot
- จัดการผ่าน Container Engine
- ไม่เปลือง Memory เนื่องจากไม่ต้องใช้ในการสร้างระบบ Virtual
- ระบบไม่ได้แยกการทำงานออกจากกันชัดเจน อาจเกิดความยุ่งยากได้ง่าย
- Deploy Container ทำได้ง่ายเนื่องจาก Container Image สามารติดตั้งได้ในหลาย ๆ OS
VM
- ใช้เวลาเป็นนาทีในการ Boot
- จัดการผ่าน Hypervisor
- ใช้ Memory ทุคครั้งเนื่องจาก OS จะต้อง Start ก่อนที่จะใช้งาน Service
- ระบบมีคารแยกการทำงานออกจากกัน จัดการปัญหาได้ง่ายกว่า
- Deploy VM มีขั้นตอนที่ต้องเตรียมการมากกว่าเพราะต้องแยก Instance ออกจากกัน