- Davit, Apple silicon Mac’lerde Apple’ın container platformuyla Linux container’larını çalıştırıp yönetmek için geliştirilmiş yerel bir macOS uygulamasıdır ve Docker Desktop olmadan kullanılabilir
- Apple’ın açık kaynaklı container daemon’ıyla XPC üzerinden doğrudan iletişim kurar, CLI ile aynı yolu kullanır ve Electron, webview ya da kendi arka plan ajanını içermez
- Container başlatma-durdurma, log akışı, terminal erişimi, dosya gezgini, Dockerfile build etme ve Compose içe aktarma gibi işlemleri tek bir uygulamada sunar
- Ücretsiz, açık kaynaklı ve MIT lisanslı bir uygulama olarak sunulur; Apple Developer ID ile imzalanmış ve notarize edilmiştir, ayrıca macOS 15+ yüklü bir Apple silicon Mac gerektirir
- Docker Desktop’tan farklı olarak container başına hafif VM kullanır; çalışan container olmadığında platform arka plan servisleri yaklaşık 25MB seviyesinde boşta kalır
Davit’in amacı ve çalışma ortamı
- Davit, Apple’ın container platformu için tamamen yerel bir macOS uygulamasıdır
- Apple silicon üzerinde Linux container’larını çalıştırır ve Docker Desktop gerektirmez
- Ücretsiz ve açık kaynaklıdır, MIT lisansı ile sunulur
- Uygulama Apple Developer ID ile imzalanmış ve notarize edilmiştir
- Gereksinim, macOS 15 veya üzeri çalıştıran bir Apple silicon Mac’tir
- Kurulum, sürümler sayfasından indirerek veya Homebrew ile yapılabilir
brew install wouterdebie/tap/davit
Apple container daemon’ı ile doğrudan iletişim
- Davit, Apple’ın açık kaynaklı container daemon’ıyla XPC üzerinden doğrudan iletişim kurar
- Bu yol,
containerCLI’nin kullandığı iletişim yoluyla aynıdır - Electron, webview veya kendi arka plan ajanını kullanmaz
Container yönetim özellikleri
- Gösterge paneli, çalışan tüm container’ların servislerini, disk kullanımını ve gerçek zamanlı CPU verilerini gösterir
- Container listesinde her satırdan durumu görebilir ve doğrudan işlem yapabilirsiniz
- Başlat, durdur, yeniden başlat, sil
- Gerçek zamanlı CPU
- Bellek
- IP
- Container bazlı ekran, çalışma durumunu anlamaya yardımcı olan işlevler de sunar
- follow ve boot modları bulunan akış logları
- Gerçek zamanlı durum grafikleri
- Ham yapılandırmayı görüntüleme
- Çalışan container’larda yerel API ile doğrudan terminal açılabilir
- Terminal veya iTerm içinde etkileşimli shell açılabilir
- CLI gerekmez
Değiştirilemez container düzenleme ve dosya erişimi
- Container’lar değiştirilemez olduğu için Davit, mevcut yapılandırmaya göre önceden doldurulmuş yeni bir container oluşturarak yeniden yaratmayı mümkün kılar
- Yeni container yapılandırması, imajın entrypoint ve env değerleri hariç mevcut ayarları yansıtır
- Portlar, ortam değişkenleri, mount’lar ve kaynakları hızlıca değiştirmeye uygun bir akış sunar
- Uygulama içinden çalışan bir container’ın dosya sistemi gezilebilir
- Klasörler arasında gezinme
- Dosyaları Mac’e indirme
- Dosya yükleme
- Dosya silme
- Dosya işlemleri yerel API ile yapılır;
docker cpkomutu gerekmez
Compose içe aktarma ve Dockerfile build etme
- Davit,
docker-compose.ymldosyasını açarak oluşturulacak kaynakları önce gösterir- Bağımlılık sırasındaki servisler
- Volume’lar
- Ağlar
- Servis başına eşdeğer CLI komutu
- Desteklenmeyen öğeler için uyarılar
- Apple platformunda yerel compose olmadığı için Davit stack’i doğrudan orkestre eder
- Compose içe aktarma, desteklenen bir alt kümeyi hedefler
- Desteklenenler: image, ports, environment, named/bind volumes, networks, resource limits, command, user, working_dir
- Uyarı verilen örnekler:
restart:,healthcheck:,build:
- Dockerfile build işlemi Images → Build Image üzerinden yapılabilir
- Context klasörü ve Dockerfile seçilir
- Tag ve build args ayarlanır
- Davit, Apple’ın BuildKit tabanlı builder’ını doğrudan çalıştırır ve gerekirse başlatır
- Şu anda platformun bazı sınırlamaları da vardır
- 16KiB’ı aşan Dockerfile’lar reddedilir
- Bu durum upstream apple/container bug ile ilişkilidir
- Build context,
/tmpaltında bulunamaz
İmajlar, volume’lar, ağlar ve registry
- Davit, imajlarla ilgili işlemleri destekler
- İlerlemeyi görerek pull etme
- İmajdan container çalıştırma
- Tag verme
- Prune
- Volume ve ağ işlemleri de sunar
- Boyutu belirlenmiş volume oluşturma
- Özel subnet oluşturma
- Silmeden önce kullanımda olan öğeleri kontrol etme
- Registry girişi Settings → Registries altında yapılır
- Docker Hub
- ghcr.io
- quay.io
- Herhangi bir OCI registry
- Kimlik bilgileri kaydedilmeden önce registry üzerinde doğrulanır
- Doğrulanan kimlik bilgileri macOS giriş anahtar zincirinde saklanır ve
containerCLI ile paylaşılır - Docker Hub, parola yerine erişim token’ı kullanılmasını gerektirir
Platform ayarları ve otomatik kurulum
- Davit, platform ayarlarını uygulama içinden düzenlemeye izin verir
- Yeni container için varsayılan CPU/bellek
- Registry’ler
- DNS
- Builder kaynakları
- Ayarlar, platformun kendi yapılandırma yükleyicisiyle doğrulanır ve temiz bir TOML override olarak kaydedilir
- Apple container platformu kurulu değilse Davit, Apple’ın imzalı yükleyicisini indirip doğrulayarak kullanıcının Library dizinine kurar
- Kurulum süreci yönetici yetkisi gerektirmez
- Gerekirse
containerCLI’yi shell’e de ekleyebilir
Uygulamanın uygulanışı ve kullanıma başlama akışı
- Davit tamamen SwiftUI ile geliştirilmiştir
- Menü çubuğunda hızlı eylemler sunar
- Dock simgesi yalnızca kullanıcı isterse gösterilebilir
- Gerçek zamanlı grafik çizimi için tarayıcı açmaz
- Örnek başlangıç akışı şöyledir
- Releases sayfasından kurun veya Homebrew ile yükleyin
- İlk çalıştırmada platform yoksa Davit onu kurar
- Images → Pull Image altında
nginxdemos/hellopull edin - İmajdan çalıştırın veya Containers → Run Container seçeneğini kullanın
- Host
8088portunu container80portuna eşleyin - Container’daki Ports satırında Open in Browser seçeneğine tıklayın ya da
localhost:8088adresine gidin - Çalışan container’da CPU, bellek, disk, log, dosyalar, terminal ve Edit & Recreate özelliklerini keşfedin
Docker Desktop ve OrbStack’ten farkları
- Davit, Apple’ın motorunu kullanır
- Her container, Apple Virtualization framework tabanlı kendi hafif VM’i içinde çalışır
- Container başına IP adresi vardır
- Apple silicon için optimize edilmiştir
- OCI imajları kullanır
- Docker Hub, ghcr.io, quay.io veya herhangi bir registry’den pull edilebilir
- Özel imajlar da registry girişi ile kullanılabilir
- Apple’ın istemci kütüphanelerine bağlanır ve XPC ile doğrudan iletişim kurar
- Soket shim yoktur
- Lisans sözleşmesi yoktur
- Hesap gerekmez
- Uygulama paketi 17MB boyutundadır
- Electron yoktur
- Paket içinde VM imajı yoktur
- Kendi arka plan servisi yoktur
- OrbStack ile hedefi farklıdır
- OrbStack, kendi Docker uyumlu sanallaştırma katmanına sahip ticari bir uygulamadır
- Davit, Apple container platformu üzerinde çalışan ücretsiz ve açık kaynaklı bir arayüzdür
- Davit, container olmadığında kalıcı bir süreç çalıştırmaz; container başına IP ve köprü ağları kullanır, ayrıca container’lar arası izolasyon daha güçlüdür
- OrbStack, drop-in
dockerCLI/API uyumluluğu ve daha geniş araç desteğinde daha iyidir - Her ikisi de standart OCI imajlarını çalıştırır
Bellek, DNS ve güvenlik
- Bellek yapısı, sürekli açık kalan çoklu GiB boyutunda bir Linux VM tutmayan bir yaklaşım izler
- Docker Desktop, container çalışsın ya da çalışmasın büyük tek bir VM’i sürekli açık tutarken Apple platformu container başına hafif VM başlatır ve container durunca bunu kapatır
- Çalışan container olmadığında platform arka plan servisleri yaklaşık 25MB ile boşta kalır
- Davit’in kendisi Electron yerine yerel bir SwiftUI uygulamasıdır; bellek kullanımının büyük kısmı paylaşılan macOS framework belleğidir
- Mac üzerinden container adına erişmek için platformun yerel DNS domain’i kullanılabilir
- Bir kez
sudo container system dns create testçalıştırın veya kendi domain’inizi kullanın - Settings → Platform → DNS altında varsayılan domain olarak ayarlayın
webcontainer’ı Mac’tenweb.testolarak yanıt verir
- Bir kez
- Tüm container’ların kendi IP’si vardır ve IP bilgisi Network bölümünde gösterilir
- Misafir sistem içinde Avahi çalıştırılırsa
.localmDNS takma adları yayınlanabilir - Her sürüm Apple Developer ID ile imzalanır ve notarize edilir; bu sayede Gatekeeper uyarısı olmadan açılır
- Uygulama açık kaynaklıdır ve MIT lisansı ile sunulur; doğrudan inceleyebilir veya derleyebilirsiniz
- Davit yalnızca yerel container daemon’ı ve GitHub güncelleme kontrolleri ile iletişim kurar
1 yorum
Hacker News yorumları
Yapay zeka çağında kullandığım en iyi strateji hiçbir şey yapmamak
Benzer bir fikir düşünüp vibe coding ile yapabileceğimi düşündüm, ama birinin daha fazla ilgi gösterip benden önce yapacağını tahmin ettim ve gerçekten de öyle oldu
Uygulama iyi görünüyor, denemeyi merakla bekliyorum
Bedava fikir olarak, ajanları bir sanal makinenin içine kapatıp, sanal makinenin dışından bir harness ile talimat göndererek içeride kurulu ajanları kontrol etmek isterim. İdeal olarak host üzerinde Codex/Claude gibi bir şey kurulu olmamalı
Daha da iyi bir yön, sanal makine içinde birden fazla kullanıcı hesabı oluşturup kullanıcı bazında dosya sistemi ve ağ politikalarını kısıtlamak olurdu. Böylece geliştirme ajanı, QA ajanı vb. her biri farklı bir çalışma görünümüne sahip olur ve bu da ek otomasyon için güçlü bir temel katman haline gelir
Elbette DB, kuyruk, harici volume gibi çeşitli kaynakları sanal makineye “bağlayıp” ajanların bunları izinlere göre kullanabilmesi gerekir
https://GitHub.com/instavm/coderunner
Şeffaflık adına söyleyeyim, buna birkaç PR göndermiştim
https://github.com/webcoyote/sandvault
20'lerimin sonu ya da 30'larımın başından beri boş zamanlarımda geliştirme yapmayı neredeyse tamamen bıraktım, çünkü kod yazmanın kendisinden aldığım keyif tamamen yok oldu. Aslında baştan beri de o kadar sevdiğim bir şey değildi; sadece buna zaman harcamaya değip değmeyeceğini gerçekten kötü değerlendiriyordum
Keşke elimde olsa dediğim programlar ya da script'ler aklıma gelse de, haftada birkaç dakikalık tasarruf için program yazma geri dönüşünü hesaplayan xkcd tablosunda olduğu gibi çoğu zaman “harcanan emeğe değmiyordu”. Ya da çok gerekli olmasa da olsa ilginç ya da eğlenceli olurdu, ama gerçekten yapmak tonla zaman gerektirdiği için hiç değmezdi
Biri benim istediğim şeyi yapıp yayımlarsa ne âlâ, yapmazsa da yapacak bir şey yok diye bakıyordum
LLM'lerin getirdiği büyük değişim şu oldu: artık küçük script'leri birkaç dakika içinde, birkaç sentten birkaç dolara mal ederek çıkarabiliyorsunuz. Uzun süredir bekleyen aşırı niş fikirlerimi yeniden gündeme alıyorum
Eskiden sadece yabancı API'ler ve dokümantasyon arasında gezinmek için birkaç hafta sonu harcamam gereken şeyler artık 30 dakika içinde yapılabiliyor; ya da en azından bunun imkânsız mı, fazla zahmetli mi, dolayısıyla sonsuza kadar rafa kaldırılması gereken bir iş mi olduğunu saatler yerine dakikalar içinde anlayabiliyorum
Orta ve büyük açık modelleri çalıştırmayı seviyorum ama o modellerin kontrolden çıkmayacağına güvenemediğim için yaptım; yakında paylaşacağım
Claude'u sanal makineye kurup SSH terminaliyle bağlanmak kadar basit olabilir diye düşünüyorum. GUI gerekiyorsa VSCode'un Remote SSH eklentisiyle dosya gezgini gibi bir UI da elde edilebilir
Muhtemelen VSCode'un Claude ya da başka sohbet eklentileri de sanal makinenin içine kurulabilir
Bu projenin kendisinden daha dikkat çekici olan şey, özellikle son 1 yılda birçok kişinin öngörebildiği bir olgunun gözle görülür biçimde hızlanmış olması. Artık insanlar aynı fikrin kendi versiyonunu eskisinden çok daha hızlı yapabiliyor
Yaklaşık 10 dakika bakınca benzer Swift projelerinden birkaç tane buldum ve çoğu sadece birkaç haftalık ya da aylıktı
https://github.com/tdeverx/contained-app
https://github.com/nico81/iContainer
https://github.com/wouterdebie/davit
https://github.com/Augani/dory
https://github.com/tofa84/berth
https://github.com/erdaltoprak/ContainerUtility
https://github.com/andrew-waters/orchard
GitHub yıldızı daha az olanları, sadece komut satırı olanları ve Swift dışındaki örnekleri de ekleyince daha fazlası vardı ama anlatmak istediğim şu
İnsanlar giderek istedikleri yazılımın kendi versiyonunu kendileri yapabilecek. Bu olduğunda başkalarının yaptığı yazılımın değeri azalacak. Aşırı kişiselleştirilmiş yazılım çağı geliyor
Eskiden bir web sitesinin cilasına ya da birkaç yüzeysel unsura bakarak buna ne kadar emek verildiğini tahmin edebilirdiniz. Artık bunlar LLM'lerle kolayca hallediliyor
Benzer şekilde, toz duman dağıldıktan sonra Kickstarter'ın bıraktığı en büyük etkilerden biri, 3 dakikalık pitch videolarının agresif biçimde evrilip parlatılması oldu
Bunun gerçekten derinlemesine düşünülmüş bir uygulamaya, yol haritasına ve gerçek bir ivmeye dönüşüp dönüşmediğinden emin değilim
Gerçekten sağlam bir uygulama gibi görünüyor. 17MB olması ve ContainerAPIClient kütüphanesini doğrudan kullanması hoşuma gitti
3 günde 28 commit, 5.015 satır Swift ve tüm commit’lerde “Co-Authored-By: Claude Fable 5” var
İmzalanmış ve notarize edilmiş olması da güzel. Kurunca ilk çalıştırmada gerekli container platform bileşenlerini indirdi
Bir öneri olarak, siteye bir başlangıç eğitimi ekleyip denemek için bir imaj önerseniz, bu imajın nasıl çalıştırılacağını ve neler yapılabileceğini ekran görüntüleri ya da sessiz bir videoyla gösterseniz iyi olur
İmaj oluşturma iletişim kutusu “nginx:latest” öneriyor ama başlangıç demosu için pek iyi değil
nginx:latest tesisatın çalıştığını gösteriyor ama Apple Containers’ın Docker Desktop ya da OrbStack’ten nerede farklı hissettirdiğini pek göstermiyor
Küçük bir uygulamaya volume, port mapping ve basit bir yeniden derleme döngüsü eklenen bir örnek olsaydı, değeri çok daha kolay anlaşılırdı
Ha! Galiba biz de aynı şeyi yapmışız: https://container-ui.fly.dev/
Şimdi düşünüyorum da o kadar token harcamasaydık keşke
Temiz görünüyor. Sonuçta hepimiz aynı şeyi yapıyoruz ><
OrbStack’i neredeyse 2 yıldır severek kullanıyorum
Entegrasyonu iyi, hızlı ve docker komutlarıyla uyumlu, bu yüzden benim için parasını hak ediyor
Yine de buna da bir şans vereceğim
OrbStack’in gücü, tüm container’ların tek bir Linux sanal makinesi içinde çalışması ve sanal makine sınırının iki tarafında da birçok optimizasyon yapması. Buna macOS tarafında çok yer kazandıran sparse image dosyalarının kullanımı da dahil
macOS’te 4-5’ten fazla container çalıştırmaya başlayınca, OrbStack’in performans ve kaynak kullanımı tasarrufu hızla belirginleşiyor
Gerçekten çok iyi. Runtime’ı indirip nginx:latest çalıştırmak kusursuz şekilde işledi
GitHub’da aşağı kaydırınca Claude’un katkıda bulunanlar arasında görünmesi, uygulamanın iyi olacağına dair bir işaret haline geliyor gibi. Yani yerel hissettirmesi ve Electron olmaması açısından
Apple’ın Apple Containers’a docker API uyumluluğu eklemesi güzel olurdu
Port forwarding ya da host volume gibi şeyler yok. Aslında odak, Mac’te buildkit çalıştırmak
Ama docker CLI ve buildx ile tamamen entegre
https://github.com/cpuguy83/crucible
Özellikleri de iyi, küçük bir yerel SwiftUI uygulaması olması da hoşuma gitti
Kısa süre önce Apple container’larını ajan tabanlı kodlama için kullanma hakkında bir yazı [1] yazdım ve az önce Davit’ten bahsedecek şekilde güncelledim. Kişisel projeler için evdeki iki Mac’imde Docker yerine Apple container’larını kullanmayı çok daha fazla tercih ediyorum
[1] https://open.substack.com/pub/marklwatson/p/running-opencode...
OrbStack ile karşılaştırınca nasıl? Apple Containers, geliştirici deneyiminde hissedilir bir fark sunuyor mu? Benim kullanımımda OrbStack zaten şimşek gibi hızlı geliyor
Birkaç gün önce yaptığım benzer bir sürümü paylaşmıştım ama neredeyse hiç ilgi görmedi
İlgilenenler için söyleyeyim, menü çubuğu uygulaması olarak container, machine, registry desteği var
https://news.ycombinator.com/item?id=48789503
https://github.com/erdaltoprak/ContainerUtility