Apple, macOS için Swift Destekli Bir Docker Alternatifi Tanıttı
Apple, macOS üzerinde Linux konteynerlerini çalıştırmak için güvenlik ve izolasyona odaklanan Swift tabanlı, açık kaynaklı bir Docker alternatifi tanıttı.
Apple, macOS üzerinde konteynerlerin çalıştırılma şeklini önemli ölçüde değiştirebilecek yeni bir açık kaynak projesini sessiz sedasız yayınladı. Basitçe container olarak adlandırılan bu proje, özellikle Apple Silicon kullanan macOS sistemleri için tasarlanmış, Swift destekli, Apple'a özgü bir konteyner çalışma zamanı sunuyor.
Temel olarak, container kullanıcıların standart OCI uyumlu Linux konteynerlerini çekmesine, oluşturmasına, çalıştırmasına ve göndermesine olanak tanır. Ancak, genellikle macOS üzerinde tüm konteynerler için paylaşılan bir sanal makineye dayanan Docker’ın aksine, Apple’ın yaklaşımı her konteyneri kendi hafif mikro VM’sinde çalıştırır ve bu VM izole bir Linux çekirdeği ve ağ yığını ile gelir. Projenin GitHub sayfasına göre:
Araç, OCI uyumlu konteyner görüntülerini tüketir ve üretir, böylece herhangi bir standart konteyner kayıt deposundan görüntü çekip çalıştırabilirsiniz. Ayrıca, oluşturduğunuz görüntüleri bu kayıt depolarına yükleyebilir ve görüntüleri diğer herhangi bir OCI uyumlu uygulamada çalıştırabilirsiniz.
Bu model, Firecracker gibi araçlarla popüler hale gelen microVM konseptini yansıtıyor, ancak macOS'a Apple'ın yerel hipervizör arayüzü olan Virtualization.framework aracılığıyla sıkı bir şekilde entegre edilmiştir.
Apple bunu Docker'ın tam teşekküllü bir alternatifi olarak tanıtmıyor olmasına rağmen, araç yerel geliştirme kullanım senaryolarının çoğunu kapsıyor. CLI tanıdık ve erişilebilir: container image pull alpine veya container run -ti alpine sh gibi komutlarla.
Bu aracı farklı kılan şey, macOS işletim sistemine sorunsuz bir şekilde entegre olmasıdır. Harici araçlarla bir Linux ortamını taklit etmek yerine, Apple’ın çözümü, kullanıcı alanının çoğunda Swift kullanır; buna, konteynerleri milisaniyeler içinde başlatan küçük bir init sistemi olan vminitd de dahildir.
Proje ayrıca, görüntüleri, hacimleri, ağ bağlantılarını ve başlatma süreçlerini yönetmek için düşük seviyeli API’ler sunan ve ileri düzey kullanıcılar ile araç geliştiricilere güçlü bir temel sağlayan “Containerization” adlı bir Swift paketi de içeriyor.
Tamam, şimdiye kadar her şey yolunda, ama şimdi konuyla ilgili kendi birkaç düşüncemi paylaşmama izin verin. Açıkçası, Apple’ın bu hamlesi beni biraz şaşırttı. Ve nedenini hemen açıklayacağım.
Öncelikle bir şeyi netleştirelim—Linux dışındaki herhangi bir işletim sisteminde gerçek anlamda yerel konteynerleştirme diye bir şey yoktur ve bunun basit bir nedeni vardır. Docker, macOS çekirdeğinin sağlayamayacağı cgroups, namespace’ler ve overlay dosya sistemleri gibi Linux’a özgü çekirdek özelliklerine dayanır.
Bu nedenle, yeni Apple projesi her bir konteyneri çalıştırmak için ayrı, hafif bir Linux VM kullanıyor. Aynı zamanda, Docker’ın yaklaşımı her şeyi Docker Engine ve tüm konteynerleri barındıran tek bir sanal makine (LinuxKit ile inşa edilmiş) içinde çalıştırmaktır.
Yani, Apple örneğinde her konteyner kendi ayrı sanal makinesinde bulunuyor, bu da çok sayıda sanal makine anlamına geliyor (ne kadar hafif olurlarsa olsunlar), bu da en verimli yaklaşım gibi görünmüyor.
Öte yandan, ayrı sanal makinelerin bazı faydaları da vardır. Örneğin, Apple’ın yeni projesinin en önemli avantajlarından biri, her konteynere kendine ait özel bir Linux çekirdeği sağlamasıdır; Docker’ın aksine, Docker tüm konteynerlerde tek bir çekirdek paylaşır (her konteyner için farklı çekirdek sürümleri kullanamazsınız).
Ayrıca, Docker genellikle NAT veya köprülenmiş ağ ile bir sanal makineye dayanırken, aynı zamanda yerel macOS ağ yığınını da kullanır. Bunu daha net hale getirmek için hızlı bir karşılaştırma tablosu hazırladım:
| Özellik | Docker Masaüstü | Elma Kabı |
|---|---|---|
| VM modeli | Tüm konteynerler için paylaşılan VM | Mikro VM her konteyner için |
| Çekirdek | Herkes için tek Linux çekirdeği | Her konteyner için ayrılmış Linux çekirdeği |
| Taban | Docker Engine ve hipervizör (ör. qemu veya HyperKit) kullanır | Apple’ın kendi Virtualization.framework’ünü kullanır |
| Ağ Kurma | VM üzerinden NAT veya köprü | Yerel macOS ağ yığını (erken sürümlerde bazı sınırlamalarla) |
| Çalışma Zamanı | runc/containerd | vminitd, özel bir Swift başlatma sistemi |
| Entegrasyon | Çok platformlu ve konteyner odaklı | Derinlemesine macOS'e özgü ve Swift odaklı |
Tüm farklılıklara rağmen, temel fikir her iki durumda da aynıdır—OCI uyumlu konteyner görüntüleri oluşturmak, çalıştırmak ve bunlarla çalışmak. Bu açıdan bakıldığında, Docker hâlâ Apple'ın yeni projesine göre çok daha fazla esneklik ve yetenek sunmaktadır.
Örneğin, henüz bir docker-compose eşdeğeri yok ve araç ekosistemi (ör. GUI panosu yok, sınırlı orkestrasyon) hâlâ geliştirilmesi ve iyileştirilmesi gerekiyor.
Yani, Apple'ın bunu yaratmak için neden bu kadar uğraş verdiğini merak ediyorum. Apple Tarafından Yapıldı dışında, neredeyse tamamen Docker tarafından domine edilen bu devasa nişten pay almak istiyor gibi görünüyorlar; daha iyi macOS entegrasyonu sunarak, üçüncü taraf servisler yerine sistemin kendi API’lerini kullanarak ve nihayetinde saldırı yüzeyini azaltan daha iyi güvenlik izolasyonu sağlayarak.
Proje henüz erken aşamalarında olduğundan, nasıl gelişeceğini görmek ilginç olacak—ve nihayetinde Docker veya Podman’ın yerini alarak macOS'taki geliştiriciler için tercih edilen konteyner aracı olup olamayacağı Apple’ın beklentilerini karşılayıp karşılamayacağını görmek de merak konusu.
