最近用 Bun 開發了個小工具,期間因為感覺安裝 Bun 有點會污染自己本機環境,畢竟這些正在發展的東西更新迭代很快,不喜歡安裝好之後,之後還得折騰一番去卸載或者升級。於是經過一些資料搜索和 AI 的幫助下,通過 Docker 去將 Bun.js 環境部署到本機。
インストール Docker#
私は Mac デバイスを使用しているので、便利さのために Docker Desktop をインストールして Docker アプリを管理しています。 公式サイト からダウンロードできます。
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 ポートにアクセスします:
🎉 大成功!