- Le shell Unix est utilisé depuis plus de 50 ans et a constitué un puissant outil informatique capable de combiner des opérations complexes à partir de commandes simples
- Mais les piles logicielles modernes sont devenues bien plus complexes, et les shells existants ont du mal à couvrir tous ces usages
- Inspiré par Docker, make, powershell, nix et d’autres, il devient nécessaire de disposer d’un shell moderne prenant en charge nativement les conteneurs, les secrets, les endpoints de service, l’exécution déclarative, le cache et le sandboxing
- Dagger Shell est un frontend basé sur la syntaxe bash pour Dagger Engine, utilisable pour divers travaux d’automatisation comme le build, les tests, le déploiement ou les environnements temporaires
- Plutôt qu’un remplacement du shell système, c’est un outil complémentaire qui aide à composer des workflows complexes à partir de combinaisons simples de modules
container | from alpine | with-exec apk add git | terminal -
Le shell et le code suffisent
- Au lieu d’apprendre un DSL bizarre pour gérer des scripts complexes, il est possible d’écrire dans de vrais langages de programmation
- Des SDK sont fournis pour Go, Python, Typescript, Java, PHP et d’autres langages
- Les fonctions écrites dans ces langages peuvent être étendues en nouvelles primitives de Dagger
-
Un shell connecté à l’API
- Dagger Shell joue le rôle de client de l’API Dagger et permet d’accéder à des objets typés, à la documentation et à un écosystème de modules réutilisables (Daggerverse)
- Par exemple, il est possible de charger et d’exécuter le module de scan de sécurité Trivy
-
Un environnement sandboxé par défaut
- Toutes les commandes s’exécutent dans une sandbox par défaut, et l’accès aux fichiers, secrets, services, etc. doit être explicitement défini. C’est un peu plus verbeux, mais cela améliore la reproductibilité et la sécurité
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
- Toutes les commandes s’exécutent dans une sandbox par défaut, et l’accès aux fichiers, secrets, services, etc. doit être explicitement défini. C’est un peu plus verbeux, mais cela améliore la reproductibilité et la sécurité
-
Build simple de conteneur
- Il est possible d’exécuter en une seule fois la création d’un conteneur basé sur Alpine, l’insertion d’un fichier texte, la configuration d’un message de sortie et le push vers un registre temporaire
- Cela évite les changements de contexte entre l’écriture du Dockerfile, la commande de build et le 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
-
Configuration d’un environnement de test
- La mise en place de l’environnement de test, un problème fréquent en CI, peut aussi être simplifiée
- La prise en charge native des bindings de services permet de connecter plusieurs instances actives et d’exécuter des tests
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
-
Builds multi-étapes (Multi-Stage Builds)
- Une syntaxe claire et modulaire permet d’implémenter des pipelines de build complexes
- Chaque étape peut être explicitement définie dans une variable, ce qui facilite le débogage et la réutilisation
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 commentaires
Pour information, le lien a été modifié pour devenir https://dagger.io/blog/…
Avis sur Hacker News
J’ai de plus en plus de mal à cerner l’utilité réelle de Dagger ces derniers temps
J’assemble souvent des Dockerfiles et des scripts shell pour construire différentes images
J’avais raté le fait que Dagger essaie de remplacer Docker
Une interface web permettant d’écrire des scripts Dagger Shell au format notebook existe déjà
La description sur la page d’accueil de Dagger m’a laissé perplexe
Auto-promotion liée au sujet
Le but est-il de faire du développement à l’intérieur de conteneurs ?
Concrètement, que peut-on faire avec cet outil ?
Ma première impression est que c’est une étape intermédiaire entre un Dockerfile et le fait de définir et configurer un logiciel avec du vrai code
Dagger a-t-il changé d’orientation produit ?