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

🎉 大功告成!

加载中...
此文章数据所有权由区块链加密技术和智能合约保障仅归创作者所有。