Show HN: #!/usr/bin/env docker run
(gist.github.com/adtac)#!とは何か?
#!(シバンと読む)は、Unix で主に Python や Bash のようなスクリプト言語のために使われる慣習- これを利用して、クロスプラットフォームおよび複数の Linux ディストリビューション向けにアプリケーションを配布する方法を、単一ファイルとしてパッケージ化した事例の紹介
- サンプルの Dockerfile は、バックエンド、データベース、UI をすべて含むフルスタックサーバーを単一ファイルで構成している
- Cosmopolitan Libc に似ているが、アプリケーションのパッケージングを目的としている
なぜ使うのか?
- 使わない理由があるだろうか?
安全か?
- おそらく安全ではない。
使うべきか?
- 使いたければ使える。
性能は良いか?
- 可能性はある。
保守可能か?
- いいえ。
動くのか?
- はい。
どう実行するのか?
- 次のコマンドで実行できる:
chmod +x ./Dockerfile ./Dockerfile - その後、http://127.0.0.1:8080 にアクセスする。
GN⁺の意見
- この記事は、
#!(シバン)を使って単一の Dockerfile にフルスタックサーバーをパッケージングするユニークな方法を紹介している。 - 技術的な好奇心を刺激し、従来のアプリケーション配布方法に対する新しいアプローチを提示している。
- この方法は保守性と安定性の面では推奨されないが、実験的で革新的なプロジェクトに関心のある開発者にとっては興味深い代替案になり得る。
7件のコメント
<<EOFのような heredoc を使うには、Dockerfile の先頭に# syntax = docker/dockerfile:1.4.0が必要です。驚くべきことに、syntax も docker registry から取得されます。わあ……今年最大の精神的衝撃ですwwwwww
面白いやり方ですね
笑笑…本当に斬新ですね
わあ……これは斬新ですね。まるで鉄筋とコンクリートの組み合わせを発見したような……というのはちょっと大げさですが、いいですね。
#!のシバンがちょうど Dockerfile では#がコメント文字だから、こういう裏技が効くとは……。これからは
build-run-test.shみたいな別ファイルの代わりに、Dockerfile に入れればよさそうですね。これ、面白いですね。ははは「なぜ使ってはいけないんだろう?」
Hacker Newsのコメント
nix-shell shebang の使用例
nix-shellshebang を使って、必要な依存関係をすべて含む実行可能スクリプトを作る方法を説明している。chmod +x)、指定した依存関係を持つ実行ファイルになる。/usr/bin/envの-S/--split-stringオプション-Sオプションについて説明している。Docker とアーキテクチャ互換性
単一ファイルアプリケーションに関する意見
Docker の代替として Podman と bubblewrap に言及
heredocs を使った単一ファイルプロジェクト
「単一ファイル」への執着に対する批判
自己消費型スクリプトのパターン
shebang の位置で
guix shellを使う方法guix shellの使用例を示している。自己ビルドして実行される Dockerfile