2P by GN⁺ 2일전 | ★ favorite | 댓글 2개
  • 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  
      

참고로 링크가 https://dagger.io/blog/… 주소로 변경됐습니다

Hacker News 의견
  • 요즘 Dagger의 실제 용도를 파악하기가 점점 어려워지는 느낌임

    • 처음에는 Jenkins를 대체할 수 있을 것이라고 기대했음
    • CI 파이프라인을 로컬에서 실행하고 디버그할 수 있는 대안 제공
    • Golang으로 작성하고 필요한 것을 가져올 수 있었음
    • 지금은 방향이 산만해져 Docker를 대체하려고 하고, 새로운 셸이 되려 하며, 이상하게 Langchain이 되려는 것 같음
    • 새로운 CLI 인자가 기존의 셸 스크립트나 Jenkinsfile보다 나을 게 없음
    • 프로젝트가 원래의 목표에서 벗어난 것 같아 아쉬움
  • Dockerfile과 셸 스크립트를 조합하여 다양한 이미지를 구성하는 일이 많음

    • 개발자 머신, 로봇, CI 등 환경에 따라 다르게 실행해야 함
    • 이 도구가 그 복잡함을 해결할 수 있을 것 같음
    • 빌드의 출력을 참조할 수 있어 태그를 다루지 않아도 되는 점이 좋음
  • Dagger가 Docker를 대체하려 한다는 사실을 놓쳤음

    • 큰 비전임
    • 야심찬 시도지만, 지금 당장 기존 도구를 대체할 수 있을 것이라는 믿음으로 이어지기 어려움
    • Bash 호환성을 선택한 점이 아쉬움
    • Bash의 문법과 문제점에서 벗어나야 할 시점이라고 생각함
  • Dagger Shell 스크립트를 노트북 형식으로 작성할 수 있는 웹 UI가 이미 만들어져 있음

    • 매우 흥미로움, 확인해보길 추천함
  • Dagger의 홈페이지 설명을 보고 궁금증이 생김

    • "크로스 플랫폼 구성 엔진"
    • 모듈형 구성 요소와 간단한 함수로 강력한 소프트웨어 환경을 구축
    • 복잡한 빌드와 AI 워크플로우에 적합
    • 너무 일반적이라 쓸모없음
    • 모든 것이 구성 엔진임. Javascript도, macOS도 구성 엔진임
  • 관련된 자기 홍보

  • 컨테이너 내부에서 개발 작업을 하려는 목적인가?

    • Jetify의 Devbox와 Flox.dev가 떠오름
  • 명확히, 이 도구로 무엇을 할 수 있을까?

    • 어떤 활동에 도움이 되는가?
    • 어떤 프로그램을 대체할 수 있는가?
    • "DevOps 운영 체제"는 무엇을 하는가?
  • 초기 인상은 Dockerfile과 실제 코드로 소프트웨어를 정의하고 구성하는 것의 중간 단계 같음

    • Nix를 많이 사용하는 사람으로서 매력적이지 않음
  • Dagger가 제품 방향을 바꾼 것인가?

    • 독립적인 파이프라인-코드 서비스가 주요 판매 포인트였던 것으로 기억함
    • 이제 Docker를 재구성하려는 것 같음