
อะไรคือความแตกต่างที่สำคัญระหว่างการจำลองเสมือนและคอนเทนเนอร์ และแต่ละเทคโนโลยีมีไว้เพื่ออะไร?
การจำลองเสมือน (VM) เครื่องเสมือนเป็นนามธรรมของฮาร์ดแวร์กายภาพ — เปลี่ยนเซิร์ฟเวอร์หนึ่งให้เป็นหลายเซิร์ฟเวอร์ ไฮเปอร์ไวเซอร์ อยู่ระหว่างโฮสต์และ VM, รวบรวม CPU, หน่วยความจำ และพื้นที่เก็บข้อมูล VM แต่ละตัวจะมี สำเนาเต็มของ guest OS รวมถึงแอปพลิเคชันและไลบรารีทั้งหมด ไฮเปอร์ไวเซอร์ (VMM) บังคับใช้การแยกส่วน และขอบเขตได้รับการสนับสนุนด้วยฮาร์ดแวร์โดยส่วนขยายการจำลองเสมือนของ CPU (Intel VT-x / AMD-V)
ไฮเปอร์ไวเซอร์มีสองประเภท:
- ประเภท 1 (โลหะเปลือย): ทำงานบนฮาร์ดแวร์โดยตรง ตัวอย่างที่ชัดเจนคือ VMware ESXi/vSphere, Microsoft Hyper-V และ Xen KVM เป็นเคสแบบไฮบริด: โมดูลเคอร์เนล Linux ที่เปลี่ยนเคอร์เนลให้เป็นไฮเปอร์ไวเซอร์ Type 1 ในขณะที่โฮสต์ยังคงรันกระบวนการปกติ
- ประเภท 2 (โฮสต์): ทำงานเป็นแอปพลิเคชันบนระบบปฏิบัติการทั่วไป (VirtualBox, VMware Workstation) เหมาะกับเครื่องส่วนบุคคล
คอนเทนเนอร์ โค้ดแพ็กเกจคอนเทนเนอร์และการขึ้นต่อกันทั้งหมด (รันไทม์ ไลบรารี การตั้งค่า) และจำลอง ระบบปฏิบัติการ แทนที่จะเป็นฮาร์ดแวร์ คอนเทนเนอร์ แชร์เคอร์เนลระบบปฏิบัติการโฮสต์ และทำงานเป็นกระบวนการแยกในพื้นที่ผู้ใช้ บน Linux สิ่งนี้ใช้ เนมสเปซ (การแยก) และ cgroups (การบัญชีทรัพยากรและขีดจำกัด) เสริมความแข็งแกร่งเพิ่มเติมด้วย ความสามารถ, seccomp, MAC (SELinux/AppArmor), เนมสเปซผู้ใช้ และโหมดไร้รูท การแชร์เคอร์เนลบ่งบอกถึงความเข้ากันได้ของตระกูล OS: คอนเทนเนอร์ Linux จำเป็นต้องมีเคอร์เนล Linux ดังนั้น Docker Desktop บน Windows/macOS จึงรัน Linux VM น้ำหนักเบาอย่างเงียบๆ นักเทียบท่าทำให้คอนเทนเนอร์เป็นที่นิยม แต่รูปแบบนั้นได้รับมาตรฐานโดย OCI; รันไทม์อื่นๆ ก็มีเช่นกัน — containerd, CRI-O, Podman
ข้อแตกต่างที่สำคัญ:
- ขนาด: โดยทั่วไปอิมเมจคอนเทนเนอร์จะมีขนาดไม่กี่ MB ถึงหลายร้อย MB VM คือ GB (ลำดับขนาดที่แสดงให้เห็น ไม่ใช่ตัวเลขคงที่)
- การเริ่มต้น: คอนเทนเนอร์เริ่มต้นในหน่วยวินาที/มิลลิวินาที VM ต้องบูตระบบปฏิบัติการเต็มรูปแบบ
- ค่าใช้จ่าย: คอนเทนเนอร์ไม่จำเป็นต้องมี OS แยกต่างหากต่อแอป — มีความหนาแน่นสูงกว่า และค่าลิขสิทธิ์ลดลง
- การแยกส่วน/ความปลอดภัย: VM ให้การแยกส่วนที่ใช้ฮาร์ดแวร์ที่แข็งแกร่งยิ่งขึ้น คอนเทนเนอร์นำเสนอการแยกตามซอฟต์แวร์ที่อ่อนแอกว่า (ความเสี่ยงในการหลีกเลี่ยงคอนเทนเนอร์จากเคอร์เนลที่ใช้ร่วมกัน) จุดกึ่งกลางคือรันไทม์แบบแซนด์บ็อกซ์ (gVisor, Kata Containers, Firecracker) ที่เข้าใกล้การแยกระดับ VM
แต่ละอันใช้ทำอะไร:
- VM: ใช้งาน OS ที่แตกต่างกันบนเซิร์ฟเวอร์เดียว ปริมาณงานที่ใช้ทรัพยากรมากหรือเป็นก้อนเดียว และการแยกที่แข็งแกร่ง (แอปรุ่นเก่าที่มีผู้เช่าหลายราย)
- คอนเทนเนอร์: การพัฒนาบนคลาวด์, ไมโครเซอร์วิส, CI/CD, ความสะดวกในการพกพา และการปรับขนาดแนวนอนที่รวดเร็ว (ควบคุมโดย Kubernetes)
ในทางปฏิบัติ ทั้งสองแบบ เสริม: คอนเทนเนอร์มักจะทำงานภายใน VM เพื่อรวมการจัดส่งแบบ Agile เข้ากับการแยกส่วนที่แข็งแกร่ง
