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 기반 빌더를 직접 구동하고, 필요하면 시작함
  • 현재 플랫폼 제한도 있음
    • 16KiB를 넘는 Dockerfile은 거부됨
    • 이는 upstream apple/container bug로 연결됨
    • 빌드 컨텍스트는 /tmp 아래에 둘 수 없음

이미지, 볼륨, 네트워크, 레지스트리

  • 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 업데이트 확인에만 통신함
Read Entire Article