1 puan yazan GN⁺ 4 시간 전 | 1 yorum | WhatsApp'ta paylaş
  • 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, container CLI’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 cp komutu gerekmez

Compose içe aktarma ve Dockerfile build etme

  • Davit, docker-compose.yml dosyası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, /tmp altı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 container CLI 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 container CLI’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/hello pull edin
    • İmajdan çalıştırın veya Containers → Run Container seçeneğini kullanın
    • Host 8088 portunu container 80 portuna eşleyin
    • Container’daki Ports satırında Open in Browser seçeneğine tıklayın ya da localhost:8088 adresine 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 docker CLI/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
    • web container’ı Mac’ten web.test olarak yanıt verir
  • 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 .local mDNS 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

 
GN⁺ 4 시간 전
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

    • Bu tam olarak coderunner ile mümkün
      https://GitHub.com/instavm/coderunner
    • Sanal makine yerine sandbox ve ayrı kullanıcılar kullanan bir yaklaşım ama sandvault bu iş için iyi ve otomatik kurulum da yapıyor
      Şeffaflık adına söyleyeyim, buna birkaç PR göndermiştim
      https://github.com/webcoyote/sandvault
    • “Yapay zeka çağında power move: hiçbir şey yapmamak” aslında yapay zekadan önce de benim stratejimdi
      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
    • Buna benzer bir şeyi basit bir tarayıcı frontend'i ile kabaca yaptım
      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
    • Ben de bunu düşündü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

    • Bu projelerin hepsinin eşit derecede üst düzey kalitede olduğunu söyleyebilir miyiz? Bundan gerçekten emin değilim
      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
    • iOS'ta durum farklı. App Store'a koymak için ya yıllık üyelik ücreti ödemeniz gerekiyor ya da kişisel hesap build'lerini yaklaşık her 30 günde bir yeniden build edip yeniden kurmanız gerekiyor
  • 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

    • Web sitesindeki AI-Maxing ifadesi biraz kendini belli etti. Bu, harika bir uygulama olmadığı anlamına gelmiyor tabii
    • İyi öneri. Yakında ekleyeceğim
    • Burada biraz daha gerçekçi örnekler içeren bir eğitim büyük fayda sağlar gibi görünüyor
      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

    • Oo merhaba. Az önce Orchard ile karşılaştırmadan bahseden şeyi gördüm, o bendim
      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

    • macOS yerel container’ları, her container için ayrı bir Linux sanal makinesi başlatıyor gibi görünüyor
      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
    • OrbStack ekibinin yakında macOS yerel container desteği verip bunun üstüne kendi yönetim özelliklerini ekleyeceğini düşünüyorum
  • 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

    • Ben de tam bilmiyorum. Bunu Docker Desktop yerine kullanıp Mac’imde docker container’larını “yerel” olarak çalıştırabiliyor muyum? Yoksa docker’dan tamamen ayrı bir şey mi?
    • Bu daha çok build odaklı ve Apple containerization container’larının içinde buildkitd veya dockerd çalıştırma yaklaşımını kullanıyor
      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