1 puntos por GN⁺ 4 시간 전 | 1 comentarios | Compartir por WhatsApp
  • 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 container de 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.yml y 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 container al 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/hello en Images → Pull Image
    • ejecutar desde la imagen o usar Containers → Run Container
    • mapear el host 8088 al contenedor 80
    • 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 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 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 test o usar un dominio propio
    • configurarlo como dominio predeterminado en Settings → Platform → DNS
    • el contenedor web responderá como web.test desde la Mac
  • 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

 
GN⁺ 4 시간 전
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