15 puntos por GN⁺ 2024-01-15 | 7 comentarios | Compartir por WhatsApp

¿Qué es #!?

  • #! (pronunciado shebang) es una convención usada principalmente en Unix para lenguajes de scripting como Python o Bash
  • Aquí se presenta un caso de uso donde se aprovecha para empaquetar en un solo archivo una forma de distribuir aplicaciones de manera multiplataforma y en varias distribuciones de Linux
  • El Dockerfile de ejemplo configura un servidor full stack completo que incluye backend, base de datos y UI, todo en un solo archivo
  • Es similar a Cosmopolitan Libc, pero orientado al empaquetado de aplicaciones

¿Por qué usarlo?

  • ¿Por qué no usarlo?

¿Es seguro?

  • Probablemente no.

¿Deberías usarlo?

  • Puedes usarlo si quieres.

¿Tiene buen rendimiento?

  • Es posible.

¿Se puede mantener?

  • No.

¿Funciona?

  • Sí.

¿Cómo se ejecuta?

  • Se puede ejecutar con el siguiente comando: chmod +x ./Dockerfile ./Dockerfile
  • Después, entra a http://127.0.0.1:8080.

Opinión de GN⁺

  • Este artículo presenta una forma poco común de empaquetar un servidor full stack en un solo Dockerfile usando #! (shebang).
  • Despierta curiosidad técnica y propone un enfoque nuevo frente a los métodos tradicionales de despliegue de aplicaciones.
  • Aunque no se recomienda desde el punto de vista de mantenimiento y estabilidad, puede ser una alternativa interesante para desarrolladores interesados en proyectos experimentales e innovadores.

7 comentarios

 
minhoryang 2024-01-17

Para usar un heredoc como <<EOF, necesitas # syntax = docker/dockerfile:1.4.0 al inicio del Dockerfile. Sorprendentemente, syntax también se obtiene desde el registro de Docker.

 
pmc7777 2024-01-16

Guau... este es el mayor shock mental del año jajajajajajaja

 
arfwene 2024-01-15

Es una forma divertida.

 
bbulbum 2024-01-15

Jajaja... de verdad está muy original.

 
sagee 2024-01-15

Vaya... esto sí que es novedoso. Es como haber descubierto la combinación de acero de refuerzo y concreto... bueno, eso ya es exagerar un poco, pero me gusta. #! Justo da la casualidad de que en un Dockerfile # es el carácter de comentario, así que qué curioso que funcione este tipo de truco... De ahora en adelante, supongo que tendré que meterlo en el Dockerfile en vez de usar un archivo aparte como build-run-test.sh.

 
GN⁺ 2024-01-15
Comentarios de Hacker News
  • Ejemplo de uso del shebang de nix-shell

    • Explica cómo usar el shebang de nix-shell para crear un script ejecutable que incluya todas las dependencias necesarias.
    • Ofrece un ejemplo de un script en Python que reduce una imagen en 50%.
    • Si se le da permiso de ejecución al script (chmod +x), se convierte en un ejecutable con las dependencias especificadas.
  • Opción -S / --split-string de /usr/bin/env

    • Explica la opción -S, disponible desde GNU Coreutils 8.30.
    • Esta opción depende de un comportamiento no estándar y solo funciona en sistemas operativos que tratan todo el texto como argumentos del ejecutable.
    • Este comportamiento no estándar funciona en la mayoría de los GNU/Linux modernos, BSD y macOS.
  • Docker y compatibilidad de arquitectura

    • Señala que Docker en realidad requiere una VM de Linux en plataformas que no son Linux.
    • Aunque los contenedores de Linux son excelentes, es difícil considerar a Docker una solución verdaderamente multiplataforma.
  • Opiniones sobre aplicaciones de un solo archivo

    • Elogia la idea de incluir una aplicación completa en un solo archivo.
    • Critica la complejidad de Docker y cuestiona el uso de contenedores para seguridad o control de versiones.
    • Pregunta si WebAssembly (WASM) podría resolver estos problemas.
  • Mención de Podman y bubblewrap como alternativas a Docker

    • Comenta que usar Podman o bubblewrap en lugar de Docker podría ser mejor.
    • Podman depende un poco más de distribuciones específicas, y bubblewrap puede no estar incluido en algunas distribuciones por temas de seguridad.
  • Proyecto de un solo archivo con heredocs

    • Incluso sin un shebang ingenioso, se puede crear un proyecto de un solo archivo para cualquier lenguaje o infraestructura usando heredocs.
    • Da un ejemplo de la misma app empaquetada como script de bash.
  • Crítica a la obsesión con el "archivo único"

    • Señala que, en lugar de empaquetarlo todo en un solo archivo, se puede usar un directorio para crear una aplicación autocontenida.
    • Menciona que hacerlo de un solo archivo no necesariamente es una mejor opción.
  • Patrón de scripts autoconsumibles

    • Explica cómo incluir otros scripts de intérprete dentro de un script y usar sed para extraer el script entre etiquetas.
    • Reconoce que este método a veces puede ser muy útil, aunque también puede volverse complejo.
  • Cómo usar guix shell en la posición del shebang

    • Ofrece un ejemplo con guix shell tomado del manual de Guix.
    • Funciona junto con un archivo de manifiesto para definir entornos más complejos.
  • Dockerfile que se compila y ejecuta por sí mismo

    • Incluye una explicación y código de ejemplo de un Dockerfile que se compila y ejecuta por sí mismo, escrito en noviembre de 2021.