14 puntos por GN⁺ 6 일 전 | 2 comentarios | Compartir por WhatsApp
  • 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 container de 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 container de 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 env de 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.yml y 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 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 permisos de administrador
  • Si hace falta, también puede agregar el CLI container al 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/hello en Images → Pull Image
    • ejecutar desde la imagen o usar Containers → Run Container
    • mapear el host 8088 al contenedor 80
    • 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 container de 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 docker y 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 test o usar un dominio propio
    • configurarlo como dominio por defecto en Settings → Platform → DNS
    • el contenedor web responderá como web.test desde la Mac
  • 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 container local y con la verificación de actualizaciones en GitHub

2 comentarios

 
galadbran 6 일 전

Me daba flojera administrarlo desde la línea de comandos, así que me alegra que haya salido ^^ Aunque últimamente uso principalmente Orbstack.

 
GN⁺ 6 일 전
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

    • Eso es exactamente posible con coderunner
      https://GitHub.com/instavm/coderunner
    • En vez de una máquina virtual, usa sandboxes y usuarios separados, pero sandvault sirve bien para este caso y también hace la instalación automática
      Por transparencia, he enviado algunos PR ahí
      https://github.com/webcoyote/sandvault
    • “El movimiento poderoso de la era de la IA: no hacer nada” ya era mi estrategia incluso antes de la IA
      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
    • Hice algo parecido de forma rápida como un frontend simple en navegador
      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
    • Yo también pensé en esto
      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

    • ¿Se puede decir que todos estos proyectos tienen por igual calidad de primer nivel? No puedo decir que lo sepa con certeza
      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
    • En iOS es distinto. Para subir algo a la App Store hay que pagar una membresía anual, o bien recompilar y reinstalar builds de cuenta personal cada 30 días aproximadamente
  • 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

    • El texto de AI-Maxing del sitio web lo delataba un poco. Eso no significa que no sea una app excelente
    • Buena sugerencia. Lo agregaré pronto
    • Creo que aquí ayudaría mucho un tutorial con un ejemplo un poco más realista
      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

    • Oh, hola. Acabo de ver que había una comparación con Orchard; ese soy yo
      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

    • Los contenedores nativos de macOS parecen levantar una máquina virtual Linux separada por cada contenedor
      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
    • Sospecho que el equipo de OrbStack pronto va a soportar contenedores nativos de macOS y montará sus funciones de gestión encima de eso
  • 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

    • Tampoco lo tengo claro. ¿Puedo usar esto en vez de Docker Desktop para ejecutar contenedores docker de forma “nativa” en mi Mac? ¿O es algo completamente separado de docker?
    • Esto está enfocado en builds, y funciona ejecutando buildkitd o dockerd dentro de contenedores de Apple containerization
      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