- 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
containersử 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.ymlvà 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
containervà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/hellotại Images → Pull Image - chạy từ image hoặc dùng Containers → Run Container
- ánh xạ host
8088vào container80 - 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
dockerCLI/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 testhoặc dùng domain riêng - đặt làm domain mặc định tại Settings → Platform → DNS
- container
websẽ phản hồi tạiweb.testtrên Mac
- chạy một lần
- 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
https://GitHub.com/instavm/coderunner
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
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 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
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
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ô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
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ế
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
Đ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
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
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