1 điểm bởi GN⁺ 4 giờ trước | 1 bình luận | Chia sẻ qua WhatsApp
  • Davit là ứng dụng macOS native để chạy và quản lý container Linux trên máy Mac Apple silicon bằng nền tảng container của Apple, có thể dùng mà không cần Docker Desktop
  • Ứng dụng giao tiếp trực tiếp với daemon container mã nguồn mở của Apple qua XPC, đi theo cùng đường dẫn như CLI, không dùng Electron, webview hay tác nhân nền tự xây dựng
  • Mọi tác vụ từ khởi động/dừng container, stream log, truy cập terminal, duyệt file, build Dockerfile đến import Compose đều được xử lý trong một ứng dụng
  • Ứng dụng được cung cấp miễn phí dưới giấy phép mã nguồn mở MIT, đã được ký Apple Developer ID và công chứng, đồng thời yêu cầu macOS 15 trở lên trên máy Mac Apple silicon
  • Khác với Docker Desktop, nền tảng này dùng VM nhẹ cho từng container; khi không có container nào đang chạy, dịch vụ nền của nền tảng ở trạng thái nhàn rỗi chỉ khoảng 25MB

Mục đích của Davit và môi trường chạy

  • Davit là ứng dụng macOS hoàn toàn native dành cho nền tảng container của Apple
  • Chạy container Linux trên Apple silicon và không cần Docker Desktop
  • Miễn phí, mã nguồn mở và được phát hành dưới giấy phép MIT
  • Ứng dụng được ký bằng Apple Developer ID và đã được công chứng
  • Yêu cầu là máy Mac Apple silicon chạy macOS 15 trở lên
  • Có thể cài đặt từ bản phát hành hoặc qua Homebrew
    • brew install wouterdebie/tap/davit

Giao tiếp trực tiếp với daemon container của Apple

  • Davit giao tiếp trực tiếp với daemon container mã nguồn mở của Apple qua XPC
  • Đây là cùng tuyến giao tiếp mà CLI container sử dụng
  • Không dùng Electron, webview hay tác nhân nền tự xây dựng

Tính năng quản lý container

  • Dashboard hiển thị dịch vụ của toàn bộ container đang chạy, mức dùng đĩa và CPU theo thời gian thực
  • Trong danh sách container, có thể xem trạng thái và thao tác trực tiếp trên từng hàng
    • khởi động, dừng, khởi động lại, xóa
    • CPU thời gian thực
    • bộ nhớ
    • IP
  • Màn hình theo từng container cũng cung cấp các tính năng để nắm tình trạng chạy
    • log streaming với chế độ follow và boot
    • biểu đồ trạng thái thời gian thực
    • xem cấu hình thô
  • Với container đang chạy, có thể mở terminal trực tiếp bằng API native
    • Có thể mở shell tương tác trong Terminal hoặc iTerm
    • Không cần CLI

Chỉnh sửa container bất biến và truy cập file

  • Vì container là bất biến, Davit cho phép tạo lại container mới với cấu hình được điền sẵn dựa trên cấu hình hiện có
  • Cấu hình container mới phản ánh cấu hình cũ ngoại trừ entrypoint và env của image
  • Luồng này được tối ưu cho việc thay đổi nhanh cổng, biến môi trường, mount và tài nguyên
  • Có thể duyệt filesystem của container đang chạy ngay trong ứng dụng
    • di chuyển giữa các thư mục
    • tải file về Mac
    • tải file lên
    • xóa file
  • Các thao tác file được xử lý bằng API native, không cần lệnh docker cp

Import Compose và build Dockerfile

  • Davit có thể mở docker-compose.yml và hiển thị trước các tài nguyên sẽ được tạo
    • các service theo thứ tự phụ thuộc
    • volume
    • network
    • lệnh CLI tương ứng cho từng service
    • cảnh báo về các mục chưa được hỗ trợ
  • Vì nền tảng Apple không có compose native, Davit tự điều phối stack
  • Tính năng import Compose nhắm tới một tập con được hỗ trợ
    • Hỗ trợ: image, ports, environment, named/bind volumes, networks, resource limits, command, user, working_dir
    • Ví dụ các mục sẽ bị cảnh báo: restart:, healthcheck:, build:
  • Có thể build Dockerfile tại Images → Build Image
    • chọn thư mục context và Dockerfile
    • đặt tag và build args
    • Davit trực tiếp khởi chạy builder dựa trên BuildKit của Apple và sẽ khởi động nếu cần
  • Hiện vẫn có một số giới hạn của nền tảng
    • Dockerfile lớn hơn 16KiB sẽ bị từ chối
    • Điều này liên quan tới lỗi upstream apple/container bug
    • Build context không được đặt dưới /tmp

