- Es una app nativa de macOS para ejecutar y administrar contenedores Linux con la plataforma de contenedores de Apple en Macs con Apple silicon, 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 el CLI, sin Electron, webviews ni agente de fondo propio - Permite hacer todo desde una sola app: iniciar y detener contenedores, transmitir logs, abrir terminal, explorar archivos, compilar Dockerfiles e importar Compose
- Se ofrece gratis como app open source con 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 en ejecución el servicio de fondo de la plataforma queda inactivo con alrededor de 25 MB
Objetivo de Davit y entorno de ejecución
- Davit es una app de macOS completamente nativa para la plataforma
containerde Apple - Ejecuta contenedores Linux en Apple silicon y no requiere Docker Desktop
- Es open source gratuito y se distribuye con licencia MIT
- La app está firmada y notarizada con Apple Developer ID
- El requisito es una Mac con Apple silicon ejecutando macOS 15 o superior
- Se puede instalar 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 open source container de Apple
- Esta es la misma ruta de comunicación que usa el CLI
container - No usa Electron, webviews ni agente de fondo propio
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áficas de estado en tiempo real
- inspección de configuración en bruto
- En los contenedores en ejecución se puede abrir una terminal directamente mediante APIs nativas
- se puede abrir un shell interactivo en Terminal o iTerm
- no hace falta usar el CLI
Edición de contenedores inmutables y acceso a archivos
- Como los contenedores son inmutables, Davit permite recrearlos con una nueva configuración precargada basada en la configuración existente
- La nueva configuración del contenedor conserva la configuración previa, excepto el entrypoint y las variables
envde la imagen - Está pensado para un flujo rápido de cambio de puertos, variables de entorno, montajes y recursos
- Se puede explorar el sistema de archivos de un contenedor en ejecución desde la app
- navegar entre carpetas
- descargar archivos a la Mac
- subir archivos
- eliminar archivos
- Las operaciones de archivos se realizan con APIs nativas y no requieren el comando
docker cp
Importación de Compose y compilación de Dockerfile
- Davit puede abrir
docker-compose.ymly mostrar antes los recursos que se crearán- servicios en orden de dependencias
- volúmenes
- redes
- comando CLI equivalente por servicio
- advertencias sobre elementos no compatibles
- Como la plataforma de Apple no tiene compose nativo, Davit orquesta el stack por su cuenta
- La importación de Compose cubre un subconjunto compatible
- compatible con: image, ports, environment, named/bind volumes, networks, resource limits, command, user, working_dir
- ejemplos que generan advertencia:
restart:,healthcheck:,build:
- La compilación de Dockerfile está disponible en Images → Build Image
- se eligen la carpeta de contexto y el Dockerfile
- se configuran etiquetas y build args
- Davit arranca directamente el builder de Apple basado en BuildKit, y lo inicia si hace falta
- También hay limitaciones actuales de la plataforma
- se rechazan Dockerfiles de más de 16KiB
- esto está vinculado al bug upstream apple/container bug
- el contexto de build no puede estar dentro de
/tmp
Imágenes, volúmenes, redes y registros
- Davit admite operaciones relacionadas con imágenes
- pull con progreso visible
- ejecutar contenedor desde una imagen
- etiquetar
- prune
- También ofrece operaciones con volúmenes y redes
- crear volúmenes con tamaño definido
- crear subredes personalizadas
- verificar qué elementos están en uso antes de eliminarlos
- El inicio de sesión en registros se maneja en Settings → Registries
- Docker Hub
- ghcr.io
- quay.io
- cualquier registro OCI
- Las credenciales se validan contra el registro antes de guardarse
- Las credenciales validadas se almacenan en el llavero de inicio de sesión de macOS y se comparten con el CLI
container - Docker Hub exige 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 por defecto para contenedores nuevos
- registros
- DNS
- recursos del builder
- La configuración se valida con el cargador de configuración de la propia plataforma y se guarda como un override TOML limpio
- Si la plataforma
containerde 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 permisos de administrador
- Si hace falta, también puede agregar el CLI
containeral shell
Implementación de la app y flujo para empezar a usarla
- Davit está implementada por completo en 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 las gráficas en tiempo real
- Un flujo de inicio de ejemplo sería el siguiente
- instalar desde Releases o con Homebrew
- al primer arranque, si la plataforma no está presente, 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 - hacer clic en Open in Browser en la fila de 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 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 mediante login al 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 imágenes de VM incluidas 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 open source y gratuita sobre la plataforma
containerde Apple - Davit no deja procesos residentes cuando no hay contenedores, usa IP por contenedor y redes bridge, y ofrece mayor aislamiento entre contenedores
- OrbStack es mejor en compatibilidad drop-in con 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 siempre encendida una VM Linux de varios GiB
- Docker Desktop mantiene una gran VM incluso cuando no se están ejecutando contenedores, pero la plataforma de Apple arranca una VM ligera por contenedor y la apaga cuando el contenedor se detiene
- Cuando no hay contenedores en ejecución, el servicio de fondo de la plataforma queda inactivo con alrededor de 25 MB
- Davit en sí es una app nativa en SwiftUI, no Electron, y su uso de memoria consiste en gran parte en memoria compartida de frameworks de macOS
- Para acceder desde la Mac usando nombres de contenedor, se puede usar el dominio DNS local de la plataforma
- ejecutar una vez
sudo container system dns create testo usar un dominio propio - configurarlo como dominio por defecto en Settings → Platform → DNS
- el contenedor
webresponderá comoweb.testdesde la Mac
- ejecutar una vez
- Todos los contenedores tienen su propia IP, que se muestra en la sección Network
- Si se ejecuta Avahi dentro del guest, se pueden anunciar alias mDNS
.local - Cada release está firmado y notarizado con Apple Developer ID, por lo que se abre sin advertencias de Gatekeeper
- La app es open source con licencia MIT, y se puede leer o compilar directamente
- Davit solo se comunica con el daemon
containerlocal y con la verificación de actualizaciones en GitHub
2 comentarios
Me daba flojera administrarlo desde la línea de comandos, así que me alegra que haya salido ^^ Aunque últimamente uso principalmente Orbstack.
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