Jakho

Jakho

Full Stack developer.
x

使用 Docker 部署 Bun 環境

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

安裝 Docker#

我是使用 Mac 設備的,所以我為了方便安裝的是 Docker Desktop 來管理 Docker 應用,可以在 官網 進行下載。

拉取 Bun 的 Image#

如果使用命令行:

docker pull oven/bun

使用圖形化界面:
image

oven/bun 這個鏡像 Pull 下來。

需求#

  • 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裡加入一段官方 Demo 代碼:

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

🎉 大功告成!

載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。