ค้นหาเว็บไซต์

แอปเปิลเปิดตัวทางเลือก Docker บน macOS ที่ขับเคลื่อนด้วย Swift


แอปเปิลเปิดตัวทางเลือกแบบโอเพนซอร์สที่ขับเคลื่อนด้วย Swift สำหรับรันคอนเทนเนอร์ Linux บน macOS โดยเน้นความปลอดภัยและการแยกตัว

แอปเปิลได้ปล่อยโครงการโอเพ่นซอร์สใหม่อย่างเงียบ ๆ ซึ่งอาจเปลี่ยนวิธีการรันคอนเทนเนอร์บน macOS อย่างมีนัยสำคัญ โครงการนี้มีชื่อเรียบง่ายว่า container เป็นรันไทม์คอนเทนเนอร์ที่ใช้ Swift พัฒนาโดยแอปเปิลและออกแบบมาโดยเฉพาะสำหรับระบบ macOS โดยเฉพาะอย่างยิ่งสำหรับเครื่องที่ใช้ Apple Silicon

โดยหลักแล้ว container ช่วยให้ผู้ใช้สามารถดึง สร้าง รัน และส่งคอนเทนเนอร์ Linux ที่สอดคล้องกับมาตรฐาน OCI ได้ อย่างไรก็ตาม แตกต่างจาก Docker ซึ่งโดยปกติจะพึ่งพาเครื่องเสมือนที่ใช้ร่วมกันสำหรับคอนเทนเนอร์ทั้งหมดบน macOS วิธีของ Apple จะรันคอนเทนเนอร์แต่ละตัวใน micro-VM ขนาดเล็กของตัวเอง ซึ่งมาพร้อมกับเคอร์เนล Linux และระบบเครือข่ายที่แยกออกมา ตามหน้าของโครงการบน GitHub:

เครื่องมือนี้ใช้และสร้างภาพคอนเทนเนอร์ที่เป็นไปตามมาตรฐาน OCI ทำให้คุณสามารถดึงและรันภาพจากรีจิสตรีคอนเทนเนอร์มาตรฐานใด ๆ ได้ คุณสามารถส่งภาพที่คุณสร้างไปยังรีจิสตรีเหล่านั้นได้เช่นกัน และรันภาพเหล่านั้นในแอปพลิเคชันอื่น ๆ ที่เป็นไปตามมาตรฐาน OCI ได้

โมเดลนี้สะท้อนแนวคิดของ microVMs ที่เป็นที่นิยมโดยเครื่องมือต่าง ๆ เช่น Firecracker แต่ถูกผนวกเข้ากับ macOS อย่างแน่นหนาผ่าน Virtualization.framework ซึ่งเป็นอินเทอร์เฟซ hypervisor พื้นเมืองของ Apple

แม้ว่า Apple จะไม่ได้ระบุสิ่งนี้ว่าเป็นตัวทดแทน Docker แบบเต็มรูปแบบ เครื่องมือนี้ก็ครอบคลุมฟีเจอร์หลายอย่างสำหรับการใช้งานพัฒนาในเครื่อง CLI นั้นคุ้นเคยและเข้าถึงได้ง่าย: ด้วยคำสั่งเช่น container image pull alpine หรือ container run -ti alpine sh

สิ่งที่ทำให้เครื่องมือนี้โดดเด่นคือการผสานรวมเข้ากับระบบปฏิบัติการ macOS อย่างไร้รอยต่อ แทนที่จะจำลองสภาพแวดล้อมของ Linux ด้วยเครื่องมือนอกระบบ โซลูชันของ Apple ใช้ Swift สำหรับส่วนมากของ userland รวมถึงระบบ init ขนาดเล็กที่ชื่อ vminitd ซึ่งบูตคอนเทนเนอร์ได้ภายในเวลาเพียงไม่กี่มิลลิวินาที

โครงการนี้ยังรวมถึงแพ็กเกจ Swift ชื่อว่า “Containerization” ซึ่งเปิดเผย API ระดับต่ำสำหรับการจัดการภาพ (images), พื้นที่จัดเก็บ (volumes), เครือข่าย (networking) และกระบวนการบูต (boot processes) มอบพื้นฐานที่ทรงพลังให้กับผู้ใช้ขั้นสูงและผู้สร้างเครื่องมือ

โอเค ทุกอย่างก็ถือว่าดี แต่ตอนนี้ให้ฉันแชร์ความคิดส่วนตัวของฉันเกี่ยวกับเรื่องนี้บ้าง จริงๆ แล้วฉันค่อนข้างสับสนกับการเคลื่อนไหวครั้งนี้ของแอปเปิล และฉันจะอธิบายเหตุผลทันที

