2 puntos por GN⁺ 2025-04-02 | 2 comentarios | Compartir por WhatsApp
  • El shell de Unix se ha usado durante más de 50 años y ha sido una potente herramienta de cómputo capaz de combinar operaciones complejas con comandos simples
    • Sin embargo, el stack de software moderno se ha vuelto mucho más complejo, y es difícil manejar todo ese trabajo con los shells tradicionales
    • Inspirado en Docker, make, PowerShell, Nix y otros, surge la necesidad de un shell moderno con soporte nativo para contenedores, secretos, endpoints de servicio, ejecución declarativa, caché y sandboxing
  • Dagger Shell es un frontend basado en sintaxis de bash para Dagger Engine, y puede usarse para diversas tareas de automatización como compilación, pruebas, despliegue y entornos temporales
  • Más que reemplazar al shell del sistema, es una herramienta complementaria que ayuda a construir flujos de trabajo complejos mediante combinaciones simples de módulos
    container |  
      from alpine |  
      with-exec apk add git |  
      terminal  
    
  • Con shell y código basta

    • En lugar de aprender un DSL extraño para manejar scripts complejos, se puede escribir en lenguajes de programación reales
    • Ofrece SDK para varios lenguajes como Go, Python, Typescript, Java y PHP
    • Las funciones escritas en esos lenguajes pueden ampliarse como nuevos primitivos de Dagger
  • Un shell conectado a la API

    • Dagger Shell funciona como cliente de la API de Dagger, con acceso a objetos tipados, documentación y un ecosistema de módulos reutilizables (Daggerverse)
    • Por ejemplo, se puede cargar y ejecutar un módulo de escaneo de seguridad de Trivy
  • Entorno sandbox por defecto

    • Todos los comandos se ejecutan por defecto dentro de un sandbox, y el acceso a archivos, secretos y servicios debe indicarse explícitamente. Es un poco más verboso, pero mejora la reproducibilidad y la seguridad
      container |  
        from alpine |  
        with-secret-variable POSTGRES_PASSWORD op://dev/db-password/credential |  
        with-directory /src ~/src/myapp |  
        with-service-binding db tcp://localhost:5432 |  
        terminal  
      
  • Compilación simple de contenedores

    • Se puede ejecutar de una sola vez la creación de un contenedor basado en Alpine, la inserción de un archivo de texto, la configuración del mensaje de salida y el push a un registro temporal
    • Todo esto puede hacerse sin cambiar de contexto entre escribir el Dockerfile, ejecutar el build y hacer el push
      # Build a wolfi linux container with curl, then test connection to stable and dev docs  
      github.com/dagger/dagger/modules/wolfi | container --packages=curl |  
        with-service-binding docs-stable $(github.com/dagger/dagger/docs@v0.17.1 | server) |  
        with-service-binding docs-dev $(github.com/dagger/dagger/docs@main | server) |  
        with-exec curl http://docs-stable |  
        with-exec curl http://docs-dev  
      
  • Configuración de entornos de prueba

    • También se puede resolver fácilmente la configuración de entornos de prueba, un problema frecuente en CI
    • Gracias al soporte nativo de service binding, es posible conectar varias instancias activas y probarlas
      repo=$(git https://github.com/dagger/hello-dagger | head | tree)  
      
      env=$(container | from node:23 | with-directory /app $repo | with-workdir /app)  
      
      build=$($env | with-exec npm install | with-exec npm run build | directory ./dist)  
      
      container | from nginx | with-directory /usr/share/nginx/html $build | terminal --cmd=/bin/bash  
      
  • Compilaciones multietapa (Multi-Stage Builds)

    • Es posible implementar pipelines de build complejos con una sintaxis clara y modular
    • Al definir cada etapa como una variable, se facilita la depuración y la reutilización
      container |  
        from golang:latest |  
        with-directory /src $(git https://github.com/dagger/dagger | head | tree) |  
        with-workdir /src |  
        with-exec go build ./cmd/dagger |  
        file ./dagger |  
        export ./dagger  
      

2 comentarios

 
winterjung 2025-04-02

Como referencia, el enlace cambió a la dirección https://dagger.io/blog/…

 
GN⁺ 2025-04-02
Comentarios de Hacker News
  • Últimamente siento que cada vez es más difícil entender para qué sirve realmente Dagger

    • Al principio esperaba que pudiera reemplazar a Jenkins
    • Ofrecía una alternativa para ejecutar y depurar pipelines de CI en local
    • Estaba escrito en Golang y permitía traer lo que uno necesitara
    • Ahora su dirección se siente dispersa: intenta reemplazar a Docker, convertirse en un nuevo shell y, de forma extraña, parece querer ser Langchain
    • Los nuevos argumentos de CLI no son mejores que los scripts de shell existentes o un Jenkinsfile
    • Es una pena que el proyecto parezca haberse alejado de su objetivo original
  • A menudo combino Dockerfile y scripts de shell para construir distintas imágenes

    • Deben ejecutarse de forma diferente según el entorno: máquina de desarrollo, robots, CI, etc.
    • Parece que esta herramienta podría resolver esa complejidad
    • Me gusta que se pueda hacer referencia a la salida del build sin tener que lidiar con tags
  • No me había dado cuenta de que Dagger está intentando reemplazar a Docker

    • Es una visión grande
    • Es un intento ambicioso, pero no me lleva a creer que pueda reemplazar a las herramientas existentes de inmediato
    • Es una lástima que hayan elegido compatibilidad con Bash
    • Creo que ya es momento de dejar atrás la sintaxis y los problemas de Bash
  • Ya existe una web UI que permite escribir scripts de Dagger Shell en formato de notebook

    • Muy interesante, recomiendo echarle un vistazo
  • La descripción en la página principal de Dagger me dejó con dudas

    • "Motor de composición multiplataforma"
    • Construye entornos de software potentes con componentes modulares y funciones simples
    • Ideal para builds complejos y flujos de trabajo de IA
    • Es demasiado general como para ser útil
    • Todo es un motor de composición. Javascript también lo es, y macOS también
  • Autopromoción relacionada

  • ¿El objetivo es hacer trabajo de desarrollo dentro de contenedores?

    • Me recuerda a Devbox de Jetify y Flox.dev
  • En concreto, ¿qué se puede hacer con esta herramienta?

    • ¿En qué tipo de actividades ayuda?
    • ¿Qué programas puede reemplazar?
    • ¿Qué hace un "sistema operativo DevOps"?
  • Mi impresión inicial es que parece un punto intermedio entre Dockerfile y definir/configurar software con código real

    • Como alguien que usa mucho Nix, no me resulta atractivo
  • ¿Dagger cambió la dirección del producto?

    • Recuerdo que su principal propuesta de venta era ser un servicio independiente de pipelines-as-code
    • Ahora parece que quiere reconstruir Docker