最近 Bun を使って小さなツールを開発しました。その間、Bun のインストールが自分のローカル環境を汚染するのではないかと感じました。結局、これらの開発中のものは更新が非常に早く、インストールした後にアンインストールやアップグレードのために手間をかけたくありませんでした。そこで、いくつかの資料を検索し、AI の助けを借りて、Docker を使って Bun.js 環境をローカルにデプロイしました。
Docker のインストール#
私は Mac デバイスを使用しているので、Docker アプリケーションを管理するために Docker Desktop をインストールしました。 公式サイト からダウンロードできます。
Bun のイメージを取得#
コマンドラインを使用する場合:
docker pull oven/bun
グラフィカルインターフェースを使用する場合:
oven/bun
というイメージをプルします。
要件#
- Bun のプロジェクトファイルはローカルに保存し、Docker 内には保存しない
- 実行後のアクセスポートをマッピングできる必要がある
- 実行が完了した後、または手動で停止(Ctrl+C)した後に Docker コンテナを停止して削除する必要がある
環境変数を設定するための編集コマンド#
.zshrc または.bashrc(Mac デバイス環境内)ファイルに以下の Function 関数を追加し、毎回長いコマンドを入力する必要がないようにします。追加後は保存し、source
を実行して有効にしてください。
bun() {
local port=${1:-8080}
# --initオプションを追加してDockerコンテナが信号(Ctrl+Cなど)を正しく処理できるようにします。
# これにより、コンテナ内でinitプロセスがPID 1として実行され、
# このプロセスが信号をアプリケーションに正しく転送できます。
if [[ $1 =~ ^[0-9]+$ ]]; then
docker run -it --rm -w /app -v "$(pwd)":/app -p ${port}:${port} --init oven/bun bun "${@:2}"
else
docker run -it --rm -w /app -v "$(pwd)":/app -p 8080:8080 --init oven/bun bun "$@"
fi
}
使用方法#
初期化された Bun プロジェクトを通じて、動作するかどうかを確認してみましょう:
bun init
🎉 問題ありません!プロジェクトを正常に作成し、初期化できました!次に、サーバーを作成し、3001 ポートをマッピングしてみましょう。Bun 環境は Docker コンテナ内で実行されているため、ホストの 3001 ポートをコンテナの 3001 ポートにマッピングする必要があります。上記で述べたように、これらは再設定する必要はありません。環境変数内に設定したコマンドがすでに準備されているので、必要なポート番号を実行コマンドに書くだけで済みます。
先ほど初期化した Bun プロジェクトのindex.ts
に公式デモコードを追加します:
const server = Bun.serve({
port: 3001,
fetch(request) {
return new Response("Welcome to Bun!");
},
});
console.log(`Listening on localhost:${server.port}`);
次に、ポート番号を指定してコマンドを実行します:
bun 3001 run index.ts
ローカルの 3001 ポートにアクセスします:
🎉 大成功!