Jakho

Jakho

Full Stack developer.
x

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

最近 Bun を使って小さなツールを開発しました。その間、Bun のインストールが自分のローカル環境を汚染するのではないかと感じました。結局、これらの開発中のものは更新が非常に早く、インストールした後にアンインストールやアップグレードのために手間をかけたくありませんでした。そこで、いくつかの資料を検索し、AI の助けを借りて、Docker を使って Bun.js 環境をローカルにデプロイしました。

Docker のインストール#

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

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

🎉 大成功!

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