6 คะแนน โดย xguru 6 시간 전 | 3 ความคิดเห็น | แชร์ทาง WhatsApp
  • เครื่องมือสำหรับสร้างและรันคอนเทนเนอร์ 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  

วิดีโอแนะนำจาก WWDC26 - ลองดู Container Machine

  • Containerization คือเฟรมเวิร์ก Swift ที่เปิดซอร์สในงาน WWDC 25 และเป็นพื้นฐานสำหรับการรันคอนเทนเนอร์ Linux บน macOS
  • ถูกออกแบบมาเพื่อให้แต่ละคอนเทนเนอร์มีการแยกตัวแบบใช้เครื่องเสมือนเป็นฐาน และด้วยความเป็นเครื่องเสมือนน้ำหนักเบาจึงให้ประสิทธิภาพสูงและเวลาเริ่มต้นต่ำกว่า 1 วินาที
  • Container machine คือฟีเจอร์ใหม่ที่สร้างอยู่บน Containerization โดยรวมความใช้งานง่ายและความเร็วของคอนเทนเนอร์เข้ากับความคงอยู่ถาวรของเครื่องเสมือน และด้วยความสามารถในการผสานรวม ทำให้สภาพแวดล้อม Linux ให้ความรู้สึกเหมือนเป็นส่วนขยายของ macOS
  • หลักการออกแบบ

    • Container machine ต้องรวดเร็วและเบาเพื่อให้ผสานเข้ากับเวิร์กโฟลว์เดิมได้
    • ต้องสลับไปมาระหว่าง macOS และ Linux ได้ง่าย
    • ผู้ใช้ต้องสามารถสร้างและปรับแต่งสภาพแวดล้อมใหม่ได้อย่างรวดเร็ว เพื่อให้หลายโปรเจกต์มีสภาพแวดล้อมเฉพาะของตนเองโดยไม่ต้องกังวลเรื่อง dependency หรือ toolchain ชนกัน
    • เนื่องจากเครื่องมือและ dependency ที่ต้องใช้สามารถเปลี่ยนไปตามช่วงของวงจรการพัฒนา จึงต้องสามารถเพิ่มเครื่องมือเข้าไปในสภาพแวดล้อมแบบคงอยู่และกลับมาใช้ใหม่ได้ในภายหลัง
    • เมื่อต้องพัฒนาสำหรับหลายแพลตฟอร์ม ไม่ควรต้องมีการสลับบริบทครั้งใหญ่หรือเรียนรู้เครื่องมือใหม่

3 ความคิดเห็น

 
recast7838 25 분 전

จะได้ประสิทธิภาพเพียงพอไหม?

 
click 4 시간 전

