15P by neo 4달전 | favorite | 댓글 7개

#!이란 무엇인가?

  • #! (shebang이라고 발음함)은 유닉스에서 주로 파이썬이나 배시 같은 스크립팅 언어를 위해 사용되는 관례
  • 이를 이용하여 크로스플랫폼 및 여러 리눅스 배포본에 애플리케이션을 배포하는 방식을 단일 파일로 패키징하는 데에 사용한 사례 소개
  • 예제 Dockerfile은 백엔드, 데이터베이스, UI를 모두 포함하는 전체 스택 서버를 단일 파일로 구성함
  • Cosmopolitan Libc와 비슷하지만 애플리케이션 패키징을 위한 것임

왜 사용하는가?

  • 왜 안 사용하겠는가?

안전한가?

  • 아마도 아닐 것임.

사용해야 하나?

  • 원한다면 사용할 수 있음.

성능이 좋은가?

  • 가능성이 있음.

유지보수가 가능한가?

  • 아니오.

작동하는가?

  • 예.

어떻게 실행하는가?

  • 다음 명령어를 통해 실행 가능: chmod +x ./Dockerfile ./Dockerfile
  • 그 후 http://127.0.0.1:8080 주소로 접속.

GN⁺의 의견

  • 이 기사는 #! (shebang)을 이용하여 단일 Dockerfile로 전체 스택 서버를 패키징하는 독특한 방법을 소개함.
  • 기술적 호기심을 자극하고, 전통적인 애플리케이션 배포 방식에 대한 새로운 접근을 제시함.
  • 이 방식은 유지보수와 안정성 측면에서는 권장되지 않지만, 실험적이고 혁신적인 프로젝트에 관심이 있는 개발자들에게 흥미로운 대안이 될 수 있음.

<<EOF같은 heredoc을 쓰려면 Dockerfile 상단에 # syntax = docker/dockerfile:1.4.0 가 필요합니다. 놀랍게도 syntax도 docker registry에서 받아옵니다.

와... 올해 최대 정신적 충격입니다ㅋㅋㅋㅋㅋㅋㅋㅋㅌ

재밌는 방법이네요

ㅋㅋㅋ.. 참신하네요 진짜

와.. 이거 참신하네요. 마치 철근과 콘크리트의 조합을 발견한..건 좀 오바이긴 하지만 좋습니다.
#! 쉬뱅이 때마침 Dockerfile에서는 #주석문자인 바람에 이런식의 꼼수가 먹힌다니..
앞으론 build-run-test.sh 따위의 별도 파일 대신 Dockerfile에 넣어야겠네요.

Hacker News 의견
  • nix-shell shebang 사용 예시

    • nix-shell shebang을 사용하여, 필요한 모든 의존성을 포함한 실행 가능한 스크립트를 만드는 방법을 설명함.
    • 이미지를 50% 축소하는 파이썬 스크립트 예시 제공.
    • 스크립트에 실행 권한을 부여하면(chmod +x), 지정된 의존성을 가진 실행 파일이 됨.
  • /usr/bin/env-S / --split-string 옵션

    • GNU Coreutils 8.30부터 사용 가능한 -S 옵션에 대한 설명.
    • 이 옵션은 표준이 아닌 동작에 의존하며, 모든 텍스트를 실행 파일의 인수로 처리하는 OS에서만 작동함.
    • 대부분의 현대 GNU/Linux, BSDs, macOS에서는 이 비표준 동작이 작동함.
  • Docker와 아키텍처 호환성

    • Docker가 실제로는 리눅스 외의 다른 플랫폼에서는 리눅스 VM이 필요하다고 지적함.
    • 리눅스 컨테이너는 훌륭하지만, Docker를 진정한 크로스 플랫폼 솔루션으로 보기는 어려움.
  • 단일 파일 애플리케이션에 대한 의견

    • 단일 파일로 전체 애플리케이션을 포함하는 아이디어에 대한 찬사.
    • Docker의 복잡성에 대한 비판과, 보안이나 버전 관리를 위해 컨테이너를 사용하는 것에 대한 의문 제기.
    • WebAssembly(WASM)가 이러한 문제를 해결할 수 있는지에 대한 질문.
  • Docker 대안으로 Podman과 bubblewrap 언급

    • Docker 대신 Podman이나 bubblewrap을 사용하는 것이 더 나을 수 있음을 언급.
    • Podman은 특정 배포판에 좀 더 의존적이고, bubblewrap은 일부 배포판에서 보안 문제로 포함되지 않을 수 있음.
  • heredocs를 사용한 단일 파일 프로젝트

    • clever shebang 없이도 heredocs를 사용하여 어떤 언어나 인프라에 대한 단일 파일 프로젝트를 만들 수 있음.
    • bash 스크립트로 패키징된 동일한 앱의 예시를 제공.
  • "단일 파일"에 대한 집착에 대한 비판

    • 모든 것을 하나의 파일로 패키징하는 대신, 디렉토리를 사용하여 자체 포함된 애플리케이션을 만들 수 있음을 지적.
    • 단일 파일로 만드는 것이 반드시 더 나은 방법은 아님을 언급.
  • 자가 소비 스크립트 패턴

    • 스크립트 내부에 다른 인터프리터 스크립트를 포함하고, sed를 사용하여 태그 사이의 스크립트를 추출하는 방법을 설명.
    • 이러한 방법이 때때로 매우 유용할 수 있지만, 복잡해질 수 있음을 인정.
  • guix shell을 shebang 위치에서 사용하는 방법

    • Guix 매뉴얼에서 가져온 guix shell을 사용한 예시를 제공.
    • 보다 복잡한 환경을 지정하는 매니페스트 파일과 함께 작동함.
  • 자체 빌드 및 실행되는 Dockerfile

    • 2021년 11월에 작성된 자체 빌드 및 실행되는 Dockerfile에 대한 설명과 예시 코드 제공.