Image, volume, network và registry

  • Davit hỗ trợ các thao tác liên quan đến image
    • pull có hiển thị tiến trình
    • chạy container từ image
    • gắn tag
    • prune
  • Cũng cung cấp thao tác với volume và network
    • tạo volume với kích thước chỉ định
    • tạo subnet tùy chỉnh
    • kiểm tra mục đang được sử dụng trước khi xóa
  • Đăng nhập registry được xử lý tại Settings → Registries
    • Docker Hub
    • ghcr.io
    • quay.io
    • bất kỳ OCI registry nào
  • Thông tin xác thực được kiểm tra với registry trước khi lưu
  • Thông tin xác thực đã xác minh được lưu trong login keychain của macOS và được chia sẻ với CLI container
  • Docker Hub yêu cầu dùng access token thay vì mật khẩu

Cấu hình nền tảng và cài đặt tự động

  • Davit cho phép chỉnh sửa cấu hình nền tảng ngay trong ứng dụng
    • CPU/bộ nhớ mặc định cho container mới
    • registry
    • DNS
    • tài nguyên builder
  • Cấu hình được trình nạp cấu hình của chính nền tảng xác thực và lưu dưới dạng TOML override sạch
  • Nếu nền tảng Apple container chưa được cài đặt, Davit sẽ tải về và xác minh bộ cài đã ký của Apple rồi cài vào Library của người dùng
  • Quá trình cài đặt không cần quyền quản trị
  • Nếu muốn, cũng có thể thêm CLI container vào shell

Cách ứng dụng được xây dựng và quy trình bắt đầu sử dụng

  • Davit được triển khai hoàn toàn bằng SwiftUI
  • Cung cấp thao tác nhanh trên thanh menu
  • Biểu tượng Dock chỉ hiện khi người dùng muốn
  • Không mở trình duyệt để render biểu đồ thời gian thực
  • Quy trình bắt đầu ví dụ như sau
    • cài từ Releases hoặc qua Homebrew
    • ở lần chạy đầu, nếu chưa có nền tảng thì Davit sẽ cài đặt
    • pull nginxdemos/hello tại Images → Pull Image
    • chạy từ image hoặc dùng Containers → Run Container
    • ánh xạ host 8088 vào container 80
    • nhấn Open in Browser ở hàng Ports của container hoặc truy cập localhost:8088
    • khám phá CPU, bộ nhớ, đĩa, log, file, terminal và tính năng Edit & Recreate trên container đang chạy

Khác biệt với Docker Desktop và OrbStack

  • Davit dùng engine của Apple
    • mỗi container chạy trong VM nhẹ riêng của nó dựa trên Apple Virtualization framework
    • có địa chỉ IP riêng cho từng container
    • được tối ưu cho Apple silicon
  • Sử dụng image OCI
    • có thể pull từ Docker Hub, ghcr.io, quay.io hoặc bất kỳ registry nào
    • cũng có thể dùng image riêng tư thông qua đăng nhập registry
  • Liên kết với thư viện client của Apple và giao tiếp trực tiếp qua XPC
    • không có socket shim
    • không có thỏa thuận giấy phép
    • không cần tài khoản
  • Gói ứng dụng chỉ 17MB
    • không có Electron
    • không có image VM đóng gói sẵn
    • không có dịch vụ nền riêng
  • Khác với OrbStack ở định hướng sản phẩm
    • OrbStack là ứng dụng thương mại với lớp ảo hóa tương thích Docker riêng
    • Davit là giao diện miễn phí, mã nguồn mở trên nền tảng Apple container
    • Khi không có container, Davit không có tiến trình thường trú; dùng IP theo từng container và bridge network, đồng thời cách ly giữa các container mạnh hơn
    • OrbStack tốt hơn về khả năng tương thích drop-in với docker CLI/API và hỗ trợ công cụ rộng hơn
    • Cả hai đều chạy image OCI tiêu chuẩn

