การจำลองเสมือนระดับ OS (คอนเทนเนอร์) สำหรับ OS X


31

ฉันสงสัยว่าทำไมนอกเหนือจาก chroot แบบเก่าที่ดีไม่มีการใช้งานการจำลองเสมือนระดับระบบปฏิบัติการ (หรือคอนเทนเนอร์หากคุณต้องการ) สำหรับ Mac OS X

อาจเป็นเพราะข้อ จำกัด เคอร์เนลหรือข้อ จำกัด สิทธิ์การใช้งาน? หรือเพียงแค่ไม่มีใครได้เปิดตัวโครงการที่คล้ายกัน?

คำตอบ:


16

องค์ประกอบสำคัญที่จำเป็นสำหรับการ containerization คือการแยกเครือข่ายและการบริการอื่น ๆ แต่ไม่ได้เป็นเพียงการแยกแต่ยังvirtualization FreeBSD Jails, Linux "container" (หรือ "namespaces" หรือมากกว่าอย่างถูกต้อง) และ Solaris / illumos โซนทั้งหมดให้ระดับ "virtualization" ของบริการระบบปฏิบัติการเหล่านี้

โดยการจำลองเสมือนหมายความว่าเซิร์ฟเวอร์เหล่านี้พร้อมใช้งาน (หรืออาจมีอยู่ ) สำหรับสิ่งต่าง ๆ ภายใน "คอนเทนเนอร์" แต่ในทางที่ปกป้องสิ่งอื่น ๆ บนโฮสต์เดียวกันนอกคอนเทนเนอร์ (ตัวอย่างเช่นคอนเทนเนอร์อาจมีสแต็ก TCP / IP ของตัวเองพร้อมด้วยที่อยู่ IP ของตัวเองแคช ARP และอื่น ๆ )

การจำลองเสมือนระบบปฏิบัติการ (ระบบปฏิบัติการ) เป็นวิธีที่เรามักอ้างถึงการจำลองเสมือน "น้ำหนักเบา" ประเภทนี้โดยที่กระบวนการคิดว่าพวกเขาเห็นเคอร์เนลเสมือน แต่ทุกคนกำลังแบ่งปันเคอร์เนลจริงเดียวกันภายใต้ประทุน เคอร์เนลนั้นทำหน้าที่เป็นไฮเปอร์ไวเซอร์ในการสร้างความมั่นใจว่าขอบเขตของคอนเทนเนอร์ / การจำลองเสมือนจะไม่ถูกข้าม (อีกวิธีหนึ่งคือบริการระบบปฏิบัติการเสมือนจริง) เปรียบเทียบสิ่งนี้กับการจำลองเสมือนของฮาร์ดแวร์โดยที่สิ่งที่ทำเสมือนจริงคือฮาร์ดแวร์ - เช่นอุปกรณ์ถูกจำลองในซอฟต์แวร์และนำเสนอต่อระบบปฏิบัติการที่ทำงานอยู่ในคอนเทนเนอร์ สิ่งนี้มีประสิทธิภาพมาก แต่มีทรัพยากรอย่างเข้มข้น - เครื่องเสมือนแต่ละเครื่องต้องมีสำเนาของระบบปฏิบัติการ

macOS ล่าสุดมีการสนับสนุน hypervisor แบบเนทีฟผ่าน Hypervisor.framework ซึ่งอนุญาตให้ซอฟต์แวร์เช่น "XHyve" [พอร์ต BHyve ของ FreeBSD] (นักเทียบท่าบน macOS ใช้สิ่งนี้) แต่ขาดบริการที่จำเป็นภายใต้ประทุนเพื่อให้บริการระบบปฏิบัติการเสมือนจริงอย่างสมบูรณ์

ในความเป็นจริงสิ่งที่จำเป็นจำนวนมากอาจมีอยู่แล้วตั้งแต่งานให้ sandbox หมายความว่ามีจุดตรรกะที่มีอยู่แล้วที่การโทรของระบบจะถูกดักและจัดการแตกต่างกันสำหรับการใช้งานที่แตกต่างกัน อย่างไรก็ตามนั่นยังห่างไกลจากเรื่องราวที่สมบูรณ์ - การใช้เครือข่าย IPC และเนมสเปซที่แยกจากกันอย่างแท้จริงนั้นค่อนข้างทำงานมากมาย

เหตุผลที่ดีที่สุดสำหรับสาเหตุที่แอปเปิลไม่ได้ทำสิ่งนี้น่าจะเป็นเหตุผลเดียวกับที่แอปเปิลไม่ได้เปิดตัวแพลตฟอร์มที่เหมาะสมสำหรับการใช้งาน macOS ในศูนย์ข้อมูลเป็นเวลาหลายปี - ขาดความต้องการของตลาดหรือขาดผู้นำตลาดของแอปเปิล เดสก์ท็อปและมือถือโฟกัสที่พวกเขาได้มุ่งเน้นความสนใจของพวกเขาก็ไม่จำเป็นต้องอินสแตนซ์ macOS เสมือนที่มาก (นี่เป็นเรื่องน่าเศร้าเพราะฉันชอบที่จะได้รับการสนับสนุน macOS เสมือน - ตัวอย่างเช่นการเรียกใช้ macOS บน VMs ที่ Travis CI นั้นใช้เวลานานมากเมื่อเทียบกับคอนเทนเนอร์ Linux)


