Apple Melancarkan Alternatif Docker Berkuasa Swift untuk macOS


Apple memperkenalkan alternatif sumber terbuka yang dikuasakan oleh Swift kepada Docker untuk menjalankan kontena Linux di macOS, dengan fokus pada keselamatan dan pengasingan.

Apple telah dengan senyap melepaskan projek sumber terbuka baru yang berpotensi mengubah secara signifikan cara kontena dijalankan di macOS. Dinamakan secara ringkas container, ia memperkenalkan runtime kontena asli Apple yang dipacu oleh Swift, direka khusus untuk sistem macOS, terutamanya yang menggunakan Apple Silicon.

Pada dasarnya, container membolehkan pengguna menarik, membina, menjalankan, dan menolak bekas Linux yang mematuhi standard OCI. Walau bagaimanapun, berbeza dengan Docker, yang biasanya bergantung pada mesin maya berkongsi untuk semua bekas di macOS, pendekatan Apple menjalankan setiap bekas dalam mikro-VM ringan sendiri, lengkap dengan kernel Linux yang terasing dan rangkaian yang berasingan. Menurut Halaman GitHub projek tersebut:

Alat ini menggunakan dan menghasilkan imej bekas yang mematuhi OCI, jadi anda boleh menarik dan menjalankan imej dari sebarang daftar bekas standard. Anda juga boleh menolak imej yang anda bina ke daftar tersebut, dan menjalankan imej ini dalam mana-mana aplikasi yang mematuhi OCI.

Model ini mencerminkan konsep microVM yang dipopularkan oleh alat seperti Firecracker, tetapi ia telah diperkukuhkan dengan rapat ke dalam macOS melalui Virtualization.framework, antara muka hypervisor asli Apple.

Walaupun Apple tidak menjenamakan ini sebagai pengganti sepenuhnya untuk Docker, alat ini merangkumi banyak fungsi yang sama untuk kes penggunaan pembangunan tempatan. CLI adalah mesra dan mudah diakses: dengan arahan seperti container image pull alpine, atau container run -ti alpine sh.

Apa yang membezakan alat ini ialah integrasinya yang lancar ke dalam sistem operasi macOS itu sendiri. Daripada meniru persekitaran Linux dengan alat luar, penyelesaian Apple menggunakan Swift untuk sebahagian besar komponen penggunanya, termasuk satu sistem init kecil bernama vminitd yang memulakan kontena dalam beberapa milisaat.

Projek ini juga merangkumi pakej Swift, „Containerization“, yang mendedahkan API bertaraf rendah untuk mengurus imej, volum, rangkaian, dan proses boot, menawarkan asas yang kukuh kepada pengguna mahir dan pembangun alat.

Baiklah, setakat ini semuanya baik, tetapi sekarang, izinkan saya berkongsi beberapa pemikiran saya sendiri mengenai perkara ini. Sejujurnya, saya agak keliru dengan langkah Apple ini. Dan saya akan jelaskan mengapa dengan segera.

Pertama, mari kita jelaskan satu perkara—tidak ada yang dipanggil kontena asli sebenar pada mana-mana sistem operasi selain Linux, dan ada sebab mudah untuk itu. Docker bergantung pada ciri kernel khusus Linux seperti cgroups, namespace, dan sistem fail overlay, yang tidak dapat disediakan oleh kernel macOS.

Atas sebab itu, projek Apple baru menggunakan VM Linux ringan yang berasingan untuk menjalankan setiap kontena. Pada masa yang sama, pendekatan Docker adalah untuk menjalankan semuanya di dalam satu mesin maya (dibina dengan LinuxKit) yang menempatkan Docker Engine dan semua kontena.

Jadi, dalam kes Apple, setiap bekas berada dalam VM yang berasingan, yang bermaksud terdapat banyak VM (tanpa mengira betapa ringannya mereka), yang nampaknya bukan pendekatan yang paling cekap.

Sebaliknya, VM yang berasingan memang mempunyai beberapa kelebihan. Sebagai contoh, satu kelebihan utama projek baru Apple ialah ia memberikan setiap kontena kernel Linux sendiri yang khusus, berbeza dengan Docker, yang berkongsi satu kernel untuk semua kontena (anda tidak boleh mencampur versi kernel mengikut kontena).

Selain itu, ia juga menggunakan rangkaian asli macOS, manakala Docker biasanya bergantung kepada mesin maya dengan NAT atau rangkaian berangkaian jambatan. Untuk membantu menjelaskan perkara ini, saya telah menyediakan jadual perbandingan ringkas:

CiriDocker DesktopBekas Epal
Model VMVM dikongsi untuk semua kontenaMikro‑VM per kontena
TerasSatu kernel Linux untuk semuaKernel Linux khusus untuk setiap bekas
AsasMenggunakan Enjin Docker dan hipervisor (contohnya qemu atau HyperKit)Menggunakan Virtualization.framework milik Apple sendiri
RangkaianNAT atau jambatan melalui VMTumpukan rangkaian asli macOS (dengan had dalam versi awal)
Masa Berjalanrunc/containerdvminitd, sistem init Swift tersuai
IntegrasiFokus pada pelbagai platform dan kontenaSangat asli macOS dan berfokus pada Swift

Walaupun terdapat pelbagai perbezaan, idea utama adalah sama dalam kedua-dua kes—membangun, menjalankan, dan bekerja dengan imej kontena yang mematuhi OCI. Dari perspektif itu, Docker masih menawarkan lebih fleksibiliti dan keupayaan berbanding projek baharu Apple.

Sebagai contoh, belum ada setara docker-compose, dan ekosistem alat (contohnya, tiada papan pemuka GUI, penyusunan terhad) masih perlu dibangunkan dan diperbaiki.

Jadi, saya tertanya-tanya mengapa Apple menghabiskan begitu banyak usaha untuk mencipta ini. Selain daripada "Dibuat oleh Apple", mereka nampaknya ingin mendapatkan bahagian mereka daripada pasaran khusus yang besar ini, yang hampir sepenuhnya dikuasai oleh Docker, dengan menawarkan integrasi macOS yang lebih baik, menggunakan API asli sistem dan bukannya daemon pihak ketiga, dan akhirnya, pemisahan keselamatan yang lebih baik, yang mengurangkan permukaan serangan.

Oleh kerana projek ini masih di peringkat awal, ia akan menarik untuk melihat bagaimana ia berkembang—dan sama ada ia dapat memenuhi jangkaan Apple dengan akhirnya menggantikan Docker atau Podman sebagai alat kontena utama untuk pembangun di macOS.