Bộ nhớ, DNS và độ an toàn

  • Kiến trúc bộ nhớ không duy trì một VM Linux nhiều GiB luôn bật
  • Docker Desktop giữ một VM lớn bất kể có chạy container hay không, còn nền tảng Apple khởi động VM nhẹ cho từng container và tắt khi container dừng
  • Khi không có container nào đang chạy, dịch vụ nền của nền tảng ở trạng thái nhàn rỗi khoảng 25MB
  • Bản thân Davit là ứng dụng SwiftUI native chứ không phải Electron, và phần lớn mức dùng bộ nhớ là bộ nhớ framework macOS dùng chung
  • Để truy cập từ Mac bằng tên container, có thể dùng domain DNS cục bộ của nền tảng
    • chạy một lần sudo container system dns create test hoặc dùng domain riêng
    • đặt làm domain mặc định tại Settings → Platform → DNS
    • container web sẽ phản hồi tại web.test trên Mac
  • Mọi container đều có IP riêng và IP được hiển thị trong phần Network
  • Nếu chạy Avahi trong guest, có thể phát alias mDNS .local
  • Mỗi bản phát hành đều được ký bằng Apple Developer ID và công chứng, có thể mở mà không gặp cảnh báo Gatekeeper
  • Ứng dụng là mã nguồn mở theo giấy phép MIT và có thể tự đọc mã hoặc tự build
  • Davit chỉ giao tiếp với daemon container cục bộ và dịch vụ kiểm tra cập nhật trên GitHub