1
คำตอบที่ดี ... ฉันเดาว่า Apple หลีกเลี่ยงการรองรับ OSX บนเซิร์ฟเวอร์เพราะจะยุบตลาด MBP ของพวกเขาหากนักพัฒนา iOS สามารถใช้งานแล็ปท็อป linux ที่มีประสิทธิภาพราคาถูกและรวบรวม apk ของพวกเขาในผู้ให้บริการโฮสต์ VPS
Scott Stensland

6

คุณจะแปลกใจ - ภาชนะบรรจุจริงจะได้รับการสนับสนุน - ระบบปฏิบัติการ X (และ iOS) Sandbox มีการพัฒนาให้ใช้พวกเขา พวกเขาได้รับการแนะนำใน 10.7 และตอนนี้เป็นจริงตามมาตรฐานใน 10.10 และ iOS 8 ในภายหลังพวกเขามีการบังคับใช้อย่างเข้มงวดมากขึ้น (ส่วนใหญ่เนื่องจากเหตุผลของการรักษาความปลอดภัยของแอปพลิเคชัน) จนถึงจุดที่ วิธีการแจกแจงกระบวนการหรือทรัพยากรในขณะนี้ส่งคืนผลลัพธ์ตามคอนเทนเนอร์ - ซึ่งคล้ายกับ Linux ipc namespace - แต่มีประสิทธิภาพมากกว่า


2
นี่เป็นกล่องทราย แต่ไม่ใช่ OS-virtualization (เช่นคอนเทนเนอร์, โซน, คุก) ใช่ไหม?
smdvlpr

1
นักเทียบท่าไม่ใช่การจำลองเสมือน คอนเทนเนอร์! = VMs นักเทียบท่านั้นมีคุณสมบัติเคอร์เนลกลุ่มต่าง ๆ cgroups, chroot, ระบบไฟล์แบบเลเยอร์, ​​การกำหนดเส้นทาง iptables และอื่น ๆ เพื่อแยกกลุ่มของกระบวนการเช่นที่แอปเห็นว่าตัวเองมีระบบเป็นของตัวเองในขณะที่แยกสภาพแวดล้อมเหล่านั้นเพื่อปรับปรุงความปลอดภัย และลดความสามารถของคอนเทนเนอร์ในการเข้าหากันและระบบ คอนเทนเนอร์ OSX จะใช้งานฟังก์ชันนี้ได้บางส่วน แต่ไม่ใช่ทั้งหมด มันอาจเป็นสิ่งที่สามารถนำมาใช้โดย coder พอมีฝีมืออย่างไรก็ตาม
เชน

3
@Technologeeks คุณสามารถชี้ไปที่วัสดุอ้างอิงใด ๆ บนภาชนะ / กล่องทรายใน OS X ได้หรือไม่?
Ken Williams

3

ฉันคิดว่าคำตอบคือไม่มีใครต้องการ ดูเหมือนจะเป็นไปได้ สิ่งเหล่านี้ส่วนใหญ่จะทำเพื่อวัตถุประสงค์เดียวโดยรักษาประสิทธิภาพสำหรับผู้ขาย VPS และไม่มีใครต้องการอินสแตนซ์ VPS ที่ใช้ระบบปฏิบัติการ OS X


5
ขอบคุณสำหรับจุดของคุณ IMHO มีอีกอย่างน้อยก็ใช้กรณีสำหรับคอนเทนเนอร์นั่นคือการสร้างสภาพแวดล้อมการพัฒนา BTW ฉันได้พบเปลวไฟเก่า ๆ เช่นนี้แล้ว: groups.google.com/forum/#!topic/darwin-dev/6-FP9GCsBG4
Emyl

ความหนาแน่นที่เพิ่มขึ้นเป็นผลข้างเคียงที่ดีของการแยกกระบวนการในเนมสเปซของตนเอง ตู้คอนเทนเนอร์ช่วยให้คุณเรียกใช้แอพได้อย่างปลอดภัยมากขึ้นและสามารถควบคุมสิ่งที่พวกเขาสามารถทำได้บนเครื่อง ประโยชน์เหล่านี้ถูกใช้โดย iOS เพื่อเพิ่มความปลอดภัยและป้องกันไม่ให้แอปก้าวไปด้วยกันตัวอย่างเช่น VPS นั้นมีความหนาแน่นเพียงเล็กน้อย แม้แต่เครื่องที่ใช้บริการเดียวก็สามารถได้รับประโยชน์จากความปลอดภัย ไม่มีการปรับปรุงความหนาแน่น แต่ภาชนะบรรจุยังคงมีประโยชน์
GargantuChet

2

ในขณะที่ใช้ "ดี old chroot (8)" ฉันเริ่มโครงการที่มีแนวโน้มที่จะเลียนแบบพฤติกรรมของนักเทียบท่าบน OS X และ NetBSD มันเป็นฟรีเป็นในคำพูดและสามารถใช้ได้บนGitHub ตามที่ README กล่าวว่าโครงการนี้ไม่เกี่ยวกับความปลอดภัยหรือการผลิต แต่จะช่วยทดสอบกองซ้อนทั้งหมดบนเวิร์กสเตชันของคุณ


0

นักเทียบท่า (เท่าที่ฉันเข้าใจ) เป็นเพียง "virtualizing" (layering) ระบบไฟล์และเครือข่าย (cpu / mem มี จำกัด เท่านั้น) ดังนั้นคุณลักษณะเดียวกันทั้งหมดควรอยู่ที่นั่น แต่ไม่ได้ทำการตลาดด้วยวิธีเดียวกัน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.