Davit - Apple Containers용 네이티브 macOS UI
(davit.app)- Davit은 Apple silicon Mac에서 Apple의 container 플랫폼으로 Linux 컨테이너를 실행·관리하는 네이티브 macOS 앱이며, Docker Desktop 없이 쓸 수 있음
- Apple의 오픈소스 container 데몬과 XPC로 직접 통신해 CLI와 같은 경로를 사용하며, Electron·웹뷰·자체 백그라운드 에이전트를 두지 않음
- 컨테이너 시작·중지, 로그 스트리밍, 터미널 접속, 파일 탐색, Dockerfile 빌드, Compose 가져오기까지 한 앱에서 처리함
- 무료 오픈소스 MIT 라이선스 앱으로 제공되며, Apple Developer ID 서명과 공증을 거쳤고 macOS 15 이상 Apple silicon Mac이 필요함
- Docker Desktop과 달리 컨테이너별 경량 VM을 쓰며, 실행 중인 컨테이너가 없을 때 플랫폼 백그라운드 서비스는 약 25MB 수준으로 유휴 상태가 됨
Davit의 목적과 실행 환경
- Davit은 Apple의 container 플랫폼을 위한 완전 네이티브 macOS 앱임
- Apple silicon에서 Linux 컨테이너를 실행하며, Docker Desktop이 필요 없음
- 무료 오픈소스이며 MIT 라이선스로 제공됨
- 앱은 Apple Developer ID로 서명되고 공증되어 있음
- 요구 사항은 macOS 15 이상을 실행하는 Apple silicon Mac임
- 설치는 릴리스에서 받거나 Homebrew로 가능함
brew install wouterdebie/tap/davit
Apple container 데몬과 직접 통신
- Davit은 Apple의 오픈소스 container 데몬과 XPC로 직접 통신함
- 이 경로는
containerCLI가 사용하는 것과 같은 통신 경로임 - Electron, 웹뷰, 자체 백그라운드 에이전트를 사용하지 않음
컨테이너 관리 기능
- 대시보드는 실행 중인 컨테이너 전체의 서비스, 디스크 사용량, 실시간 CPU를 보여줌
- 컨테이너 목록에서는 각 행에서 상태를 확인하고 바로 조작할 수 있음
- 시작, 중지, 재시작, 삭제
- 실시간 CPU
- 메모리
- IP
- 컨테이너별 화면은 실행 상태를 파악하는 기능을 함께 제공함
- follow 및 boot 모드가 있는 스트리밍 로그
- 실시간 상태 차트
- 원시 설정 확인
- 실행 중인 컨테이너에는 네이티브 API로 바로 터미널을 열 수 있음
- Terminal 또는 iTerm에서 인터랙티브 셸을 열 수 있음
- CLI가 필요 없음
불변 컨테이너 편집과 파일 접근
- 컨테이너는 불변이기 때문에 Davit은 기존 설정을 바탕으로 새 컨테이너를 미리 채워 다시 만들 수 있게 함
- 새 컨테이너 설정에는 이미지의 entrypoint와 env를 제외한 기존 설정이 반영됨
- 포트, 환경 변수, 마운트, 리소스를 빠르게 바꾸는 흐름에 맞춰져 있음
- 앱 안에서 실행 중인 컨테이너의 파일시스템을 탐색할 수 있음
- 폴더 이동
- Mac으로 파일 다운로드
- 파일 업로드
- 파일 삭제
- 파일 작업은 네이티브 API로 처리되며
docker cp명령이 필요 없음
Compose 가져오기와 Dockerfile 빌드
- Davit은
docker-compose.yml을 열어 생성될 리소스를 먼저 보여줌- 의존성 순서의 서비스
- 볼륨
- 네트워크
- 서비스별 동등한 CLI 명령
- 지원되지 않는 항목에 대한 경고
- Apple 플랫폼에는 네이티브 compose가 없어 Davit이 스택을 직접 오케스트레이션함
- Compose 가져오기는 지원되는 부분집합을 대상으로 함
- 지원: image, ports, environment, named/bind volumes, networks, resource limits, command, user, working_dir
- 경고 대상 예:
restart:,healthcheck:,build:
- Dockerfile 빌드는 Images → Build Image에서 가능함
- 컨텍스트 폴더와 Dockerfile을 선택함
- 태그와 build args를 설정함
- Davit이 Apple의 BuildKit 기반 빌더를 직접 구동하고, 필요하면 시작함
- 현재 플랫폼 제한도 있음
- 16KiB를 넘는 Dockerfile은 거부됨
- 이는 upstream apple/container bug로 연결됨
- 빌드 컨텍스트는
/tmp아래에 둘 수 없음
이미지, 볼륨, 네트워크, 레지스트리
- Davit은 이미지 관련 작업을 지원함
- 진행률을 보며 pull
- 이미지에서 컨테이너 실행
- 태그 지정
- prune
- 볼륨과 네트워크 작업도 제공됨
- 크기가 지정된 볼륨 생성
- 사용자 지정 서브넷 생성
- 삭제 전 사용 중인 항목 확인
- 레지스트리 로그인은 Settings → Registries에서 처리함
- Docker Hub
- ghcr.io
- quay.io
- 임의의 OCI 레지스트리
- 자격 증명은 저장 전에 레지스트리에서 검증됨
- 검증된 자격 증명은 macOS 로그인 키체인에 저장되며
containerCLI와 공유됨 - Docker Hub는 비밀번호 대신 액세스 토큰 사용을 요구함
플랫폼 설정과 자동 설치
- Davit은 플랫폼 설정을 앱 안에서 편집할 수 있음
- 새 컨테이너 기본 CPU/메모리
- 레지스트리
- DNS
- 빌더 리소스
- 설정은 플랫폼 자체 설정 로더로 검증되고, 깨끗한 TOML override로 저장됨
- Apple container 플랫폼이 설치되어 있지 않으면 Davit이 Apple의 서명된 설치 프로그램을 다운로드하고 검증해 사용자 Library에 설치함
- 설치 과정에는 관리자 권한이 필요 없음
- 필요하면
containerCLI를 셸에 추가할 수도 있음
앱 구현과 사용 시작 흐름
- Davit은 전체가 SwiftUI로 구현됨
- 메뉴 막대 빠른 동작을 제공함
- Dock 아이콘은 사용자가 원할 때만 표시할 수 있음
- 실시간 차트 렌더링을 위해 브라우저를 띄우지 않음
- 예시 시작 흐름은 다음과 같음
- Releases에서 설치하거나 Homebrew로 설치
- 첫 실행 시 플랫폼이 없으면 Davit이 설치
- Images → Pull Image에서
nginxdemos/hellopull - 이미지에서 실행하거나 Containers → Run Container 사용
- 호스트
8088을 컨테이너80에 매핑 - 컨테이너의 Ports 행에서 Open in Browser를 누르거나
localhost:8088접속 - 실행 중인 컨테이너에서 CPU, 메모리, 디스크, 로그, 파일, 터미널, Edit & Recreate 기능을 탐색
Docker Desktop 및 OrbStack과의 차이
- Davit은 Apple의 엔진을 사용함
- 각 컨테이너는 Apple Virtualization framework 기반의 자체 경량 VM에서 실행됨
- 컨테이너별 IP 주소를 가짐
- Apple silicon에 최적화됨
- OCI 이미지를 사용함
- Docker Hub, ghcr.io, quay.io 또는 임의 레지스트리에서 pull 가능
- 프라이빗 이미지도 레지스트리 로그인으로 사용 가능
- Apple의 클라이언트 라이브러리를 링크하고 XPC로 직접 통신함
- 소켓 shim 없음
- 라이선스 계약 없음
- 계정 없음
- 앱 번들은 17MB임
- Electron 없음
- 번들 VM 이미지 없음
- 자체 백그라운드 서비스 없음
- OrbStack과는 지향점이 다름
- OrbStack은 자체 Docker 호환 가상화 계층을 가진 상용 앱임
- Davit은 Apple container 플랫폼 위의 무료 오픈소스 UI임
- Davit은 컨테이너가 없을 때 상주 항목이 없고, 컨테이너별 IP와 브리지 네트워크를 사용하며, 컨테이너 간 격리가 더 강함
- OrbStack은 drop-in
dockerCLI/API 호환성과 더 넓은 도구 지원에서 더 나음 - 둘 다 표준 OCI 이미지를 실행함
메모리, DNS, 안전성
- 메모리 구조는 항상 켜져 있는 다중 GiB Linux VM을 두지 않는 방식임
- Docker Desktop은 컨테이너 실행 여부와 무관하게 큰 VM 하나를 유지하지만, Apple 플랫폼은 컨테이너별 경량 VM을 부팅하고 컨테이너가 멈추면 종료함
- 실행 중인 컨테이너가 없을 때 플랫폼 백그라운드 서비스는 약 25MB로 유휴 상태임
- Davit 자체는 Electron이 아닌 네이티브 SwiftUI 앱이며, 메모리 사용량은 대부분 공유 macOS 프레임워크 메모리임
- 컨테이너 이름으로 Mac에서 접근하려면 플랫폼의 로컬 DNS 도메인을 사용할 수 있음
sudo container system dns create test를 한 번 실행하거나 자체 도메인을 사용- Settings → Platform → DNS에서 기본 도메인으로 설정
web컨테이너는 Mac에서web.test로 응답함
- 모든 컨테이너는 자체 IP를 가지며, IP는 Network 섹션에 표시됨
- 게스트 안에서 Avahi를 실행하면
.localmDNS 별칭을 브로드캐스트할 수 있음 - 각 릴리스는 Apple Developer ID로 서명되고 공증되어 Gatekeeper 경고 없이 열림
- 앱은 오픈소스 MIT 라이선스이며, 직접 읽거나 빌드할 수 있음
- Davit은 로컬 container 데몬과 GitHub 업데이트 확인에만 통신함
댓글과 토론
Hacker News 의견들
-
AI 시대에 내가 쓰는 최고의 전략은 아무것도 안 하기임
비슷한 아이디어를 떠올리고 바이브 코딩으로 만들 수 있겠다고 생각했지만, 누군가 더 관심을 갖고 먼저 만들 거라 봤고 실제로 맞았음
앱은 좋아 보이고 써보는 게 기대됨
무료 아이디어로는 에이전트를 가상 머신 안에 가둬두고, 가상 머신 밖에서 하니스로 지시를 보내 내부에 설치된 에이전트들을 제어하고 싶음. 이상적으로는 호스트에 Codex/Claude 같은 게 설치되지 않아야 함
더 멋진 방향은 가상 머신 안에 여러 사용자 계정을 만들고, 사용자별로 파일 시스템과 네트워크 정책을 제한하는 것임. 그러면 개발 에이전트, QA 에이전트 등이 각자 다른 작업 뷰를 갖게 되고, 추가 자동화를 위한 강력한 기반 계층이 될 수 있음
당연히 DB, 큐, 외부 볼륨 같은 여러 리소스를 가상 머신에 “붙여서” 에이전트가 권한 기반으로 쓰게 할 수 있어야 함- 그건 coderunner로 정확히 가능함
https://GitHub.com/instavm/coderunner - 가상 머신 대신 샌드박스와 별도 사용자를 쓰는 방식이지만, sandvault가 이 용도에 좋고 자동 설치도 해줌
투명성 차원에서 말하면 여기에 PR을 몇 개 보낸 적 있음
https://github.com/webcoyote/sandvault - “AI 시대의 파워 무브: 아무것도 안 하기”는 AI 이전에도 내 전략이었음
20대 후반이나 30대 초반쯤부터 여가 시간에 개발하는 걸 거의 완전히 멈췄는데, 코딩 자체에서 얻던 재미가 다 사라졌기 때문임. 사실 원래도 그렇게 좋아한 건 아니고, 시간을 쓸 가치가 있는지 없는지 판단을 정말 못했을 뿐임
갖고 있으면 좋을 프로그램이나 스크립트가 떠올라도, 주당 몇 분을 절약하려고 프로그램을 만드는 데 드는 회수 시간을 따지는 xkcd 표처럼 대부분은 “들인 노력 대비 보상이 안 맞았음”. 또는 꼭 필요하진 않지만 있으면 흥미롭거나 재미있을 수준인데, 실제로 만들려면 수많은 시간이 들어서 전혀 가치가 없었음
누가 내가 원하던 걸 만들어 공개하면 좋고, 아니면 어쩔 수 없다는 식이었음
LLM이 만든 큰 변화는 이제 작은 스크립트 같은 걸 몇 분, 몇 센트에서 몇 달러 정도로 뽑아낼 수 있다는 점임. 오래 묵혀둔 극도로 틈새적인 아이디어들을 다시 꺼내고 있음
예전엔 생소한 API와 문서를 뒤지는 데만 주말 몇 번이 걸렸을 일도 이제 30분 안에 가능하거나, 최소한 이게 안 되거나 너무 귀찮아서 영원히 버려야 할 일인지 몇 시간 대신 몇 분 안에 판단할 수 있음 - 비슷한 걸 간단한 브라우저 프런트엔드로 대충 만들어봤음
중대형 오픈 모델을 돌리는 걸 좋아하지만, 그 모델들이 미쳐 날뛰지 않는다고 믿을 수는 없어서 만들었고 조만간 공유할 예정임 - 이 생각을 나도 해봤음
가상 머신에 Claude를 설치하고 SSH 터미널로 접속하면 되는 정도로 단순한 거 아닌가 싶음. GUI가 필요하면 VSCode의 Remote SSH 확장을 쓰면 파일 브라우저 UI 같은 것도 얻을 수 있음
아마 VSCode의 Claude나 다른 채팅 확장도 가상 머신 안에 설치할 수 있을 것 같음
- 그건 coderunner로 정확히 가능함
-
이 프로젝트 자체보다 더 눈에 띈 건, 많은 사람이 특히 지난 1년쯤 예견할 수 있었던 현상이 눈에 보이게 빨라졌다는 점임. 이제 사람들은 같은 아이디어의 자기 버전을 전보다 훨씬 빠르게 만들 수 있음
10분 정도 찾아보니 비슷한 Swift 프로젝트가 여러 개 나왔고, 대부분은 생긴 지 몇 주나 몇 달밖에 안 됨
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 별이 더 적은 것, 명령줄 전용, Swift가 아닌 것까지 포함하면 더 많았지만 요지는 이렇다
사람들은 점점 자신이 원하는 소프트웨어의 자기 버전을 직접 만들 수 있게 될 것임. 그렇게 되면 남이 만든 소프트웨어의 가치는 줄어듦. 초개인화 소프트웨어의 시대가 오고 있음- 이 프로젝트들이 모두 동등하게 최상급 품질이라고 말할 수 있을까? 확실히 안다고는 못 하겠음
예전에는 웹사이트 완성도나 몇 가지 표면적인 요소로 이런 것에 들어간 노력을 가늠할 수 있었음. 이제 그런 부분은 LLM으로 쉽게 끝남
비슷하게, 먼지가 가라앉고 나니 Kickstarter가 남긴 가장 큰 영향 중 하나는 3분짜리 피치 영상이 공격적으로 진화하고 정제됐다는 점임
그게 실제로 깊이 고민된 구현과 로드맵, 진짜 추진력으로 이어지는지는 모르겠음 - iOS에서는 다름. App Store에 올리려면 연간 멤버십 비용을 내야 하거나, 개인 계정 빌드를 30일쯤마다 다시 빌드하고 재설치해야 함
- 이 프로젝트들이 모두 동등하게 최상급 품질이라고 말할 수 있을까? 확실히 안다고는 못 하겠음
-
정말 탄탄한 앱처럼 보임. 17MB이고 ContainerAPIClient 라이브러리를 직접 쓰는 점이 마음에 듦
3일 동안 커밋 28개, Swift 5,015줄, 모든 커밋에 “Co-Authored-By: Claude Fable 5”가 붙어 있음
서명과 공증이 되어 있는 것도 좋음. 설치해보니 첫 실행 때 필요한 컨테이너 플랫폼 구성요소를 다운로드했음
제안하자면, 사이트에 시작 튜토리얼을 추가해서 시험해볼 이미지 하나를 추천하고, 그 이미지를 실행하는 방법과 할 수 있는 일을 스크린샷이나 무음 영상으로 보여주면 좋겠음
이미지 생성 대화상자는 “nginx:latest”를 제안하지만, 시작용 데모로는 그리 좋지 않음- 웹사이트의 AI-Maxing 문구가 어느 정도 티를 냈음. 그렇다고 훌륭한 앱이 아니라는 뜻은 아님
- 좋은 제안임. 곧 추가하겠음
- 조금 더 현실적인 예제를 담은 튜토리얼이 여기서는 큰 도움이 될 것 같음
nginx:latest는 배관이 작동한다는 건 보여주지만, Apple Containers가 Docker Desktop이나 OrbStack과 어디서 다르게 느껴지는지는 잘 보여주지 않음
작은 앱에 볼륨, 포트 매핑, 간단한 재빌드 루프를 붙인 예제라면 가치가 훨씬 쉽게 보일 듯함
-
하! 우리도 같은 걸 만든 것 같음: https://container-ui.fly.dev/
이제 그 많은 토큰을 태우지 말 걸 그랬다는 생각이 듦- 오 안녕하세요. 방금 Orchard와 비교한 내용이 있는 걸 봤는데, 그게 저임
깔끔해 보임. 결국 우리 모두 같은 걸 만들고 있네요 ><
- 오 안녕하세요. 방금 Orchard와 비교한 내용이 있는 걸 봤는데, 그게 저임
-
OrbStack을 거의 2년 정도 좋아해서 써왔음
통합이 잘 되어 있고 빠르며 docker 명령 호환이라 내겐 비용을 낼 만했음
그래도 이것도 한번 써보겠음- macOS 네이티브 컨테이너는 컨테이너마다 별도의 Linux 가상 머신을 띄우는 것으로 보임
OrbStack의 강점은 모든 컨테이너가 하나의 Linux 가상 머신 안에서 돌아가고, 가상 머신 경계 양쪽에서 많은 최적화를 한다는 점임. macOS 쪽 디스크 공간을 많이 아끼는 희소 이미지 파일 사용도 포함됨
macOS에서 컨테이너를 4~5개 넘게 돌리면 OrbStack의 성능과 리소스 사용량 절감 효과가 빠르게 커짐 - OrbStack 팀이 조만간 macOS 네이티브 컨테이너를 지원하고, 그 위에 자기들의 관리 기능을 얹을 것 같음
- macOS 네이티브 컨테이너는 컨테이너마다 별도의 Linux 가상 머신을 띄우는 것으로 보임
-
정말 좋음. 런타임을 다운로드하고 nginx:latest를 실행하는 게 완벽하게 동작했음
GitHub에서 아래로 스크롤했을 때 Claude가 기여자로 보이면, 앱이 좋을 것이라는 신호처럼 되어 가는 듯함. 네이티브 느낌이고 Electron이 아닌 식으로 말임 -
Apple이 Apple Containers에 docker API 호환성을 추가해주면 좋겠음
- 나도 잘 모르겠음. 이걸 Docker Desktop 대신 써서 내 Mac에서 docker 컨테이너를 “네이티브”로 돌릴 수 있는 건가? 아니면 docker와 완전히 별개의 것인가?
- 이건 빌드에 초점을 둔 것이고, Apple containerization 컨테이너 안에서 buildkitd나 dockerd를 실행하는 방식임
포트 포워딩이나 호스트 볼륨 같은 건 없음. 실제로는 Mac에서 buildkit을 돌리는 데 초점이 맞춰져 있음
다만 docker CLI와 buildx와는 완전히 통합됨
https://github.com/cpuguy83/crucible
-
기능도 좋고, 작은 네이티브 SwiftUI 앱이라는 점도 마음에 듦
최근 Apple 컨테이너를 에이전트형 코딩에 쓰는 글 [1]을 썼고, 방금 Davit을 언급하도록 업데이트했음. 개인 프로젝트용으로 집의 Mac 두 대에서는 Docker보다 Apple 컨테이너를 쓰는 쪽을 훨씬 선호함
[1] https://open.substack.com/pub/marklwatson/p/running-opencode... -
OrbStack과 비교하면 어떤가? Apple Containers가 개발자 경험에서 체감할 만한 뭔가를 제공하나? 내 사용 기준으로는 OrbStack 구현도 이미 번개처럼 빠르게 느껴짐
-
며칠 전에 내가 만든 비슷한 버전을 올렸지만 반응이 거의 없었음
관심 있는 사람을 위해 말하면, 메뉴 막대 앱으로 컨테이너, 머신, 레지스트리를 지원함
https://news.ycombinator.com/item?id=48789503
https://github.com/erdaltoprak/ContainerUtility