Dagger Shell - コンテナ時代のための新しいシェル
(dagger.io)- Unixシェルは50年以上使われてきており、単純なコマンドで複雑な動作を組み合わせられる強力なコンピューティングツールだった
- しかし、現代のソフトウェアスタックははるかに複雑になっており、従来のシェルだけでこれらすべての作業を扱うのは難しい
- Docker、make、PowerShell、nixなどに着想を得て、コンテナ、シークレット、サービスエンドポイント、宣言的実行、キャッシュ、サンドボクシングなどを標準でサポートするモダンなシェルが必要になった
- Dagger Shell は、Dagger Engine向けのbash構文ベースのフロントエンドで、ビルド、テスト、デプロイ、一時環境など、さまざまな自動化作業に活用できる
- システムシェルを置き換えるのではなく補完するツールであり、複雑なワークフローをシンプルなモジュールの組み合わせで構成できるよう支援する
container | from alpine | with-exec apk add git | terminal -
シェルとコードだけで十分
- 複雑なスクリプトを処理する際、奇妙なDSLを学ぶ代わりに、実際のプログラミング言語で記述できる
- Go、Python、Typescript、Java、PHPなど、さまざまな言語向けSDKを提供
- 言語で書いた関数をDaggerの新しいプリミティブへ拡張できる
-
APIと接続されたシェル
- Dagger ShellはDagger APIクライアントとして機能し、型付きオブジェクト、ドキュメント、再利用可能なモジュールエコシステム(Daggerverse)にアクセスできる
- たとえば、Trivyセキュリティスキャンモジュールをロードして実行できる
-
デフォルトのサンドボックス環境
- すべてのコマンドはデフォルトでサンドボックス内で実行され、ファイル、シークレット、サービスなどへのアクセスは明示的に指定する必要がある。少し冗長にはなるが、再現性と安全性が高まる
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
- すべてのコマンドはデフォルトでサンドボックス内で実行され、ファイル、シークレット、サービスなどへのアクセスは明示的に指定する必要がある。少し冗長にはなるが、再現性と安全性が高まる
-
シンプルなコンテナビルド
- Alpineベースのコンテナ作成、テキストファイルの挿入、メッセージ出力の設定、一時レジストリへのプッシュまでを一度に実行できる
- Dockerfileの作成、ビルドコマンド、プッシュの間でコンテキストを切り替えることなく処理できる
# 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
-
テスト環境の構築
- CIで頻繁に発生する問題であるテスト環境の構築も簡単に処理できる
- ネイティブのサービスバインディング対応により、複数のライブインスタンスを接続してテストできる
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
-
マルチステージビルド(Multi-Stage Builds)
- 明確でモジュール化された構文により、複雑なビルドパイプラインを実装できる
- 各段階を変数として明示することで、デバッグや再利用がしやすい
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件のコメント
参考までに、リンクは https://dagger.io/blog/… に変更されました
Hacker Newsの意見
最近、Daggerの実際の用途がますます把握しづらくなっている気がする
Dockerfileとシェルスクリプトを組み合わせてさまざまなイメージを構成することが多い
DaggerがDockerを置き換えようとしていることを見落としていた
Dagger Shellスクリプトをノートブック形式で書けるWeb UIがすでに作られている
Daggerのホームページの説明を見て疑問が湧いた
関連する自己宣伝
コンテナ内部で開発作業をしたいという目的なのだろうか?
率直に言って、このツールで何ができるのだろうか?
第一印象では、Dockerfileと実際のコードでソフトウェアを定義・構成することの中間段階のように見える
Daggerは製品の方向性を変えたのだろうか?