วิธีใช้ Apple Container ทางเลือก Docker แบบโอเพนซอร์สใน Swift

Mark Ponomarev

Mark Ponomarev

10 June 2025

วิธีใช้ Apple Container ทางเลือก Docker แบบโอเพนซอร์สใน Swift

คอนเทนเนอร์ได้กลายเป็นเครื่องมือที่ขาดไม่ได้ มันมอบความยืดหยุ่นในการพกพา ความสอดคล้องกัน และประสิทธิภาพ ทำให้ผู้พัฒนาสามารถสร้างและติดตั้งแอปพลิเคชันได้อย่างน่าเชื่อถือในสภาพแวดล้อมที่แตกต่างกัน เป็นเวลาหลายปีที่ Docker เป็นมาตรฐานโดยพฤตินัยบน macOS แต่คู่แข่งรายใหม่ ซึ่งถือกำเนิดจาก Apple โดยตรง พร้อมที่จะนำเสนอประสบการณ์ที่เป็นแบบเนทีฟ ผสานรวม และคล่องตัวยิ่งขึ้นสำหรับผู้พัฒนาบน Apple Silicon: container.

container เป็นเครื่องมือโอเพนซอร์สใหม่จาก Apple ที่ช่วยให้คุณสร้างและรันคอนเทนเนอร์ Linux มาตรฐานที่รองรับ OCI บน Mac ของคุณได้ เขียนขึ้นทั้งหมดด้วยภาษา Swift และปรับให้เหมาะสมกับ Apple Silicon โดยออกแบบมาให้เป็นทางเลือกที่มีน้ำหนักเบาและประสิทธิภาพสูงสำหรับรันไทม์คอนเทนเนอร์อื่นๆ มันใช้ประโยชน์จากเทคโนโลยีเวอร์ชวลไลเซชันของ macOS เอง เพื่อรันคอนเทนเนอร์ในรูปแบบเครื่องเสมือน (virtual machines) ที่เล็กและแยกออกจากกัน ซึ่งให้ความปลอดภัยที่ดีขึ้นและใช้ทรัพยากรน้อยลง

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

💡
ต้องการเครื่องมือทดสอบ API ที่ยอดเยี่ยมที่สร้าง เอกสารประกอบ API ที่สวยงาม ใช่ไหม?

ต้องการแพลตฟอร์มแบบ All-in-One ที่ผสานรวมกันสำหรับทีมผู้พัฒนาของคุณ เพื่อทำงานร่วมกันด้วย ประสิทธิภาพสูงสุด ใช่ไหม?

Apidog ตอบสนองทุกความต้องการของคุณ และ แทนที่ Postman ในราคาที่เข้าถึงได้ง่ายกว่ามาก!
ปุ่ม

ทำไมต้องมีเครื่องมือคอนเทนเนอร์ใหม่? วิสัยทัศน์เบื้องหลัง container

ในสภาพแวดล้อมที่มีผู้เล่นรายใหญ่ครองตลาด ทำไม Apple ถึงตัดสินใจสร้างเครื่องมือคอนเทนเนอร์ของตัวเอง? คำตอบอยู่ในวิสัยทัศน์ที่จะมอบประสบการณ์ที่ผสานรวมอย่างลึกซึ้ง มีประสิทธิภาพ และเป็นมิตรกับผู้พัฒนา บนฮาร์ดแวร์และซอฟต์แวร์ของตนเอง container ไม่ใช่แค่โคลน Docker อีกตัวหนึ่ง แต่เป็นการจินตนาการใหม่ว่าการใช้คอนเทนเนอร์บน Mac จะเป็นอย่างไรได้บ้าง

ประสิทธิภาพแบบเนทีฟบน Apple Silicon

แตกต่างจากโซลูชันอื่นๆ ที่อาจต้องพึ่งพาเครื่องเสมือน Linux ที่หนักกว่า หรือเลเยอร์ความเข้ากันได้ข้ามแพลตฟอร์ม container ถูกสร้างขึ้นมาตั้งแต่ต้นสำหรับ Apple Silicon เป็นแอปพลิเคชัน Swift ที่สื่อสารโดยตรงกับ Virtualization.framework แบบเนทีฟของ Apple ซึ่งส่งผลให้ได้เปรียบด้านประสิทธิภาพอย่างมาก ไม่มีเลเยอร์การจำลองเหมือน Rosetta 2 เข้ามาเกี่ยวข้องสำหรับรันไทม์เอง และคอนเทนเนอร์แต่ละตัวจะรันใน VM น้ำหนักเบาของตัวเอง ซึ่งบูตได้เร็วกว่าการเปิดเครื่องเสมือนแบบเต็มรูปแบบอย่างมาก

