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

> Clean Markdown view of GeekNews topic #20095. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=20095](https://news.hada.io/topic?id=20095)
- GeekNews Markdown: [https://news.hada.io/topic/20095.md](https://news.hada.io/topic/20095.md)
- Type: GN+
- Author: [xguru](https://news.hada.io/@xguru)
- Published: 2025-04-02T10:08:10+09:00
- Updated: 2025-04-02T10:08:10+09:00
- Original source: [dagger.io](https://dagger.io/blog/dagger-shell)
- Points: 2
- Comments: 2

## Topic Body

- Unix 쉘은 50년 이상 사용되어 왔으며, 단순한 명령어로 복잡한 동작을 조합할 수 있는 강력한 컴퓨팅 도구였음  
  - 그러나 현대 소프트웨어 스택은 훨씬 복잡해졌고, 기존 쉘로는 이 모든 작업을 다루기 어려움  
  - Docker, make, powershell, nix 등에서 영감을 받아, 컨테이너, 시크릿, 서비스 엔드포인트, 선언형 실행, 캐시 및 샌드박싱 등을 기본 지원하는 현대적인 쉘이 필요해짐  
- **Dagger Shell**은 Dagger Engine을 위한 bash 문법 기반 프론트엔드로, 빌드, 테스트, 배포, 임시 환경 등 다양한 자동화 작업에 활용 가능  
- 시스템 쉘을 대체하기보다는 보완하는 도구로, 복잡한 워크플로우를 간단한 모듈 조합으로 구성할 수 있도록 도와줌  
  ```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 보안 스캐닝 모듈을 로드하고 실행 가능  
- # 기본 샌드박스 환경  
  - 모든 명령은 기본적으로 샌드박스에서 실행되며, 파일, 시크릿, 서비스 등의 접근은 명시적으로 지정해야 함. 약간 더 장황하지만, 반복 가능성과 안전성이 높아짐  
    ```bash  
    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 작성과 빌드 명령, 푸시 사이의 컨텍스트 전환 없이 처리 가능  
    ```bash  
    # 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에서 자주 발생하는 문제인 테스트 환경 구성도 간단하게 처리 가능  
  - 네이티브 서비스 바인딩 지원으로 여러 라이브 인스턴스를 연결하고 테스트 가능  
    ```bash  
    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  
    ```

## Comments



### Comment 36645

- Author: winterjung
- Created: 2025-04-02T11:16:07+09:00
- Points: 1

참고로 링크가 https://dagger.io/blog/a-shell-for-the-container-age-introducing-dagger-shell 주소로 변경됐습니다

### Comment 36641

- Author: neo
- Created: 2025-04-02T10:08:10+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=43486881) 
* 요즘 Dagger의 실제 용도를 파악하기가 점점 어려워지는 느낌임
  - 처음에는 Jenkins를 대체할 수 있을 것이라고 기대했음
  - CI 파이프라인을 로컬에서 실행하고 디버그할 수 있는 대안 제공
  - Golang으로 작성하고 필요한 것을 가져올 수 있었음
  - 지금은 방향이 산만해져 Docker를 대체하려고 하고, 새로운 셸이 되려 하며, 이상하게 Langchain이 되려는 것 같음
  - 새로운 CLI 인자가 기존의 셸 스크립트나 Jenkinsfile보다 나을 게 없음
  - 프로젝트가 원래의 목표에서 벗어난 것 같아 아쉬움

* Dockerfile과 셸 스크립트를 조합하여 다양한 이미지를 구성하는 일이 많음
  - 개발자 머신, 로봇, CI 등 환경에 따라 다르게 실행해야 함
  - 이 도구가 그 복잡함을 해결할 수 있을 것 같음
  - 빌드의 출력을 참조할 수 있어 태그를 다루지 않아도 되는 점이 좋음

* Dagger가 Docker를 대체하려 한다는 사실을 놓쳤음
  - 큰 비전임
  - 야심찬 시도지만, 지금 당장 기존 도구를 대체할 수 있을 것이라는 믿음으로 이어지기 어려움
  - Bash 호환성을 선택한 점이 아쉬움
  - Bash의 문법과 문제점에서 벗어나야 할 시점이라고 생각함

* Dagger Shell 스크립트를 노트북 형식으로 작성할 수 있는 웹 UI가 이미 만들어져 있음
  - 매우 흥미로움, 확인해보길 추천함

* Dagger의 홈페이지 설명을 보고 궁금증이 생김
  - "크로스 플랫폼 구성 엔진"
  - 모듈형 구성 요소와 간단한 함수로 강력한 소프트웨어 환경을 구축
  - 복잡한 빌드와 AI 워크플로우에 적합
  - 너무 일반적이라 쓸모없음
  - 모든 것이 구성 엔진임. Javascript도, macOS도 구성 엔진임

* 관련된 자기 홍보
  - Docker 셸 컨테이너: https://github.com/jrz/container-shell

* 컨테이너 내부에서 개발 작업을 하려는 목적인가?
  - Jetify의 Devbox와 Flox.dev가 떠오름

* 명확히, 이 도구로 무엇을 할 수 있을까?
  - 어떤 활동에 도움이 되는가?
  - 어떤 프로그램을 대체할 수 있는가?
  - "DevOps 운영 체제"는 무엇을 하는가?

* 초기 인상은 Dockerfile과 실제 코드로 소프트웨어를 정의하고 구성하는 것의 중간 단계 같음
  - Nix를 많이 사용하는 사람으로서 매력적이지 않음

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