- Unix-Shells werden seit mehr als 50 Jahren verwendet und waren leistungsstarke Computing-Werkzeuge, mit denen sich komplexe Abläufe aus einfachen Befehlen zusammensetzen lassen
- Die moderne Software-Stack ist jedoch deutlich komplexer geworden, und mit herkömmlichen Shells ist es schwierig, all diese Aufgaben abzudecken
- Inspiriert von Docker,
make, PowerShell, Nix und anderen wird eine moderne Shell benötigt, die Container, Secrets, Service-Endpunkte, deklarative Ausführung, Caching und Sandboxing nativ unterstützt
- Dagger Shell ist ein auf Bash-Syntax basierendes Frontend für die Dagger Engine und kann für verschiedene Automatisierungsaufgaben wie Build, Test, Deployment und temporäre Umgebungen genutzt werden
- Statt die System-Shell zu ersetzen, ist sie als ergänzendes Werkzeug gedacht, das hilft, komplexe Workflows aus einfachen Modulkombinationen zusammenzusetzen
container | from alpine | with-exec apk add git | terminal -
Mit Shell und Code allein reicht es aus
- Statt beim Umgang mit komplexen Skripten eine seltsame DSL zu lernen, kann man in echten Programmiersprachen schreiben
- SDKs für verschiedene Sprachen wie Go, Python, Typescript, Java und PHP werden bereitgestellt
- In einer Sprache geschriebene Funktionen lassen sich zu neuen Primitiven von Dagger erweitern
-
Eine mit der API verbundene Shell
- Dagger Shell fungiert als Dagger-API-Client und bietet Zugriff auf typisierte Objekte, Dokumentation und ein wiederverwendbares Modul-Ökosystem (Daggerverse)
- So lässt sich zum Beispiel das Sicherheits-Scanning-Modul Trivy laden und ausführen
-
Standardmäßig eine Sandbox-Umgebung
- Alle Befehle werden standardmäßig in einer Sandbox ausgeführt, und der Zugriff auf Dateien, Secrets, Services usw. muss explizit angegeben werden. Das ist etwas ausführlicher, erhöht aber Reproduzierbarkeit und Sicherheit
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
- Alle Befehle werden standardmäßig in einer Sandbox ausgeführt, und der Zugriff auf Dateien, Secrets, Services usw. muss explizit angegeben werden. Das ist etwas ausführlicher, erhöht aber Reproduzierbarkeit und Sicherheit
-
Einfaches Container-Building
- Ein auf Alpine basierender Container kann erzeugt, eine Textdatei eingefügt, eine Ausgabenachricht gesetzt und anschließend in eine temporäre Registry gepusht werden – alles in einem Durchlauf
- Das funktioniert ohne Kontextwechsel zwischen dem Schreiben eines Dockerfiles, Build-Befehlen und dem Push-Vorgang
# 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
-
Aufbau von Testumgebungen
- Auch der Aufbau von Testumgebungen, ein häufiges Problem in CI, lässt sich einfach handhaben
- Dank nativer Unterstützung für Service-Bindings können mehrere laufende Instanzen verbunden und getestet werden
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
-
Mehrstufige Builds (Multi-Stage Builds)
- Komplexe Build-Pipelines lassen sich mit klarer und modularer Syntax umsetzen
- Jede Phase wird explizit als Variable benannt, was Debugging und Wiederverwendung erleichtert
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 Kommentare
Zur Information: Der Link wurde in die Adresse https://dagger.io/blog/… geändert.
Hacker-News-Kommentare
In letzter Zeit wird es immer schwieriger zu verstehen, wofür Dagger eigentlich gedacht ist
Ich kombiniere oft Dockerfiles und Shell-Skripte, um verschiedene Images zu bauen
Mir war entgangen, dass Dagger Docker ersetzen will
Es gibt bereits eine Web-UI, mit der man Dagger-Shell-Skripte im Notebook-Format schreiben kann
Beim Lesen der Beschreibung auf der Dagger-Website kamen bei mir Fragen auf
Verwandte Eigenwerbung
Geht es darum, Entwicklungsarbeit innerhalb von Containern zu erledigen?
Ganz konkret: Was kann man mit diesem Tool tun?
Mein erster Eindruck ist, dass es zwischen Dockerfiles und dem Definieren bzw. Konfigurieren von Software mit echtem Code liegt
Hat Dagger seine Produktrichtung geändert?