O que é #!?
#! (pronunciado shebang) é uma convenção no Unix, usada principalmente para linguagens de script como Python ou Bash
- Apresenta um caso de uso que aproveita isso para empacotar, em um único arquivo, uma forma de distribuir aplicações de modo cross-platform e em várias distribuições Linux
- O Dockerfile de exemplo configura um servidor full stack completo, incluindo backend, banco de dados e UI, tudo em um único arquivo
- É semelhante ao Cosmopolitan Libc, mas voltado para empacotamento de aplicações
Por que usar?
É seguro?
Devo usar?
Tem bom desempenho?
Dá para manter?
Funciona?
Como executar?
- Pode ser executado com o seguinte comando:
chmod +x ./Dockerfile ./Dockerfile
- Depois disso, acesse http://127.0.0.1:8080.
Opinião do GN⁺
- Este artigo apresenta uma forma única de empacotar um servidor full stack em um único Dockerfile usando
#! (shebang).
- Desperta curiosidade técnica e propõe uma nova abordagem para métodos tradicionais de deploy de aplicações.
- Embora essa abordagem não seja recomendada em termos de manutenção e estabilidade, ela pode ser uma alternativa interessante para desenvolvedores interessados em projetos experimentais e inovadores.
7 comentários
Para usar heredoc como
<<EOF, é necessário ter# syntax = docker/dockerfile:1.4.0no topo do Dockerfile. Surpreendentemente, osyntaxtambém é obtido do Docker registry.Uau... esse foi o maior choque mental do ano kkkkkkkkkkk
Que jeito divertido.
kkkk... bem criativo mesmo
Uau... isso é bem original. É como descobrir a combinação de aço e concreto... ok, talvez isso seja um pouco de exagero, mas gostei.
O fato de esse truque funcionar desse jeito porque, justamente na hora certa,
#!no Dockerfile acaba sendo tratado como comentário com#...Daqui pra frente, acho que vou colocar isso no Dockerfile em vez de usar um arquivo separado tipo
build-run-test.sh.Isso é divertido. Hahaha. "Por que não deveríamos usar isso?"
Comentários do Hacker News
Exemplo de uso de shebang com
nix-shellnix-shellpara criar um script executável com todas as dependências necessárias incluídas.chmod +x), ele se torna um executável com as dependências especificadas.Opção
-S/--split-stringdo/usr/bin/env-S, disponível desde o GNU Coreutils 8.30.Docker e compatibilidade de arquitetura
Opiniões sobre aplicações de arquivo único
Menção a Podman e bubblewrap como alternativas ao Docker
Projetos de arquivo único com heredocs
Crítica à obsessão por “arquivo único”
Padrão de script autoconsumido
sedpara extrair o script entre tags.Como usar
guix shellna posição de shebangguix shellretirado do manual do Guix.Dockerfile que compila e executa a si próprio