Davit - Apple Containers용 네이티브 macOS UI
6 hours ago
3
- 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로 직접 통신함
- 이 경로는 container CLI가 사용하는 것과 같은 통신 경로임
- 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 기반 빌더를 직접 구동하고, 필요하면 시작함
- 현재 플랫폼 제한도 있음
이미지, 볼륨, 네트워크, 레지스트리
- Davit은 이미지 관련 작업을 지원함
- 진행률을 보며 pull
- 이미지에서 컨테이너 실행
- 태그 지정
- prune
- 볼륨과 네트워크 작업도 제공됨
- 크기가 지정된 볼륨 생성
- 사용자 지정 서브넷 생성
- 삭제 전 사용 중인 항목 확인
- 레지스트리 로그인은 Settings → Registries에서 처리함
- Docker Hub
- ghcr.io
- quay.io
- 임의의 OCI 레지스트리
- 자격 증명은 저장 전에 레지스트리에서 검증됨
- 검증된 자격 증명은 macOS 로그인 키체인에 저장되며 container CLI와 공유됨
- Docker Hub는 비밀번호 대신 액세스 토큰 사용을 요구함
플랫폼 설정과 자동 설치
- Davit은 플랫폼 설정을 앱 안에서 편집할 수 있음
- 새 컨테이너 기본 CPU/메모리
- 레지스트리
- DNS
- 빌더 리소스
- 설정은 플랫폼 자체 설정 로더로 검증되고, 깨끗한 TOML override로 저장됨
- Apple container 플랫폼이 설치되어 있지 않으면 Davit이 Apple의 서명된 설치 프로그램을 다운로드하고 검증해 사용자 Library에 설치함
- 설치 과정에는 관리자 권한이 필요 없음
- 필요하면 container CLI를 셸에 추가할 수도 있음
앱 구현과 사용 시작 흐름
- Davit은 전체가 SwiftUI로 구현됨
- 메뉴 막대 빠른 동작을 제공함
- Dock 아이콘은 사용자가 원할 때만 표시할 수 있음
- 실시간 차트 렌더링을 위해 브라우저를 띄우지 않음
- 예시 시작 흐름은 다음과 같음
- Releases에서 설치하거나 Homebrew로 설치
- 첫 실행 시 플랫폼이 없으면 Davit이 설치
- Images → Pull Image에서 nginxdemos/hello pull
- 이미지에서 실행하거나 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 docker CLI/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를 실행하면 .local mDNS 별칭을 브로드캐스트할 수 있음
- 각 릴리스는 Apple Developer ID로 서명되고 공증되어 Gatekeeper 경고 없이 열림
- 앱은 오픈소스 MIT 라이선스이며, 직접 읽거나 빌드할 수 있음
- Davit은 로컬 container 데몬과 GitHub 업데이트 확인에만 통신함
-
Homepage
-
Tech blog
- Davit - Apple Containers용 네이티브 macOS UI