1 bình luận

 
Ý kiến trên Hacker News
  • Chiến lược tốt nhất tôi dùng trong thời AI là không làm gì cả
    Tôi từng nghĩ ra một ý tưởng tương tự và nghĩ rằng có thể làm bằng vibe coding, nhưng đoán rằng sẽ có ai đó quan tâm hơn và làm trước, và thực tế đúng là vậy
    Ứng dụng trông có vẻ tốt và tôi rất mong được dùng thử
    Một ý tưởng miễn phí là tôi muốn nhốt agent trong máy ảo, rồi từ bên ngoài máy ảo dùng harness để gửi chỉ thị nhằm điều khiển các agent đã cài bên trong. Lý tưởng nhất là trên host không nên cài thứ như Codex/Claude
    Hướng hay hơn nữa là tạo nhiều tài khoản người dùng trong máy ảo, rồi giới hạn hệ thống tệp và chính sách mạng theo từng người dùng. Khi đó agent phát triển, agent QA, v.v. sẽ có các góc nhìn công việc khác nhau, và đây có thể trở thành một lớp nền tảng mạnh cho tự động hóa bổ sung
    Tất nhiên cũng cần có thể “gắn” nhiều tài nguyên như DB, queue, volume bên ngoài vào máy ảo để agent dùng theo quyền hạn

    • Việc đó coderunner làm được đúng như vậy
      https://GitHub.com/instavm/coderunner
    • Đây là cách dùng sandbox và người dùng riêng thay vì máy ảo, nhưng sandvault rất hợp cho mục đích này và còn tự động cài đặt
      Nói để minh bạch thì tôi từng gửi vài PR cho dự án này
      https://github.com/webcoyote/sandvault
    • “Nước đi quyền lực trong thời AI: không làm gì cả” vốn đã là chiến lược của tôi từ trước AI
      Khoảng cuối tuổi 20 hoặc đầu tuổi 30, tôi gần như ngừng hẳn việc phát triển trong thời gian rảnh, vì mọi niềm vui tôi từng có từ việc code đã biến mất. Thật ra ban đầu tôi cũng không thích đến vậy, chỉ là tôi thật sự không giỏi判断 xem thứ gì đáng bỏ thời gian hay không
      Ngay cả khi nghĩ ra một chương trình hay script mà nếu có thì tốt, phần lớn đều “không đáng công bỏ ra so với phần thưởng”, giống bảng xkcd tính thời gian hoàn vốn khi tạo chương trình để tiết kiệm vài phút mỗi tuần. Hoặc chúng không thật sự cần thiết, chỉ ở mức có thì thú vị hay vui, nhưng để thực sự làm thì tốn vô số giờ nên hoàn toàn không đáng
      Nếu ai đó làm và công bố thứ tôi muốn thì tốt, còn không thì đành chịu
      Thay đổi lớn mà LLM mang lại là giờ đây có thể tạo ra những script nhỏ trong vài phút, với chi phí từ vài xu đến vài đô la. Tôi đang lôi lại những ý tưởng cực kỳ ngách đã để lâu
      Trước đây có những việc chỉ riêng lục lọi API lạ và tài liệu đã mất vài cuối tuần, giờ có thể làm trong vòng 30 phút; hoặc ít nhất có thể quyết định trong vài phút thay vì vài giờ rằng việc này không làm được, hoặc quá phiền nên nên bỏ vĩnh viễn
    • Tôi đã làm thử một thứ tương tự bằng một frontend trình duyệt đơn giản
      Tôi thích chạy các mô hình mở cỡ trung và lớn, nhưng không thể tin rằng các mô hình đó sẽ không nổi loạn, nên tôi đã làm nó và dự định sẽ chia sẻ sớm
    • Tôi cũng từng nghĩ đến chuyện này
      Có vẻ chỉ đơn giản là cài Claude vào máy ảo rồi kết nối bằng terminal SSH là được. Nếu cần GUI thì dùng extension Remote SSH của VSCode sẽ có cả UI kiểu trình duyệt tệp
      Có lẽ cũng có thể cài Claude của VSCode hoặc các extension chat khác bên trong máy ảo
  • Điều nổi bật hơn bản thân dự án này là một hiện tượng mà nhiều người, đặc biệt trong khoảng một năm qua, đã có thể dự đoán nay đang tăng tốc thấy rõ. Giờ mọi người có thể tạo phiên bản riêng của cùng một ý tưởng nhanh hơn trước rất nhiều
    Tìm khoảng 10 phút thì thấy vài dự án Swift tương tự, hầu hết mới xuất hiện vài tuần hoặc vài tháng
    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
    Nếu tính cả những dự án có ít sao GitHub hơn, chỉ dùng dòng lệnh, hoặc không viết bằng Swift thì còn nhiều hơn nữa, nhưng ý chính là như vậy
    Mọi người sẽ ngày càng có khả năng tự tạo phiên bản phần mềm mình muốn. Khi đó giá trị của phần mềm do người khác làm sẽ giảm. Kỷ nguyên của phần mềm siêu cá nhân hóa đang đến

    • Liệu có thể nói tất cả các dự án này đều có chất lượng hạng nhất ngang nhau không? Tôi không dám chắc
      Trước đây có thể ước lượng công sức bỏ vào những thứ như vậy qua độ hoàn thiện của website hoặc vài yếu tố bề mặt. Giờ những phần đó có thể hoàn thành dễ dàng bằng LLM
      Tương tự, khi mọi chuyện lắng xuống, một trong những tác động lớn nhất mà Kickstarter để lại là video pitch 3 phút đã tiến hóa và được tinh chỉnh một cách mạnh mẽ
      Tôi không biết liệu điều đó có thật sự dẫn đến một triển khai và lộ trình được suy nghĩ sâu, cùng động lực thực sự hay không
    • Trên iOS thì khác. Để đưa lên App Store, hoặc phải trả phí thành viên hằng năm, hoặc phải build lại và cài lại bản build bằng tài khoản cá nhân khoảng mỗi 30 ngày
  • Trông thật sự như một ứng dụng rất chắc chắn. Nó chỉ 17MB, và tôi thích việc dùng trực tiếp thư viện ContainerAPIClient
    Trong 3 ngày có 28 commit, 5.015 dòng Swift, và mọi commit đều có “Co-Authored-By: Claude Fable 5”
    Việc đã được ký và công chứng cũng rất tốt. Khi cài thử, ở lần chạy đầu tiên nó đã tải xuống các thành phần nền tảng container cần thiết
    Nếu góp ý, tôi nghĩ nên thêm một tutorial khởi đầu trên trang web, đề xuất một image để thử, rồi dùng ảnh chụp màn hình hoặc video không tiếng để chỉ cách chạy image đó và những việc có thể làm
    Hộp thoại tạo image gợi ý “nginx:latest”, nhưng nó không thật sự hay cho demo bắt đầu

    • Cụm từ AI-Maxing trên website ít nhiều đã lộ ra. Nhưng điều đó không có nghĩa đây không phải là một ứng dụng xuất sắc
    • Gợi ý hay. Sẽ sớm thêm vào
    • Một tutorial với ví dụ thực tế hơn một chút có lẽ sẽ rất hữu ích ở đây
      nginx:latest cho thấy hệ thống đường ống hoạt động, nhưng không cho thấy Apple Containers đem lại cảm giác khác Docker Desktop hay OrbStack ở điểm nào
      Một ví dụ gắn volume, ánh xạ port và vòng lặp rebuild đơn giản cho một ứng dụng nhỏ sẽ giúp giá trị của nó dễ thấy hơn nhiều
  • Ha! Có vẻ chúng tôi cũng đã làm một thứ tương tự: https://container-ui.fly.dev/
    Giờ tôi lại nghĩ giá mà đã không đốt nhiều token đến thế

    • Ồ, chào bạn. Tôi vừa thấy phần so sánh với Orchard, đó là tôi đấy
      Trông gọn gàng lắm. Rốt cuộc tất cả chúng ta đều đang làm cùng một thứ nhỉ ><
  • Tôi đã dùng OrbStack và khá thích nó trong gần 2 năm
    Tích hợp tốt, nhanh, và tương thích lệnh docker, nên với tôi đáng để trả tiền
    Dù vậy tôi cũng sẽ thử cái này

    • Container native trên macOS có vẻ chạy một máy ảo Linux riêng cho mỗi container
      Điểm mạnh của OrbStack là mọi container đều chạy trong một máy ảo Linux duy nhất, và họ tối ưu rất nhiều ở cả hai phía của ranh giới máy ảo. Bao gồm cả việc dùng file image thưa để tiết kiệm nhiều dung lượng đĩa phía macOS
      Khi chạy hơn 4–5 container trên macOS, lợi ích về hiệu năng và mức tiết kiệm tài nguyên của OrbStack tăng lên rất nhanh
    • Tôi đoán đội ngũ OrbStack chẳng bao lâu nữa sẽ hỗ trợ container native trên macOS, rồi đặt các tính năng quản lý của họ lên trên đó
  • Rất tốt. Việc tải runtime và chạy nginx:latest hoạt động hoàn hảo
    Khi cuộn xuống trên GitHub mà thấy Claude trong danh sách contributor, điều đó dần trở thành tín hiệu rằng ứng dụng sẽ tốt. Kiểu như có cảm giác native và không phải Electron

  • Ước gì Apple thêm khả năng tương thích docker API cho Apple Containers

    • Tôi cũng không rõ lắm. Có thể dùng cái này thay Docker Desktop để chạy container docker “native” trên Mac của tôi không? Hay nó là một thứ hoàn toàn tách biệt với docker?
    • Cái này tập trung vào build, và chạy buildkitd hoặc dockerd bên trong container của Apple containerization
      Không có những thứ như port forwarding hay host volume. Thực ra trọng tâm là chạy buildkit trên Mac
      Tuy nhiên nó tích hợp hoàn toàn với docker CLI và buildx
      https://github.com/cpuguy83/crucible
  • Tính năng tốt, và tôi cũng thích việc đây là một ứng dụng SwiftUI native nhỏ gọn
    Gần đây tôi đã viết một bài [1] về việc dùng container của Apple cho lập trình kiểu agent, và vừa cập nhật để nhắc đến Davit. Với các dự án cá nhân, trên hai máy Mac ở nhà, tôi thích dùng container của Apple hơn Docker nhiều
    [1] https://open.substack.com/pub/marklwatson/p/running-opencode...

  • So với OrbStack thì thế nào? Apple Containers có mang lại điều gì đáng cảm nhận trong trải nghiệm developer không? Theo cách dùng của tôi, triển khai của OrbStack đã cho cảm giác nhanh như chớp rồi

  • Vài ngày trước tôi đã đăng một phiên bản tương tự do tôi làm, nhưng gần như không có phản hồi
    Nếu ai quan tâm, đó là ứng dụng thanh menu hỗ trợ container, machine, registry
    https://news.ycombinator.com/item?id=48789503
    https://github.com/erdaltoprak/ContainerUtility