มองยังไงก็ดูเหมือน WSL2 เวอร์ชัน Mac อยู่ดี แค่ไม่แน่ใจว่าตอนแมป host volume แล้วประสิทธิภาพ I/O จะไม่ตกฮวบหรือเปล่า
ตอนนี้ก็ใช้ limactl รันคอนเทนเนอร์บน VM อยู่แล้ว เลยรู้สึกว่าอาจไม่ได้ต่างกันมากนัก

 
GN⁺ 4 시간 전
ความคิดเห็นจาก Hacker News
  • ขอทำให้บางอย่างชัดเจนตรงนี้ก่อน นี่ไม่ได้หมายถึงแค่ OCI container เท่านั้น
    Container Machines รองรับ persistence และการเมานต์ไฟล์ซิสเต็ม จึงเป็น สภาพแวดล้อม Linux แบบเบา ที่ยอดเยี่ยมสำหรับนักพัฒนาที่ใช้ macOS
    รายละเอียดเพิ่มเติมดูได้ที่นี่: https://developer.apple.com/videos/play/wwdc2026/389

    • อ้อ แบบนี้ก็คือ Darwin/BSD subsystem สำหรับ Linux สินะ
  • OrbStack เหมาะกับผมมาก
    เลยสงสัยว่าด้านประสิทธิภาพจะเทียบกับอันนี้เป็นอย่างไร

    • ผมเป็นนักพัฒนา OrbStack
      แทนที่จะใช้ Virtualization.framework เราใช้ virtualization stack ที่พัฒนาขึ้นเองบน Rust พร้อมอุปกรณ์และโปรโตคอลแบบกำหนดเองสำหรับฟีเจอร์อย่างการแชร์ไฟล์ซิสเต็ม
      มันเป็นสแตกแบบบูรณาการแนวดิ่งที่ปรับจูนอย่างหนักเพื่อการรัน Linux machine และ container โดยเฉพาะ
      จุดเด่นด้านประสิทธิภาพ/ทรัพยากรที่ใหญ่ที่สุดคือ หน่วยความจำแบบไดนามิก ซึ่งคืนหน่วยความจำที่ไม่ได้ใช้กลับไปให้ macOS จึงลดการใช้หน่วยความจำได้มาก
      อย่างอื่น รวมถึง Containerization ยังไม่รองรับสิ่งนี้
      พอลองใช้ Container Machines แล้ว มันดูใกล้เคียงกับ OCI container ที่มี default bind mount ติดมามากกว่า OrbStack machine
      มีฟีเจอร์การผสานรวมน้อยกว่า และไม่ได้รัน systemd หรือ init system ทั่วไป จึงทำให้รัน service ได้ยาก
    • ผมชอบแนวคิดของ OrbStack แต่คิดว่ายากที่จะอธิบายความคุ้มค่าของ ไลเซนส์ 96 ดอลลาร์ต่อปี ในเมื่อมีทางเลือกฟรีและโอเพนซอร์สอยู่มาก
      ตอนนี้ผมน่าจะใช้ Podman หรือ Colima มากกว่า
    • อยากเห็นการเปรียบเทียบกับ https://tart.run/ ด้วย
      เท่าที่ดูมันคล้ายกันมาก
    • มันไม่ใช่สภาพแวดล้อม Docker แบบครบชุด แต่ถูกออกแบบมาเพื่อใช้สำหรับงาน build
      จะเลือกให้รัน dockerd ก็ได้ และ https://github.com/cpuguy83/crucible ก็รัน buildkitd หรือ dockerd บนเฟรมเวิร์ก Containerization แล้วเชื่อมเข้ากับ docker/buildx CLI หรือเครื่องมือไคลเอนต์อื่นตามต้องการ
      เฟรมเวิร์ก Containerization เป็นไลบรารีที่วางอยู่บน Virtualization framework ดังนั้น แต่ละ container จึงมี VM ของตัวเอง
      Machine คือเครื่องมือบนเฟรมเวิร์ก Containerization ที่ใช้รันงานหลายอย่างกับ container ภายใน VM
    • ผมชอบ OrbStack มากจริงๆ และตอนนี้ก็ยังไม่ค่อยเข้าใจว่าทำไมถึงควรใช้ Container Machines แทน
  • 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 ก็มีอะไรแบบนี้อยู่แล้ว

    • มันจะมีข้อดีอะไรเหนือกว่า โครงสร้างพื้นฐาน VM ที่ Apple ยังไงก็ต้องมีอยู่แล้ว?
      เมื่อเทียบกับ Linux kernel แล้ว ABI ก็เรียบง่ายและเสถียรกว่ามาก
  • แบบนี้จะมาแทนพวก Docker Desktop และกำจัด Linux VM ราคาแพง ที่ต้องรันค้างไว้ข้างๆ ได้ไหม?

    • นั่นก็เป็นความคิดแรกของผมเหมือนกัน
      Docker Desktop มีโอเวอร์เฮดค่อนข้างหนัก ถ้าสิ่งนี้เข้าไปอยู่ใน DD แบบเนทีฟได้ก็คงดี
      ดูจากที่ Docker เคยพยายามปรับปรุงประสิทธิภาพในอดีตก่อนจะต้องยอมรับข้อจำกัดของแพลตฟอร์มอย่างรวดเร็ว มันก็ดูเป็นไปได้อยู่ และการย้าย DD ไปฝั่ง container ก็ดูเป็นเรื่องธรรมชาติ
    • มันเป็นการตัด shared background VM ตัวใหญ่ทิ้งไปเกือบหมด แล้วแทนที่ด้วย Apple native VM ที่เล็กกว่าและแยกขาดกันมากกว่า
      ผมลองย้าย workload ของ Podman มาใช้ Apple container แล้ว: https://gist.github.com/jmonster/39e14585e107dbf990a90966c0f...
      สรุปคือใช้ RAM/พื้นที่จัดเก็บน้อยลง และแทบไม่รบกวนการใช้งาน
    • มีคนอื่นพูดไว้ตรงนี้เหมือนกัน แต่ช่วงหลังผมย้ายไปใช้ Colima แล้ว
      ความลำบากของการต้องหาทางเลี่ยง Docker Desktop มันเยอะมาก
    • ถ้าเป็นแบบนั้นได้ก็คงดีมาก
      ผมเหมือนต้อง rm -rf ~/.colima ทุกๆ สองสามวัน
  • น่าแปลกใจที่ Apple ใส่ใจเรื่องนี้มากพอจะทำมันขึ้นมา
    ถึงอย่างนั้นผมก็ยังอยากใช้ Linux อยู่ดี แต่ ความคุ้มค่าของ MacBook มันสูงมาก

    • ผมก็อยากใช้ Linux ตลอดเวลาเหมือนกัน แต่บางทีบริษัทก็แจก MacBook ให้
      เครื่องมือนี้ผมอาจจะใช้ก็ได้
  • ทุกครั้งที่เห็น Apple โชว์ Linux container ผมมองแทบไม่ออกนอกจากว่าเป็นการ ยอมรับความพ่ายแพ้
    ถ้ายังมีศักยภาพอยู่จริง ป่านนี้ก็น่าจะทำทุกอย่างได้ด้วย Darwin แล้ว

    • ตั้งแต่ Apple ตัดสินใจทำ macOS ให้เป็นโค้ดปิด พวกเขาก็เหมือนปูทางให้ตัวเองแพ้ใน ตลาดเซิร์ฟเวอร์และนักพัฒนา ไปแล้ว
      นักพัฒนาจริงจังคนไหนจะอยากใช้โค้ดปิดที่ดีบักและแก้ไขเองไม่ได้ โดยเฉพาะบนเซิร์ฟเวอร์ production?
      เหตุผลเดียวกันนี้เองที่ทำให้นักพัฒนาหรือแฮ็กเกอร์จริงจังไม่ใช้ macOS
      เพราะหนึ่งในแก่นสำคัญของการเป็นนักพัฒนาคือความสามารถในการเจาะลงไปดีบักและแก้ไขโค้ดได้ในทุกชั้น
    • แค่ต้องเปลี่ยนประวัติศาสตร์อินเทอร์เน็ตย้อนหลัง 30 ปีก็พอ
    • แล้วทางเลือกคืออะไร?
      Apple เลิกตลาดเซิร์ฟเวอร์ไปตั้งแต่ 10 ปีก่อน และก่อนหน้านั้นก็แทบไม่ได้สนับสนุนอะไรจริงจังอยู่แล้ว
      ต่อให้รองรับ Darwin container มันจะมีความหมายอะไร? ก็ไม่มีใครสร้างอะไรให้รองรับมันอยู่ดี เพราะ Linux ชนะไปแล้ว
  • นี่เป็นฟีเจอร์ใหม่เหรอ?
    ผมนึกว่ามีอยู่แล้ว
    ตอนที่ผมทดสอบ ในสภาพแวดล้อมพัฒนา Node/Rust ที่ต้อง stat ไฟล์เล็กๆ จำนวนมาก ประสิทธิภาพไฟล์ซิสเต็ม ยังไม่ถึงระดับที่ใช้งานได้ดี
    อัปเดต: ของใหม่คือซับคอมมานด์ container machine
    ผมพยายามจะทดสอบ แต่ในสภาพแวดล้อมของผม container รันไม่ได้เลย: https://github.com/apple/container/issues/1681

    • สงสัยว่าคุณได้ลอง OrbStack หรือยัง
      ยังมีงานที่ต้องทำอีก แต่ยินดีรับ workload สำหรับทดสอบ
      เราทุ่มแรงไปมากกับการปรับแต่งโปรโตคอลแชร์ไฟล์ซิสเต็มแบบกำหนดเองของ OrbStack ให้เหมาะกับไฟล์ขนาดเล็กและ workload ของนักพัฒนาที่พบได้บ่อย
      ไม่ใช่ virtiofs มาตรฐาน
    • เผื่อไว้เป็นข้อมูล Podman ก็ใช้บน macOS ได้
      มันใช้เฟรมเวิร์ก container ที่มีอยู่แล้วเพื่อรัน machine
      ทำได้ทั้งแบบมีสิทธิ์ root และแบบ rootless