Dagger Shell - Shell mới cho thời đại container
(dagger.io)- Unix shell đã được sử dụng hơn 50 năm và là một công cụ điện toán mạnh mẽ, có thể kết hợp các thao tác phức tạp bằng những lệnh đơn giản
- Tuy nhiên, stack phần mềm hiện đại đã trở nên phức tạp hơn rất nhiều, và shell truyền thống khó có thể xử lý hết mọi tác vụ này
- Lấy cảm hứng từ Docker, make, powershell, nix..., nhu cầu về một shell hiện đại đã xuất hiện: hỗ trợ sẵn container, secret, service endpoint, thực thi khai báo, cache và sandboxing
- Dagger Shell là frontend dựa trên cú pháp bash dành cho Dagger Engine, có thể dùng cho nhiều tác vụ tự động hóa như build, test, triển khai và môi trường tạm thời
- Đây là công cụ bổ trợ chứ không nhằm thay thế system shell, giúp xây dựng các workflow phức tạp bằng cách kết hợp những module đơn giản
container | from alpine | with-exec apk add git | terminal -
Chỉ cần shell và code là đủ
- Khi xử lý script phức tạp, bạn có thể viết bằng ngôn ngữ lập trình thực thụ thay vì phải học một DSL kỳ quặc
- Cung cấp SDK cho nhiều ngôn ngữ như Go, Python, Typescript, Java, PHP
- Có thể mở rộng các hàm viết bằng ngôn ngữ thành primitive mới của Dagger
-
Shell được kết nối với API
- Dagger Shell đóng vai trò là client Dagger API, cho phép truy cập vào các đối tượng có kiểu, tài liệu và hệ sinh thái module tái sử dụng (Daggerverse)
- Ví dụ, có thể tải và chạy module quét bảo mật Trivy
-
Môi trường sandbox mặc định
- Mọi lệnh đều được chạy trong sandbox theo mặc định; quyền truy cập tới file, secret, service... phải được chỉ định rõ ràng. Dù dài dòng hơn một chút, cách này giúp tăng tính tái lập và độ an toàn
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
- Mọi lệnh đều được chạy trong sandbox theo mặc định; quyền truy cập tới file, secret, service... phải được chỉ định rõ ràng. Dù dài dòng hơn một chút, cách này giúp tăng tính tái lập và độ an toàn
-
Build container đơn giản
- Có thể thực hiện liền mạch từ việc tạo container dựa trên Alpine, chèn file văn bản, cấu hình thông điệp đầu ra cho đến push lên registry tạm thời
- Không cần chuyển đổi ngữ cảnh giữa việc viết Dockerfile, chạy lệnh build rồi 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
-
Thiết lập môi trường test
- Việc cấu hình môi trường test, vốn là vấn đề thường gặp trong CI, cũng có thể được xử lý đơn giản
- Nhờ hỗ trợ native service binding, có thể kết nối nhiều instance đang chạy và kiểm thử chúng
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
-
Build nhiều giai đoạn (Multi-Stage Builds)
- Có thể triển khai pipeline build phức tạp với cú pháp rõ ràng và có tính module hóa
- Mỗi giai đoạn được khai báo bằng biến nên dễ debug và tái sử dụng
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 bình luận
Tham khảo thêm, liên kết đã được đổi thành địa chỉ https://dagger.io/blog/…
Ý kiến trên Hacker News
Gần đây ngày càng khó hiểu được Dagger thực sự dùng để làm gì
Tôi thường kết hợp Dockerfile và shell script để cấu hình nhiều image khác nhau
Tôi đã không nhận ra Dagger đang cố thay thế Docker
Đã có sẵn một web UI cho phép viết script Dagger Shell theo dạng notebook
Sau khi đọc phần mô tả trên trang chủ của Dagger, tôi thấy băn khoăn
Tự quảng bá có liên quan
Có phải mục đích là làm công việc phát triển bên trong container?
Rõ ràng hơn thì có thể làm gì với công cụ này?
Ấn tượng ban đầu là nó giống như một bước trung gian giữa Dockerfile và việc định nghĩa, cấu hình phần mềm bằng mã nguồn thực thụ
Dagger đã đổi hướng sản phẩm sao?