Dagger Shell - 컨테이너 시대를 위한 새로운 쉘

1 day ago 3

  • 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

Read Entire Article