- เครื่องมือสำหรับสร้างและรันคอนเทนเนอร์ Linux บน Mac ในรูปแบบ เครื่องเสมือนน้ำหนักเบา
- Container Machine ที่เพิ่มเข้ามาใหม่ใน WWDC26 สามารถรัน สภาพแวดล้อม Linux ที่รวดเร็ว เบา และคงอยู่ถาวร โดยมีโฮมไดเรกทอรีและรีโพซิทอรีถูก mount ให้อัตโนมัติ
- ต่างจากคอนเทนเนอร์แบบเดิมที่ยึดตามระดับแอปพลิเคชัน โดยมัน จำลองสภาพแวดล้อม Linux ทั้งชุด (คล้าย WSL2)
- สามารถรัน init system ของอิมเมจ เพื่อใช้ลงทะเบียนบริการที่ทำงานระยะยาวหรือทดสอบแอปพลิเคชันภายใต้ตัวจัดการโปรเซส
- บนอิมเมจที่ติดตั้ง
systemd สามารถรันบริการ Linux จริง เช่น systemctl start postgresql ได้
- แมปชื่อผู้ใช้และโฮมไดเรกทอรีโดยอัตโนมัติ ทำให้แชร์รีโพซิทอรีและ dotfile ระหว่าง macOS กับ Linux ได้ทั้งสองฝั่ง
- รีโพซิทอรีจะอยู่ใน macOS
$HOME และถูก mount ภายในที่ /Users/<username> ทำให้แก้ไขด้วยเอดิเตอร์หรือ IDE บน macOS แล้วคอมไพล์และรันจากภายในได้
- เครื่องมือเนทีฟของ macOS อย่าง profiler, เบราว์เซอร์, GUI debugger ฯลฯ จะเห็นไฟล์ชุดเดียวกัน จึงไม่ต้องมีขั้นตอนคัดลอกระหว่างการ build และการตรวจสอบ
- สามารถสร้าง Container Machine ได้ตามจำนวนดิสโทรเป้าหมาย เช่น
alpine, ubuntu, debian โดยแต่ละตัวแชร์ $HOME และ dotfile ชุดเดียวกัน จึงทดสอบข้ามหลายดิสโทรได้รวดเร็ว
- อิมเมจ Linux ใดก็ตามที่มี
/sbin/init สามารถใช้เป็นอิมเมจ Container Machine ได้โดยตรง
- เนื่องจากรองรับ OCI-compatible container image ทั้งการใช้งานและการสร้าง จึงสามารถ pull และ push Docker image กับรีจิสทรีคอนเทนเนอร์มาตรฐานได้
- อิมเมจดังกล่าวยังสามารถรันได้บนแอปพลิเคชันอื่นที่รองรับ OCI เช่นกัน
- การจัดการคอนเทนเนอร์ อิมเมจ และโปรเซสระดับล่างอาศัย แพ็กเกจ Swift ชื่อ Containerization
- การใช้งานต้องใช้ Mac ที่ติดตั้ง Apple silicon และรองรับบน macOS 26
- ใช้ความสามารถและการปรับปรุงใหม่ด้าน virtualization และ networking ของ macOS 26 โดย macOS เวอร์ชันก่อนหน้าไม่รองรับ
- ไลเซนส์ Apache-2.0
คำสั่งการใช้งาน
container machine create alpine:latest --name dev
container machine run -n dev whoami # your host username, not root
container machine run -n dev pwd # /home/<you> — your Mac home dir, mounted in
container machine run -n dev # interactive shell; cd into your repos in $HOME
container machine ls # list all container machines
container machine inspect dev # JSON detail for one
container machine stop dev # stop the container machine
container machine rm dev # delete, including its persistent storage
container machine set -n dev cpus=4 memory=8G
container machine stop dev
container machine run -n dev -- nproc
- Containerization คือเฟรมเวิร์ก Swift ที่เปิดซอร์สในงาน WWDC 25 และเป็นพื้นฐานสำหรับการรันคอนเทนเนอร์ Linux บน macOS
- ถูกออกแบบมาเพื่อให้แต่ละคอนเทนเนอร์มีการแยกตัวแบบใช้เครื่องเสมือนเป็นฐาน และด้วยความเป็นเครื่องเสมือนน้ำหนักเบาจึงให้ประสิทธิภาพสูงและเวลาเริ่มต้นต่ำกว่า 1 วินาที
- Container machine คือฟีเจอร์ใหม่ที่สร้างอยู่บน Containerization โดยรวมความใช้งานง่ายและความเร็วของคอนเทนเนอร์เข้ากับความคงอยู่ถาวรของเครื่องเสมือน และด้วยความสามารถในการผสานรวม ทำให้สภาพแวดล้อม Linux ให้ความรู้สึกเหมือนเป็นส่วนขยายของ macOS
-
หลักการออกแบบ
- Container machine ต้องรวดเร็วและเบาเพื่อให้ผสานเข้ากับเวิร์กโฟลว์เดิมได้
- ต้องสลับไปมาระหว่าง macOS และ Linux ได้ง่าย
- ผู้ใช้ต้องสามารถสร้างและปรับแต่งสภาพแวดล้อมใหม่ได้อย่างรวดเร็ว เพื่อให้หลายโปรเจกต์มีสภาพแวดล้อมเฉพาะของตนเองโดยไม่ต้องกังวลเรื่อง dependency หรือ toolchain ชนกัน
- เนื่องจากเครื่องมือและ dependency ที่ต้องใช้สามารถเปลี่ยนไปตามช่วงของวงจรการพัฒนา จึงต้องสามารถเพิ่มเครื่องมือเข้าไปในสภาพแวดล้อมแบบคงอยู่และกลับมาใช้ใหม่ได้ในภายหลัง
- เมื่อต้องพัฒนาสำหรับหลายแพลตฟอร์ม ไม่ควรต้องมีการสลับบริบทครั้งใหญ่หรือเรียนรู้เครื่องมือใหม่
3 ความคิดเห็น
จะได้ประสิทธิภาพเพียงพอไหม?
มองยังไงก็ดูเหมือน WSL2 เวอร์ชัน Mac อยู่ดี แค่ไม่แน่ใจว่าตอนแมป host volume แล้วประสิทธิภาพ I/O จะไม่ตกฮวบหรือเปล่า
ตอนนี้ก็ใช้
limactlรันคอนเทนเนอร์บน VM อยู่แล้ว เลยรู้สึกว่าอาจไม่ได้ต่างกันมากนักความคิดเห็นจาก Hacker News
ขอทำให้บางอย่างชัดเจนตรงนี้ก่อน นี่ไม่ได้หมายถึงแค่ OCI container เท่านั้น
Container Machines รองรับ persistence และการเมานต์ไฟล์ซิสเต็ม จึงเป็น สภาพแวดล้อม Linux แบบเบา ที่ยอดเยี่ยมสำหรับนักพัฒนาที่ใช้ macOS
รายละเอียดเพิ่มเติมดูได้ที่นี่: https://developer.apple.com/videos/play/wwdc2026/389
OrbStack เหมาะกับผมมาก
เลยสงสัยว่าด้านประสิทธิภาพจะเทียบกับอันนี้เป็นอย่างไร
แทนที่จะใช้ Virtualization.framework เราใช้ virtualization stack ที่พัฒนาขึ้นเองบน Rust พร้อมอุปกรณ์และโปรโตคอลแบบกำหนดเองสำหรับฟีเจอร์อย่างการแชร์ไฟล์ซิสเต็ม
มันเป็นสแตกแบบบูรณาการแนวดิ่งที่ปรับจูนอย่างหนักเพื่อการรัน Linux machine และ container โดยเฉพาะ
จุดเด่นด้านประสิทธิภาพ/ทรัพยากรที่ใหญ่ที่สุดคือ หน่วยความจำแบบไดนามิก ซึ่งคืนหน่วยความจำที่ไม่ได้ใช้กลับไปให้ macOS จึงลดการใช้หน่วยความจำได้มาก
อย่างอื่น รวมถึง Containerization ยังไม่รองรับสิ่งนี้
พอลองใช้ Container Machines แล้ว มันดูใกล้เคียงกับ OCI container ที่มี default bind mount ติดมามากกว่า OrbStack machine
มีฟีเจอร์การผสานรวมน้อยกว่า และไม่ได้รัน systemd หรือ init system ทั่วไป จึงทำให้รัน service ได้ยาก
ตอนนี้ผมน่าจะใช้ Podman หรือ Colima มากกว่า
เท่าที่ดูมันคล้ายกันมาก
จะเลือกให้รัน dockerd ก็ได้ และ https://github.com/cpuguy83/crucible ก็รัน buildkitd หรือ dockerd บนเฟรมเวิร์ก Containerization แล้วเชื่อมเข้ากับ docker/buildx CLI หรือเครื่องมือไคลเอนต์อื่นตามต้องการ
เฟรมเวิร์ก Containerization เป็นไลบรารีที่วางอยู่บน Virtualization framework ดังนั้น แต่ละ container จึงมี VM ของตัวเอง
Machine คือเครื่องมือบนเฟรมเวิร์ก Containerization ที่ใช้รันงานหลายอย่างกับ container ภายใน VM
container พวกนี้ใช้ kernel ร่วมกัน หรือเปล่า? หรือแต่ละอันรันอยู่ใน VM แยกกัน?
แก้ไข: หนึ่ง VM ต่อหนึ่ง container https://github.com/apple/container/blob/main/docs/technical-...
Apple container เหมาะมากสำหรับทำ sandbox ให้กับ AI coding agent
ผมทำมันเป็น MCP ไว้แล้วเพื่อให้ coding agent ทั้งหมดค้นหาเจอได้ง่าย
https://github.com/instavm/coderunner
ผมสงสัยว่าสามารถเปลี่ยน volume ของ container ไปเป็นอย่างเช่น external drive ได้ไหม
ตอนนี้ผมทำแบบนั้นอยู่ด้วย QMEU และอิมเมจ qcow2 แล้วมันก็ทำงานได้โอเคพอสมควร
สงสัยว่าทำไม macOS ไม่ลองแนวทางแบบ WSL1
ผมเข้าใจว่าทำไมมันถึงไม่ประสบความสำเร็จเต็มที่บน Windows แต่ macOS ก็เป็น *nix อีกตัวอยู่แล้ว หลายอย่างที่ยากบน Windows น่าจะง่ายกว่าบน Mac
ถ้าเพิ่ม API ใหม่อีกนิดหน่อย ก็ดูเหมือนว่าจะสามารถรันแอปพลิเคชัน Linux ส่วนใหญ่แบบเนทีฟบน macOS ได้
ที่จริง BSD ก็มีอะไรแบบนี้อยู่แล้ว
เมื่อเทียบกับ Linux kernel แล้ว ABI ก็เรียบง่ายและเสถียรกว่ามาก
แบบนี้จะมาแทนพวก Docker Desktop และกำจัด Linux VM ราคาแพง ที่ต้องรันค้างไว้ข้างๆ ได้ไหม?
Docker Desktop มีโอเวอร์เฮดค่อนข้างหนัก ถ้าสิ่งนี้เข้าไปอยู่ใน DD แบบเนทีฟได้ก็คงดี
ดูจากที่ Docker เคยพยายามปรับปรุงประสิทธิภาพในอดีตก่อนจะต้องยอมรับข้อจำกัดของแพลตฟอร์มอย่างรวดเร็ว มันก็ดูเป็นไปได้อยู่ และการย้าย DD ไปฝั่ง container ก็ดูเป็นเรื่องธรรมชาติ
ผมลองย้าย workload ของ Podman มาใช้ Apple container แล้ว: https://gist.github.com/jmonster/39e14585e107dbf990a90966c0f...
สรุปคือใช้ RAM/พื้นที่จัดเก็บน้อยลง และแทบไม่รบกวนการใช้งาน
ความลำบากของการต้องหาทางเลี่ยง Docker Desktop มันเยอะมาก
ผมเหมือนต้อง
rm -rf ~/.colimaทุกๆ สองสามวันน่าแปลกใจที่ Apple ใส่ใจเรื่องนี้มากพอจะทำมันขึ้นมา
ถึงอย่างนั้นผมก็ยังอยากใช้ Linux อยู่ดี แต่ ความคุ้มค่าของ MacBook มันสูงมาก
เครื่องมือนี้ผมอาจจะใช้ก็ได้
ทุกครั้งที่เห็น Apple โชว์ Linux container ผมมองแทบไม่ออกนอกจากว่าเป็นการ ยอมรับความพ่ายแพ้
ถ้ายังมีศักยภาพอยู่จริง ป่านนี้ก็น่าจะทำทุกอย่างได้ด้วย Darwin แล้ว
นักพัฒนาจริงจังคนไหนจะอยากใช้โค้ดปิดที่ดีบักและแก้ไขเองไม่ได้ โดยเฉพาะบนเซิร์ฟเวอร์ production?
เหตุผลเดียวกันนี้เองที่ทำให้นักพัฒนาหรือแฮ็กเกอร์จริงจังไม่ใช้ macOS
เพราะหนึ่งในแก่นสำคัญของการเป็นนักพัฒนาคือความสามารถในการเจาะลงไปดีบักและแก้ไขโค้ดได้ในทุกชั้น
Apple เลิกตลาดเซิร์ฟเวอร์ไปตั้งแต่ 10 ปีก่อน และก่อนหน้านั้นก็แทบไม่ได้สนับสนุนอะไรจริงจังอยู่แล้ว
ต่อให้รองรับ Darwin container มันจะมีความหมายอะไร? ก็ไม่มีใครสร้างอะไรให้รองรับมันอยู่ดี เพราะ Linux ชนะไปแล้ว
นี่เป็นฟีเจอร์ใหม่เหรอ?
ผมนึกว่ามีอยู่แล้ว
ตอนที่ผมทดสอบ ในสภาพแวดล้อมพัฒนา Node/Rust ที่ต้อง
statไฟล์เล็กๆ จำนวนมาก ประสิทธิภาพไฟล์ซิสเต็ม ยังไม่ถึงระดับที่ใช้งานได้ดีอัปเดต: ของใหม่คือซับคอมมานด์
container machineผมพยายามจะทดสอบ แต่ในสภาพแวดล้อมของผม container รันไม่ได้เลย: https://github.com/apple/container/issues/1681
ยังมีงานที่ต้องทำอีก แต่ยินดีรับ workload สำหรับทดสอบ
เราทุ่มแรงไปมากกับการปรับแต่งโปรโตคอลแชร์ไฟล์ซิสเต็มแบบกำหนดเองของ OrbStack ให้เหมาะกับไฟล์ขนาดเล็กและ workload ของนักพัฒนาที่พบได้บ่อย
ไม่ใช่ virtiofs มาตรฐาน
มันใช้เฟรมเวิร์ก container ที่มีอยู่แล้วเพื่อรัน machine
ทำได้ทั้งแบบมีสิทธิ์ root และแบบ rootless