สถาปัตยกรรมที่ปลอดภัยอย่างเป็นเอกลักษณ์

ความปลอดภัยเป็นหัวใจสำคัญของการออกแบบ container ภาพรวมทางเทคนิคเผยให้เห็นการตัดสินใจทางสถาปัตยกรรมที่สำคัญ: แทนที่จะรันคอนเทนเนอร์ทั้งหมดภายในเครื่องเสมือน Linux เดียวที่ใช้ร่วมกัน container จะเปิดตัว micro-VM ที่เล็กและแยกเฉพาะสำหรับคอนเทนเนอร์ แต่ละตัว

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

การรองรับ OCI: ทำงานร่วมกับผู้อื่นได้ดี

แม้จะมีสถาปัตยกรรมที่เป็นเอกลักษณ์ แต่ container ก็ยอมรับมาตรฐานเปิดอย่างเต็มที่ มันใช้และสร้างอิมเมจที่รองรับ Open Container Initiative (OCI) นี่เป็นคุณสมบัติที่สำคัญ เนื่องจากหมายความว่าคุณจะไม่ถูกผูกติดอยู่กับระบบนิเวศที่เป็นกรรมสิทธิ์เฉพาะ คุณสามารถดึงอิมเมจมาตรฐานจาก Docker Hub รันด้วย container สร้างอิมเมจใหม่ และพุชกลับไปยัง registry ใดๆ ที่รองรับ OCI เช่น GitHub Container Registry (ghcr.io) อิมเมจที่คุณสร้างด้วย container จะทำงานร่วมกับเครื่องมืออื่นๆ และใน CI/CD pipelines ในสภาพแวดล้อมการผลิตได้อย่างราบรื่น

การผสานรวมกับ macOS อย่างลึกซึ้ง

container เป็นพลเมืองที่ดีบน macOS มันผสานรวมกับเทคโนโลยีหลักของระบบเพื่อให้ประสบการณ์ผู้ใช้ที่ราบรื่น:

เจาะลึกเบื้องหลัง: ภาพรวมทางเทคนิคโดยย่อ

เครื่องมือบรรทัดคำสั่ง container (container) เป็นไคลเอนต์ที่สื่อสารกับกระบวนการเซิร์ฟเวอร์เบื้องหลัง คือ container-apiserver เซิร์ฟเวอร์นี้ ซึ่งคุณเริ่มต้นด้วยคำสั่ง container system start จะจัดการทุกอย่าง

เมื่อคุณออกคำสั่งเช่น container run เซิร์ฟเวอร์ API จะเปิดตัวตัวช่วยรันไทม์เฉพาะ (container-runtime-linux) สำหรับคอนเทนเนอร์นั้นๆ ตัวช่วยนี้จะใช้ Virtualization.framework เพื่อสร้าง VM Linux ใหม่ที่เล็กมาก ซึ่งทำหน้าที่เป็นโฮสต์สำหรับกระบวนการของคอนเทนเนอร์ของคุณ สถาปัตยกรรมนี้มีความสง่างาม แข็งแกร่ง และออกแบบมาเพื่อความปลอดภัยและประสิทธิภาพ

สิ่งสำคัญที่ควรทราบคือ ในฐานะโครงการใหม่ container ยังมีข้อจำกัดบางประการ ต้องใช้ macOS เวอร์ชันที่ทันสมัย (macOS 15 โดยมีประสิทธิภาพดีที่สุดบน macOS 26 Beta 1 ล่าสุด) การเชื่อมต่อเครือข่ายระหว่างคอนเทนเนอร์กับโฮสต์ยังมีวิธีแก้ปัญหาเฉพาะบางอย่าง และคุณสมบัติขั้นสูงเช่น memory ballooning ยังอยู่ระหว่างการพัฒนา อย่างไรก็ตาม รากฐานมีความแข็งแกร่ง และโครงการกำลังพัฒนาอย่างรวดเร็ว

