- Unix shell 50 yılı aşkın süredir kullanılıyor ve basit komutlarla karmaşık işlemleri birleştirebilen güçlü bir bilişim aracıydı
- Ancak modern yazılım yığını çok daha karmaşık hale geldi ve mevcut shell ile tüm bu işleri ele almak zorlaştı
- Docker, make, powershell, nix gibi araçlardan ilhamla; konteynerler, secret'lar, servis endpoint'leri, deklaratif yürütme, cache ve sandboxing gibi özellikleri yerleşik olarak destekleyen modern bir shell'e ihtiyaç doğdu
- Dagger Shell, Dagger Engine için bash sözdizimi tabanlı bir frontend olup; build, test, deployment, geçici ortamlar gibi çeşitli otomasyon işlerinde kullanılabiliyor
- Sistem shell'inin yerini almaktan ziyade onu tamamlayan bir araç olarak, karmaşık iş akışlarını basit modül kombinasyonlarıyla kurmaya yardımcı oluyor
container | from alpine | with-exec apk add git | terminal -
Shell ve kod yeterli
- Karmaşık script'leri işlerken garip DSL'ler öğrenmek yerine, gerçek programlama dilleriyle yazmak mümkün
- Go, Python, Typescript, Java, PHP gibi çeşitli diller için SDK sağlanıyor
- Dille yazılmış fonksiyonlar Dagger'ın yeni primitive'lerine genişletilebiliyor
-
API'ye bağlı shell
- Dagger Shell, bir Dagger API istemcisi olarak çalışır; type'lı nesnelere, dokümantasyona ve yeniden kullanılabilir modül ekosistemine (Daggerverse) erişim sağlar
- Örneğin Trivy güvenlik tarama modülü yüklenip çalıştırılabilir
-
Varsayılan sandbox ortamı
- Tüm komutlar varsayılan olarak sandbox içinde çalışır; dosya, secret, servis gibi kaynaklara erişim açıkça belirtilmelidir. Biraz daha ayrıntılı olsa da, tekrarlanabilirlik ve güvenlik artar
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
- Tüm komutlar varsayılan olarak sandbox içinde çalışır; dosya, secret, servis gibi kaynaklara erişim açıkça belirtilmelidir. Biraz daha ayrıntılı olsa da, tekrarlanabilirlik ve güvenlik artar
-
Basit konteyner build'i
- Alpine tabanlı bir konteyner oluşturma, metin dosyası ekleme, mesaj çıktısını ayarlama ve geçici bir registry'ye push etme işlemleri tek seferde yapılabiliyor
- Dockerfile yazma, build komutu ve push arasında bağlam değiştirmeden ilerlemek mümkün
# 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
-
Test ortamı kurma
- CI'da sık görülen sorunlardan biri olan test ortamı kurulumu da kolayca yapılabiliyor
- Yerleşik servis binding desteğiyle birden fazla canlı instance bağlanıp test edilebiliyor
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
-
Çok aşamalı build'ler (Multi-Stage Builds)
- Açık ve modüler sözdizimiyle karmaşık build pipeline'ları kurulabiliyor
- Her aşamayı değişkenlerle açıkça tanımlamak, debug ve yeniden kullanım açısından kolaylık sağlar
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 yorum
Bilginize, bağlantı adresi
https://dagger.io/blog/…olarak değişti.Hacker News görüşleri
Bu aralar Dagger'ın gerçek kullanım amacını anlamak giderek zorlaşıyor gibi geliyor
Dockerfile ve shell script'leri birleştirerek çeşitli image'lar oluşturduğum çok oluyor
Dagger'ın Docker'ın yerini almaya çalıştığını gözden kaçırmışım
Dagger Shell script'lerini notebook formatında yazabileceğiniz bir web UI zaten yapılmış
Dagger'ın ana sayfasındaki açıklamayı görünce aklımda soru işaretleri oluştu
İlgili kişisel tanıtım
Amaç, container içinde geliştirme işi yapmak mı?
Açıkça söylemek gerekirse, bu araçla tam olarak ne yapılabiliyor?
İlk izlenimim, Dockerfile ile yazılımı gerçek kodla tanımlayıp yapılandırma arasında bir ara aşama olduğu yönünde
Dagger ürün yönünü mü değiştirdi?