15 points par GN⁺ 2024-01-15 | 7 commentaires | Partager sur WhatsApp

Qu’est-ce que #! ?

  • #! (prononcé shebang) est une convention utilisée sous Unix, principalement pour des langages de script comme Python ou Bash
  • Présentation d’un cas d’usage où cela sert à empaqueter, dans un fichier unique, une méthode de distribution d’applications cross-platform et compatible avec plusieurs distributions Linux
  • L’exemple de Dockerfile configure un serveur full stack complet, incluant backend, base de données et UI, dans un seul fichier
  • Similaire à Cosmopolitan Libc, mais destiné à l’empaquetage d’applications

Pourquoi l’utiliser ?

  • Pourquoi ne pas l’utiliser ?

Est-ce sûr ?

  • Probablement pas.

Faut-il l’utiliser ?

  • Vous pouvez l’utiliser si vous en avez envie.

Est-ce performant ?

  • C’est possible.

Est-ce maintenable ?

  • Non.

Est-ce que ça fonctionne ?

  • Oui.

Comment l’exécuter ?

  • Exécutable avec la commande suivante : chmod +x ./Dockerfile ./Dockerfile
  • Ensuite, ouvrez l’adresse http://127.0.0.1:8080.

L’avis de GN⁺

  • Cet article présente une méthode originale pour empaqueter un serveur full stack entier dans un unique Dockerfile à l’aide de #! (shebang).
  • Cela stimule la curiosité technique et propose une nouvelle approche des méthodes traditionnelles de déploiement d’applications.
  • Cette approche n’est pas recommandée du point de vue de la maintenance et de la stabilité, mais peut constituer une alternative intéressante pour les développeurs attirés par des projets expérimentaux et innovants.

7 commentaires

 
minhoryang 2024-01-17

Pour utiliser un heredoc comme <<EOF, il faut ajouter # syntax = docker/dockerfile:1.4.0 en haut du Dockerfile. Fait surprenant, syntax est lui aussi récupéré depuis le registre Docker.

 
pmc7777 2024-01-16

Waouh... c’est le plus grand choc mental de l’année lololololol

 
arfwene 2024-01-15

C’est une façon amusante de faire.

 
bbulbum 2024-01-15

Haha... c’est vraiment original.

 
sagee 2024-01-15

Waouh… c’est vraiment original. Comme découvrir l’association entre le béton armé et le ciment… bon, c’est un peu exagéré, mais j’aime beaucoup.
Le plus fou, c’est que comme #! tombe justement dans un Dockerfile sur le caractère de commentaire #, ce genre d’astuce fonctionne…
À l’avenir, au lieu d’un fichier séparé du genre build-run-test.sh, je ferais mieux de le mettre directement dans le Dockerfile.

 
GN⁺ 2024-01-15
Commentaires Hacker News
  • Exemple d’utilisation d’un shebang nix-shell

    • Explication de la façon de créer un script exécutable incluant toutes les dépendances nécessaires à l’aide d’un shebang nix-shell.
    • Exemple fourni d’un script Python qui réduit une image de 50 %.
    • En donnant les droits d’exécution au script (chmod +x), il devient un exécutable avec les dépendances spécifiées.
  • Option -S / --split-string de /usr/bin/env

    • Explication de l’option -S, disponible depuis GNU Coreutils 8.30.
    • Cette option repose sur un comportement non standard et fonctionne uniquement sur les OS qui traitent tout le texte comme des arguments de l’exécutable.
    • Ce comportement non standard fonctionne sur la plupart des GNU/Linux modernes, des BSD et de macOS.
  • Docker et compatibilité d’architecture

    • Remarque selon laquelle Docker nécessite en réalité une VM Linux sur les plateformes autres que Linux.
    • Les conteneurs Linux sont excellents, mais il est difficile de considérer Docker comme une véritable solution cross-platform.
  • Avis sur les applications en fichier unique

    • Éloges pour l’idée d’inclure toute une application dans un seul fichier.
    • Critique de la complexité de Docker et remise en question de l’usage des conteneurs pour la sécurité ou la gestion des versions.
    • Question sur la capacité de WebAssembly (WASM) à résoudre ces problèmes.
  • Mention de Podman et bubblewrap comme alternatives à Docker

    • Il est mentionné que l’usage de Podman ou bubblewrap pourrait être préférable à Docker.
    • Podman dépend davantage de certaines distributions, et bubblewrap peut être absent de certaines distributions pour des raisons de sécurité.
  • Projets en fichier unique avec des heredocs

    • Il est possible de créer un projet en fichier unique pour n’importe quel langage ou infrastructure avec des heredocs, sans shebang astucieux.
    • Un exemple de la même application empaquetée sous forme de script bash est fourni.
  • Critique de l’obsession du « fichier unique »

    • Il est souligné qu’au lieu d’empaqueter tout dans un seul fichier, on peut créer une application autonome en utilisant un répertoire.
    • Il est mentionné qu’en faire un fichier unique n’est pas nécessairement une meilleure approche.
  • Modèle de script auto-consommateur

    • Explication d’une méthode consistant à inclure d’autres scripts d’interpréteur dans le script lui-même, puis à extraire les scripts entre des balises avec sed.
    • Il est reconnu que cette méthode peut parfois être très utile, mais qu’elle peut aussi devenir complexe.
  • Utilisation de guix shell à l’emplacement du shebang

    • Exemple utilisant guix shell, tiré du manuel Guix.
    • Fonctionne avec un fichier manifeste permettant de spécifier un environnement plus complexe.
  • Dockerfile qui se construit et s’exécute lui-même

    • Description d’un Dockerfile qui se construit et s’exécute lui-même, écrit en novembre 2021, avec un exemple de code.