วิธีใช้ container: บทแนะนำทีละขั้นตอน

มาลงมือปฏิบัติจริงกัน บทแนะนำนี้จะพาคุณไปตลอดวงจรชีวิตของคอนเทนเนอร์: การสร้างอิมเมจสำหรับเว็บเซิร์ฟเวอร์ง่ายๆ การรัน การโต้ตอบ และการเผยแพร่

ขั้นตอนที่ 1: การติดตั้งและตั้งค่า

ก่อนอื่น ตรวจสอบให้แน่ใจว่าคุณตรงตามข้อกำหนด: Mac ที่ใช้ Apple Silicon และรัน macOS เวอร์ชันล่าสุด

ติดตั้ง container: ดาวน์โหลดแพ็กเกจตัวติดตั้งที่ลงนามล่าสุดจาก หน้าเผยแพร่บน GitHub ของโครงการ ดับเบิลคลิกไฟล์ .pkg และทำตามคำแนะนำการติดตั้ง

เริ่มบริการ: เปิด Terminal ของคุณและเริ่มบริการระบบ container

container system start

ครั้งแรกที่คุณรันคำสั่งนี้ ระบบอาจแจ้งให้คุณดาวน์โหลดและติดตั้งเคอร์เนล Linux เริ่มต้น พิมพ์ y แล้วกด Enter เพื่อดำเนินการต่อ

ตรวจสอบการติดตั้ง: ตรวจสอบว่าบริการกำลังทำงานหรือไม่ โดยแสดงรายการคอนเทนเนอร์ทั้งหมดที่มี (ซึ่ง ณ จุดนี้ควรจะไม่มีเลย)

container ls -a
# คุณควรเห็นหัวข้อที่ว่างเปล่า:
# ID  IMAGE  OS  ARCH  STATE  ADDR

ขั้นตอนที่ 2: การสร้างอิมเมจแรกของคุณ

ตอนนี้ มาสร้างอิมเมจคอนเทนเนอร์สำหรับเว็บเซิร์ฟเวอร์ Python อย่างง่ายกัน

สร้างไดเรกทอรีโครงการ:

mkdir web-test
cd web-test

สร้างไฟล์ Dockerfile: ภายในไดเรกทอรี web-test ให้สร้างไฟล์ชื่อ Dockerfile (หรือ Containerfile) พร้อมเนื้อหาต่อไปนี้ ไฟล์นี้กำหนด "สูตร" สำหรับอิมเมจของเรา

# เริ่มจากอิมเมจ Python พื้นฐานที่มีน้ำหนักเบา
FROM docker.io/python:alpine

# ตั้งค่าไดเรกทอรีการทำงานภายในคอนเทนเนอร์
WORKDIR /content

# เพิ่มยูทิลิตี้ 'curl' สำหรับการทดสอบ
RUN apk add curl

# สร้างไฟล์ HTML อย่างง่าย
RUN echo '<!DOCTYPE html><html><head><title>Hello from Container</title></head><body><h1>Hello, Apple Container!</h1></body></html>' > index.html

# คำสั่งที่จะรันเมื่อคอนเทนเนอร์เริ่มต้น
CMD ["python3", "-m", "http.server", "80", "--bind", "0.0.0.0"]

สร้างอิมเมจ: ตอนนี้ บอกให้ container สร้างอิมเมจจาก Dockerfile ของคุณ เราจะติดแท็กด้วยชื่อ web-test

container build --tag web-test --file Dockerfile .

เครื่องหมาย . ที่อยู่ท้ายสุดบอกให้ builder ใช้ไดเรกทอรีปัจจุบันเป็น context

แสดงรายการอิมเมจของคุณ: หลังจากสร้างเสร็จสิ้น คุณจะเห็นอิมเมจใหม่ของคุณในที่เก็บอิมเมจภายในเครื่อง

container images list
# คุณควรเห็นอิมเมจ `web-test` ของคุณและอิมเมจพื้นฐาน `python:alpine`
# NAME      TAG     DIGEST
# python    alpine  b4d299311845...
# web-test  latest  25b99501f174...