ก่อนอื่น เรามาเริ่มให้ชัดเจนกันก่อน—ไม่มีสิ่งที่เรียกว่า containerization แบบเนทีฟแท้ ๆ บนระบบปฏิบัติการใด ๆ นอกเหนือจาก Linux และก็มีเหตุผลง่าย ๆ สำหรับเรื่องนี้ Docker พึ่งพาคุณสมบัติของเคอร์เนลเฉพาะของ Linux เช่น cgroups, namespaces และ overlay filesystems ซึ่งเคอร์เนลของ macOS ไม่สามารถให้ได้

ด้วยเหตุนี้ โครงการใหม่ของ Apple จึงใช้เครื่องเสมือน Linux ขนาดเบาแยกต่างหากเพื่อรันคอนเทนเนอร์แต่ละตัว ในขณะเดียวกัน แนวทางของ Docker คือการรันทุกสิ่งภายในเครื่องเสมือนเพียงเครื่องเดียว (สร้างขึ้นด้วย LinuxKit) ซึ่งเป็นที่ตั้งของ Docker Engine และคอนเทนเนอร์ทั้งหมด

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

ในทางกลับกัน การใช้ VM แยกกันก็มีข้อดีบางอย่าง เช่น หนึ่งในข้อได้เปรียบหลักของโครงการใหม่ของ Apple คือมันมอบเคอร์เนล Linux ที่เฉพาะเจาะจงให้กับคอนเทนเนอร์แต่ละตัว แตกต่างจาก Docker ที่ใช้เคอร์เนลเดียวกันร่วมกันในทุกคอนเทนเนอร์ (คุณไม่สามารถผสมเวอร์ชันเคอร์เนลต่อคอนเทนเนอร์ได้)

นอกจากนี้ มันยังใช้สแตกเครือข่ายของ macOS โดยตรง ในขณะที่ Docker มักจะพึ่งพาเครื่องเสมือนที่มี NAT หรือเครือข่ายแบบสะพาน เพื่อช่วยให้เข้าใจง่ายขึ้น ผมได้จัดทำตารางเปรียบเทียบสั้น ๆ ไว้ดังนี้:

คุณสมบัติด็อกเกอร์ เดสก์ท็อปภาชนะใส่แอปเปิล
โมเดล VMVM ร่วมสำหรับทุกคอนเทนเนอร์ไมโคร VM ต่อคอนเทนเนอร์
เคอร์เนลเคอร์เนลลินุกซ์เดียวสำหรับทุกคนเคอร์เนลลินุกซ์เฉพาะสำหรับแต่ละคอนเทนเนอร์
ฐานใช้ Docker Engine และไฮเปอร์ไวเซอร์ (เช่น qemu หรือ HyperKit)ใช้ Virtualization.framework ของ Apple เอง
เครือข่ายNAT หรือสะพานผ่าน VMสแตกเครือข่าย macOS ของแท้ (มีข้อจำกัดในเวอร์ชันแรก ๆ)
เวลารันไทม์runc/containerdvminitd ระบบเริ่มต้น Swift แบบกำหนดเอง
การผสานรวมข้ามแพลตฟอร์มและมุ่งเน้นคอนเทนเนอร์เน้นการใช้งานบน macOS อย่างลึกซึ้งและมุ่งเน้น Swift

แม้จะมีความแตกต่างทั้งหมด แต่แนวคิดหลักยังคงเหมือนกันทั้งสองกรณี—การสร้าง การรัน และการทำงานกับภาพคอนเทนเนอร์ที่เป็นไปตามมาตรฐาน OCI จากมุมมองนั้น Docker ยังคงมอบความยืดหยุ่นและความสามารถได้มากกว่าผลงานใหม่ของ Apple

ตัวอย่างเช่น ยังไม่มีสิ่งที่เทียบเท่ากับ docker-compose และระบบนิเวศเครื่องมือ (เช่น ไม่มีแดชบอร์ด GUI, การประสานงานที่จำกัด) ยังคงต้องพัฒนาและปรับปรุงต่อไป

ดังนั้น ผมสงสัยว่าเหตุใด Apple ถึงทุ่มเทแรงขนาดนี้ในการสร้างสิ่งนี้ นอกเหนือจากคำว่า “Made by Apple” พวกเขาดูเหมือนอยากได้ส่วนแบ่งจากตลาดเฉพาะทางขนาดใหญ่ซึ่งเกือบทั้งหมดถูกครอบงำโดย Docker โดยเสนอการรวมเข้ากับ macOS ที่ดีกว่า ใช้ API ของระบบแทนที่จะใช้ daemon ของบุคคลที่สาม และในท้ายที่สุด การแยกกันด้านความปลอดภัยที่ดีกว่า ซึ่งช่วยลดจุดเสี่ยงในการถูกโจมตี

เนื่องจากโครงการนี้ยังอยู่ในช่วงเริ่มต้น จึงน่าสนใจที่จะดูว่ามันจะพัฒนาไปในทิศทางใด—และว่าจะสามารถตอบสนองความคาดหวังของ Apple ได้หรือไม่โดยในที่สุดแทนที่ Docker หรือ Podman ให้เป็นเครื่องมือคอนเทนเนอร์หลักสำหรับนักพัฒนาบน macOS