- Davit es una app nativa de macOS para ejecutar y administrar contenedores Linux en Mac con Apple silicon usando la plataforma de contenedores de Apple, y puede usarse sin Docker Desktop
- Se comunica directamente por XPC con el daemon
containerde código abierto de Apple y usa la misma ruta que la CLI, sin Electron, webviews ni agentes de fondo propios - Maneja desde una sola app el inicio y la detención de contenedores, streaming de logs, acceso a terminal, exploración de archivos, builds de Dockerfile e importación de Compose
- Se ofrece como app gratuita de código abierto bajo licencia MIT, está firmada y notarizada con Apple Developer ID, y requiere macOS 15 o superior en una Mac con Apple silicon
- A diferencia de Docker Desktop, usa una VM ligera por contenedor, y cuando no hay contenedores ejecutándose los servicios de fondo de la plataforma quedan en reposo con alrededor de 25 MB
Objetivo de Davit y entorno de ejecución
- Davit es una app de macOS completamente nativa para la plataforma de contenedores de Apple
- Ejecuta contenedores Linux en Apple silicon y no requiere Docker Desktop
- Es gratuito y de código abierto, y se ofrece bajo licencia MIT
- La app está firmada y notarizada con Apple Developer ID
- El requisito es una Mac con Apple silicon que ejecute macOS 15 o superior
- Puede instalarse desde los releases o con Homebrew
brew install wouterdebie/tap/davit
Comunicación directa con el daemon container de Apple
- Davit se comunica directamente por XPC con el daemon container de código abierto de Apple
- Esta es la misma ruta de comunicación que usa la CLI
container - No usa Electron, webviews ni agentes de fondo propios
Funciones de administración de contenedores
- El dashboard muestra los servicios de todos los contenedores en ejecución, uso de disco y CPU en tiempo real
- En la lista de contenedores se puede ver el estado y operar directamente desde cada fila
- iniciar, detener, reiniciar, eliminar
- CPU en tiempo real
- memoria
- IP
- La vista de cada contenedor también ofrece funciones para entender su estado de ejecución
- logs en streaming con modos follow y boot
- gráficos de estado en tiempo real
- revisión de la configuración en bruto
- En los contenedores en ejecución se puede abrir una terminal directamente con APIs nativas
- se puede abrir un shell interactivo en Terminal o iTerm
- no se necesita la CLI
Edición de contenedores inmutables y acceso a archivos
- Como los contenedores son inmutables, Davit permite recrearlos con una nueva configuración prellenada a partir de la configuración existente
- La nueva configuración del contenedor refleja la configuración anterior, excepto el entrypoint y las variables de entorno de la imagen
- Está pensado para flujos donde se cambian rápido puertos, variables de entorno, montajes y recursos
- Se puede explorar el sistema de archivos de un contenedor en ejecución desde la app
- navegar por carpetas
- descargar archivos a la Mac
- subir archivos
- eliminar archivos
- Las operaciones de archivos se procesan con APIs nativas y no requieren el comando
docker cp
Importación de Compose y build de Dockerfile
- Davit puede abrir
docker-compose.ymly mostrar primero los recursos que se crearán- servicios en orden de dependencias
- volúmenes
- redes
- comandos CLI equivalentes por servicio
- advertencias sobre elementos no compatibles
- Como la plataforma de Apple no tiene compose nativo, Davit orquesta directamente el stack
- La importación de Compose apunta a un subconjunto compatible
- Compatible: image, ports, environment, named/bind volumes, networks, resource limits, command, user, working_dir
- Ejemplos que generan advertencia:
restart:,healthcheck:,build:
- El build de Dockerfile está disponible en Images → Build Image
- se eligen la carpeta de contexto y el Dockerfile
- se configuran la etiqueta y los build args
- Davit ejecuta directamente el builder basado en BuildKit de Apple y lo inicia si hace falta
- También hay limitaciones actuales de la plataforma
- se rechazan Dockerfile de más de 16 KiB
- esto está vinculado al bug upstream de apple/container
- el contexto de build no puede estar bajo
/tmp
Imágenes, volúmenes, redes y registros
- Davit soporta tareas relacionadas con imágenes
- pull con barra de progreso
- ejecutar contenedores desde una imagen
- etiquetar
- prune
- También ofrece operaciones para volúmenes y redes
- crear volúmenes con tamaño definido
- crear subredes personalizadas
- revisar qué elementos están en uso antes de eliminarlos
- El inicio de sesión en registros se gestiona en Settings → Registries
- Docker Hub
- ghcr.io
- quay.io
- cualquier registro OCI
- Las credenciales se validan con el registro antes de guardarse
- Las credenciales validadas se almacenan en el llavero de inicio de sesión de macOS y se comparten con la CLI
container - Docker Hub requiere usar un token de acceso en lugar de contraseña
Configuración de la plataforma e instalación automática
- Davit permite editar la configuración de la plataforma desde la app
- CPU/memoria predeterminadas para nuevos contenedores
- registros
- DNS
- recursos del builder
- La configuración se valida con el propio loader de configuración de la plataforma y se guarda como un override TOML limpio
- Si la plataforma container de Apple no está instalada, Davit descarga y valida el instalador firmado por Apple y lo instala en la Library del usuario
- El proceso de instalación no requiere privilegios de administrador
- Si hace falta, también puede agregar la CLI
containeral shell
Implementación de la app y flujo para comenzar a usarla
- Davit está implementado por completo con SwiftUI
- Ofrece acciones rápidas desde la barra de menús
- El ícono del Dock puede mostrarse solo si el usuario lo desea
- No abre un navegador para renderizar gráficos en tiempo real
- Un flujo de inicio de ejemplo sería el siguiente
- instalar desde Releases o con Homebrew
- en el primer arranque, si no existe la plataforma, Davit la instala
- hacer pull de
nginxdemos/helloen Images → Pull Image - ejecutar desde la imagen o usar Containers → Run Container
- mapear el host
8088al contenedor80 - pulsar Open in Browser en la fila Ports del contenedor o entrar a
localhost:8088 - explorar CPU, memoria, disco, logs, archivos, terminal y la función Edit & Recreate del contenedor en ejecución
Diferencias frente a Docker Desktop y OrbStack
- Davit usa el motor de Apple
- cada contenedor se ejecuta en su propia VM ligera basada en Apple Virtualization framework
- tiene una dirección IP por contenedor
- está optimizado para Apple silicon
- Usa imágenes OCI
- puede hacer pull desde Docker Hub, ghcr.io, quay.io o cualquier registro
- también puede usar imágenes privadas con inicio de sesión en el registro
- Enlaza las bibliotecas cliente de Apple y se comunica directamente por XPC
- sin socket shim
- sin acuerdo de licencia
- sin cuenta
- El bundle de la app pesa 17 MB
- sin Electron
- sin imagen de VM incluida en el bundle
- sin servicio de fondo propio
- Su enfoque es distinto al de OrbStack
- OrbStack es una app comercial con su propia capa de virtualización compatible con Docker
- Davit es una UI gratuita y de código abierto sobre la plataforma container de Apple
- Davit no deja componentes residentes cuando no hay contenedores, usa IP por contenedor y redes bridge, y ofrece un aislamiento más fuerte entre contenedores
- OrbStack es mejor en compatibilidad drop-in con la CLI/API
dockery en soporte más amplio de herramientas - ambos ejecutan imágenes OCI estándar
Memoria, DNS y seguridad
- Su arquitectura de memoria evita mantener una VM Linux de varios GiB siempre encendida
- Docker Desktop mantiene una gran VM aunque no haya contenedores ejecutándose, pero la plataforma de Apple inicia una VM ligera por contenedor y la apaga cuando el contenedor se detiene
- Cuando no hay contenedores ejecutándose, los servicios de fondo de la plataforma quedan en reposo con unos 25 MB
- Davit en sí es una app nativa en SwiftUI, no Electron, y su uso de memoria corresponde en gran parte a memoria compartida de frameworks de macOS
- Para acceder desde la Mac por nombre de contenedor, puede usarse el dominio DNS local de la plataforma
- ejecutar una vez
sudo container system dns create testo usar un dominio propio - configurarlo como dominio predeterminado en Settings → Platform → DNS
- el contenedor
webresponderá comoweb.testdesde la Mac
- ejecutar una vez
- Todos los contenedores tienen su propia IP, y la IP se muestra en la sección Network
- Si se ejecuta Avahi dentro del guest, se puede transmitir un alias mDNS
.local - Cada release está firmado y notarizado con Apple Developer ID y se abre sin advertencias de Gatekeeper
- La app es de código abierto bajo licencia MIT, y puede leerse o compilarse directamente
- Davit solo se comunica con el daemon container local y con GitHub para comprobar actualizaciones
1 comentarios
Opiniones de Hacker News
Mi mejor estrategia en la era de la IA es no hacer nada
Se me ocurrió una idea parecida y pensé que podría hacerla con vibe coding, pero supuse que alguien más se interesaría más y la haría primero, y efectivamente así fue
La app se ve bien y tengo ganas de probarla
Como idea gratis, me gustaría encerrar a los agentes dentro de una máquina virtual y, desde fuera de la máquina virtual, enviar instrucciones con un harness para controlar a los agentes instalados adentro. Idealmente, no debería haber nada como Codex/Claude instalado en el host
Una dirección todavía más interesante sería crear varias cuentas de usuario dentro de la máquina virtual y limitar el sistema de archivos y las políticas de red por usuario. Así, un agente de desarrollo, un agente de QA, etc., tendrían cada uno una vista distinta del trabajo, y eso podría convertirse en una potente capa base para automatización adicional
Obviamente, debería ser posible “conectar” a la máquina virtual varios recursos como DB, colas y volúmenes externos para que el agente los use según sus permisos
https://GitHub.com/instavm/coderunner
Por transparencia, he enviado algunos PR ahí
https://github.com/webcoyote/sandvault
Desde finales de mis 20 o principios de mis 30 dejé casi por completo de programar en mi tiempo libre, porque se me fue toda la diversión que obtenía de programar en sí. En realidad, tampoco es que me encantara tanto; simplemente era muy malo para juzgar si valía la pena dedicarle tiempo o no
Aunque se me ocurriera un programa o script que estaría bueno tener, la mayoría de las veces, como en la tabla de xkcd sobre el tiempo de amortización de crear un programa para ahorrar unos minutos por semana, “la recompensa no justificaba el esfuerzo”. O era algo que no necesitaba realmente, pero que sería interesante o divertido tener; aun así, hacerlo de verdad requería muchísimas horas, así que no valía nada la pena
Si alguien hacía y publicaba lo que yo quería, genial; si no, ni modo
El gran cambio que trajeron los LLM es que ahora se pueden sacar cosas como pequeños scripts en minutos, por unos centavos o unos pocos dólares. Estoy volviendo a sacar ideas extremadamente de nicho que tenía guardadas desde hace mucho
Cosas que antes habrían requerido varios fines de semana solo para revisar APIs desconocidas y documentación ahora se pueden hacer en menos de 30 minutos o, al menos, puedo decidir en minutos en vez de horas si algo no funciona o es demasiado molesto como para descartarlo para siempre
Me gusta correr modelos abiertos medianos y grandes, pero no puedo confiar en que esos modelos no se salgan de control, así que lo hice, y planeo compartirlo pronto
Me parece que podría ser tan simple como instalar Claude en una máquina virtual y conectarse con una terminal SSH. Si hace falta GUI, con la extensión Remote SSH de VSCode también se puede obtener algo como una UI de explorador de archivos
Probablemente también se pueda instalar dentro de la máquina virtual Claude para VSCode u otras extensiones de chat
Más que este proyecto en sí, lo que más me llamó la atención es que se aceleró visiblemente un fenómeno que muchos podían prever, sobre todo desde hace aproximadamente un año. Ahora la gente puede crear su propia versión de la misma idea mucho más rápido que antes
Busqué unos 10 minutos y encontré varios proyectos Swift parecidos, la mayoría creados hace apenas unas semanas o meses
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
Había más si incluía los que tienen menos estrellas en GitHub, los que son solo de línea de comandos y los que no están hechos en Swift, pero la idea es esta
La gente cada vez podrá crear más su propia versión del software que quiere. Cuando eso ocurra, el valor del software hecho por otros disminuirá. Se viene la era del software hiperpersonalizado
Antes se podía estimar el esfuerzo invertido en cosas así por el acabado del sitio web o algunos elementos superficiales. Ahora esas partes se resuelven fácilmente con LLM
De forma similar, cuando el polvo se asentó, uno de los mayores impactos que dejó Kickstarter fue la evolución y refinamiento agresivos de los videos de pitch de 3 minutos
No sé si eso se traduce en una implementación y una hoja de ruta realmente pensadas a fondo, o en verdadero impulso
Parece una app realmente sólida. Pesa 17 MB y me gusta que use directamente la biblioteca ContainerAPIClient
28 commits en 3 días, 5,015 líneas de Swift, y todos los commits tienen “Co-Authored-By: Claude Fable 5”
También está bueno que esté firmada y notarizada. La instalé y en el primer arranque descargó los componentes necesarios de la plataforma de contenedores
Como sugerencia, estaría bueno agregar al sitio un tutorial inicial que recomiende una imagen para probar, y muestre con capturas o un video sin audio cómo ejecutar esa imagen y qué se puede hacer
El diálogo para crear imágenes sugiere “nginx:latest”, pero no es tan bueno como demo inicial
nginx:latest muestra que la plomería funciona, pero no muestra bien en qué se siente diferente Apple Containers frente a Docker Desktop u OrbStack
Un ejemplo con una app pequeña, volúmenes, mapeo de puertos y un ciclo simple de reconstrucción haría que el valor se viera mucho más fácil
¡Ja! Parece que hicimos lo mismo: https://container-ui.fly.dev/
Ahora siento que no debí haber quemado tantos tokens
Se ve limpio. Al final todos estamos construyendo lo mismo ><
He usado OrbStack con gusto durante casi 2 años
Está bien integrado, es rápido y tiene compatibilidad con comandos docker, así que para mí valía la pena pagarlo
Aun así, también probaré esto
El punto fuerte de OrbStack es que todos los contenedores corren dentro de una sola máquina virtual Linux, y hacen muchas optimizaciones a ambos lados del límite de la VM. Eso incluye el uso de archivos de imagen dispersos que ahorran bastante espacio en disco del lado de macOS
Si ejecutas más de 4 o 5 contenedores en macOS, las mejoras de rendimiento y de uso de recursos de OrbStack crecen rápidamente
Está muy bueno. Descargar el runtime y ejecutar nginx:latest funcionó perfectamente
Cuando haces scroll en GitHub y ves a Claude como colaborador, parece que se está volviendo una señal de que la app será buena. En el sentido de sentirse nativa y no ser Electron
Ojalá Apple agregue compatibilidad con la API de docker a Apple Containers
No hay cosas como reenvío de puertos ni volúmenes del host. En la práctica está enfocado en correr buildkit en Mac
Eso sí, está completamente integrado con docker CLI y buildx
https://github.com/cpuguy83/crucible
Me gustan las funciones y también que sea una pequeña app nativa en SwiftUI
Hace poco escribí un artículo [1] sobre usar contenedores de Apple para programación agéntica, y acabo de actualizarlo para mencionar Davit. Para proyectos personales, en las dos Macs que tengo en casa prefiero por mucho usar contenedores de Apple antes que Docker
[1] https://open.substack.com/pub/marklwatson/p/running-opencode...
¿Cómo se compara con OrbStack? ¿Apple Containers ofrece algo perceptible en la experiencia de desarrollo? Según mi uso, la implementación de OrbStack ya se siente rapidísima
Hace unos días publiqué una versión similar que hice, pero casi no tuvo respuesta
Para quien le interese, es una app de la barra de menús con soporte para contenedores, máquinas y registros
https://news.ycombinator.com/item?id=48789503
https://github.com/erdaltoprak/ContainerUtility