ขั้นตอนที่ 3: การรันคอนเทนเนอร์ของคุณ

เมื่อสร้างอิมเมจของเราเสร็จแล้ว มาลองรันกัน

รันเว็บเซิร์ฟเวอร์: ใช้คำสั่ง container run เพื่อเริ่มต้นคอนเทนเนอร์จากอิมเมจ web-test ของคุณ

container run --name my-web-server --detach --rm web-test

มาทำความเข้าใจแฟล็กเหล่านี้กัน:

ตรวจสอบคอนเทนเนอร์ที่กำลังทำงาน: แสดงรายการคอนเทนเนอร์ที่กำลังทำงานอยู่

container ls

คุณจะเห็นคอนเทนเนอร์ my-web-server ของคุณอยู่ในสถานะ running พร้อมกับที่อยู่ IP ที่ถูกกำหนดในคอลัมน์ ADDR (เช่น 192.168.64.3)

เข้าถึงเว็บเซิร์ฟเวอร์ของคุณ: เปิดเว็บเบราว์เซอร์และไปยังที่อยู่ IP ที่แสดงในขั้นตอนก่อนหน้า คุณควรจะเห็นข้อความ "Hello, Apple Container!" ของคุณ

# แทนที่ IP ด้วยค่าที่ได้จาก `container ls`
open <http://192.168.64.3>

ขั้นตอนที่ 4: การโต้ตอบกับคอนเทนเนอร์

container มีเครื่องมือที่ทรงพลังสำหรับการโต้ตอบกับคอนเทนเนอร์ที่กำลังทำงานของคุณ

รันคำสั่ง: คุณสามารถรันคำสั่งโดยตรงภายในคอนเทนเนอร์ได้โดยใช้ container exec มาแสดงรายการไฟล์ในไดเรกทอรีเนื้อหาของเว็บเซิร์ฟเวอร์ของเรากัน

container exec my-web-server ls /content
# ผลลัพธ์: index.html

เปิด Interactive Shell: สำหรับการดีบักที่ซับซ้อนมากขึ้น คุณสามารถเข้าถึง interactive shell ภายในคอนเทนเนอร์ได้

container exec -it my-web-server sh

แฟล็ก -it (--interactive และ --tty) มีความสำคัญอย่างยิ่งในการเชื่อมต่อ Terminal ของคุณกับ Shell ภายในคอนเทนเนอร์ คุณจะเข้าสู่พร้อมท์ Shell ภายใน WORKDIR ของคอนเทนเนอร์ คุณสามารถสำรวจ ตรวจสอบกระบวนการต่างๆ และจากนั้นพิมพ์ exit เพื่อกลับไปยัง Terminal ของ Mac

ขั้นตอนที่ 5: การเผยแพร่อิมเมจของคุณ

การแบ่งปันผลงานของคุณทำได้ง่าย มาพุชอิมเมจของเราไปยัง container registry กัน ตัวอย่างนี้ใช้ Docker Hub แต่ registry ที่รองรับ OCI ใดๆ ก็สามารถใช้ได้ (นี่สมมติว่าคุณมีบัญชี Docker Hub ที่มีชื่อผู้ใช้ fido)

เข้าสู่ระบบ Registry:

# นี่จะแจ้งให้คุณป้อนชื่อผู้ใช้และรหัสผ่าน/โทเค็น
container registry login docker.io

ติดแท็กอิมเมจสำหรับการเผยแพร่: Registries กำหนดให้อิมเมจต้องตั้งชื่อในรูปแบบ registry/username/image:tag มาสร้างแท็กใหม่สำหรับอิมเมจของเรากัน

container images tag web-test docker.io/fido/web-test:latest

พุชอิมเมจ:

container images push docker.io/fido/web-test:latest

อิมเมจของคุณพร้อมให้ผู้อื่นดึงและรันได้แล้ว บนแพลตฟอร์มใดๆ ที่รองรับ OCI!

ขั้นตอนที่ 6: การทำความสะอาด

เมื่อคุณทำเสร็จแล้ว คุณสามารถหยุดคอนเทนเนอร์และปิดบริการได้

# หยุดคอนเทนเนอร์
container stop my-web-server

# หยุดบริการคอนเทนเนอร์ทั้งหมด
container system stop

