- 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
- 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
-
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
Como referencia, el enlace cambió a la dirección https://dagger.io/blog/…
Comentarios de Hacker News
Últimamente siento que cada vez es más difícil entender para qué sirve realmente Dagger
A menudo combino Dockerfile y scripts de shell para construir distintas imágenes
No me había dado cuenta de que Dagger está intentando reemplazar a Docker
Ya existe una web UI que permite escribir scripts de Dagger Shell en formato de notebook
La descripción en la página principal de Dagger me dejó con dudas
Autopromoción relacionada
¿El objetivo es hacer trabajo de desarrollo dentro de contenedores?
En concreto, ¿qué se puede hacer con esta herramienta?
Mi impresión inicial es que parece un punto intermedio entre Dockerfile y definir/configurar software con código real
¿Dagger cambió la dirección del producto?