Jakho

Jakho

Full Stack developer.
x

Docker を使用して Bun 環境をデプロイする

最近用 Bun 開發了個小工具,期間因為感覺安裝 Bun 有點會污染自己本機環境,畢竟這些正在發展的東西更新迭代很快,不喜歡安裝好之後,之後還得折騰一番去卸載或者升級。於是經過一些資料搜索和 AI 的幫助下,通過 Docker 去將 Bun.js 環境部署到本機。

インストール Docker#

私は Mac デバイスを使用しているので、便利さのために Docker Desktop をインストールして Docker アプリを管理しています。 公式サイト からダウンロードできます。

Bun のイメージをプル#

コマンドラインを使用する場合:

docker pull oven/bun

グラフィカルインターフェースを使用する場合:
image

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

image

🎉 問題ありません!プロジェクトを正常に作成して初期化できました!次に、サーバーを作成し、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

image

本機の 3001 ポートにアクセスします:

image

🎉 大成功!

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。