นอกเหนือจากพื้นฐาน

บทแนะนำนี้ครอบคลุมขั้นตอนการทำงานหลัก แต่ container สามารถทำได้มากกว่านั้น นี่คือคุณสมบัติบางอย่างจากเอกสารประกอบ how-to.md:

การจัดการทรัพยากร: คุณสามารถควบคุมทรัพยากรที่จัดสรรให้กับคอนเทนเนอร์ของคุณได้ สำหรับการสร้างที่ใช้หน่วยความจำมาก คุณสามารถให้ RAM และ CPU แก่ builder ได้มากขึ้น:

container builder start --cpus 8 --memory 16g

การแชร์ไฟล์: คุณสามารถเมานต์ไดเรกทอรีจาก Mac ของคุณเข้าไปในคอนเทนเนอร์ได้โดยใช้แฟล็ก -volume ซึ่งเป็นสิ่งจำเป็นสำหรับขั้นตอนการพัฒนาที่คุณต้องการแก้ไขโค้ดบนโฮสต์และเห็นการเปลี่ยนแปลงแบบเรียลไทม์ในคอนเทนเนอร์

container run --volume ${HOME}/my-project:/app my-image

การสร้างแบบหลายแพลตฟอร์ม: คุณสามารถสร้างอิมเมจที่รันได้ทั้งบนสถาปัตยกรรม Apple Silicon (arm64) และ Intel (amd64) ได้ในคำสั่งเดียว เหมาะอย่างยิ่งสำหรับการติดตั้งในสภาพแวดล้อมเซิร์ฟเวอร์ที่หลากหลาย

container build --arch arm64 --arch amd64 --tag my-multi-arch-image .

การตรวจสอบขั้นสูง: คำสั่ง container inspect ให้ข้อมูล JSON โดยละเอียดเกี่ยวกับคอนเทนเนอร์และอิมเมจ ซึ่งมีประโยชน์สำหรับการเขียนสคริปต์และการทำงานอัตโนมัติ

บทสรุป

container ของ Apple เป็นมากกว่าแค่เครื่องมือใหม่ แต่เป็นการประกาศเจตนารมณ์ มันบ่งบอกถึงความมุ่งมั่นที่จะมอบเครื่องมือสำหรับผู้พัฒนาที่ยอดเยี่ยมและผสานรวมเข้าด้วยกัน สำหรับยุคใหม่ของการพัฒนาแบบ cloud-native ด้วยการสร้างรันไทม์คอนเทนเนอร์ที่มีน้ำหนักเบา ปลอดภัย และมีประสิทธิภาพโดยตรงในระบบปฏิบัติการ Apple กำลังลดอุปสรรคในการเข้าถึงการใช้คอนเทนเนอร์บน Mac และนำเสนอทางเลือกที่น่าสนใจแทนโซลูชันที่มีอยู่เดิม

แม้ว่าโครงการจะยังใหม่ แต่รากฐานก็แข็งแกร่ง สถาปัตยกรรมก็มั่นคง และการยึดมั่นในมาตรฐานเปิดทำให้มั่นใจได้ว่าจะเป็นผู้เล่นที่มีคุณค่าในระบบนิเวศคอนเทนเนอร์ที่กว้างขึ้น หากคุณเป็นผู้พัฒนาบน Mac ที่ใช้ Apple Silicon โครงการ container เป็นโครงการที่คุณควรจับตามองและลองใช้ในวันนี้

💡
ต้องการเครื่องมือทดสอบ API ที่ยอดเยี่ยมที่สร้าง เอกสารประกอบ API ที่สวยงาม ใช่ไหม?

ต้องการแพลตฟอร์มแบบ All-in-One ที่ผสานรวมกันสำหรับทีมผู้พัฒนาของคุณ เพื่อทำงานร่วมกันด้วย ประสิทธิภาพสูงสุด ใช่ไหม?

Apidog ตอบสนองทุกความต้องการของคุณ และ แทนที่ Postman ในราคาที่เข้าถึงได้ง่ายกว่ามาก!
ปุ่ม

ฝึกการออกแบบ API แบบ Design-first ใน Apidog

ค้นพบวิธีที่ง่ายขึ้นในการสร้างและใช้ API