1.本地安装docker

下载地址:https://docs.docker.com/desktop/setup/install/windows-install/

2. 在项目源目录中创建一下文件

2.1.Dockerfile 构建镜像文件

# --------------------
# 构建阶段(完整工具链)
# --------------------
FROM node:20-bookworm as builder

# 安装系统依赖
RUN apt-get update && \
    apt-get install -y \
    build-essential \
    python3 \
    pkg-config \
    libssl-dev \
    curl

# 安装 Rust
RUN curl https://sh.rustup.rs -sSf | sh -s -- -y
ENV PATH="/root/.cargo/bin:${PATH}"

# 安装 Bun 和 pnpm
RUN curl -fsSL https://bun.sh/install | bash
ENV BUN_INSTALL="/root/.bun"
ENV PATH="$BUN_INSTALL/bin:$PATH"
RUN corepack enable && corepack prepare pnpm@latest --activate

# 安装依赖
WORKDIR /app
COPY package.json pnpm-lock.yaml ./
RUN bun install && pnpm add @spruceid/didkit

# --------------------
# 生产阶段(最小化镜像)
# --------------------
FROM oven/bun:1.1-slim

# 创建非 root 用户
RUN addgroup --system app && \
    adduser --system --ingroup app appuser
USER appuser

# 复制构建结果
WORKDIR /app
COPY --from=builder --chown=appuser:app /app/node_modules ./node_modules
COPY . .

CMD ["bun", "start"]

2.2 .dockerignore 排除文件

node_modules
.DS_Store
.env
.git
.gitignore
dist
logs

3.本地构建docker镜像

# 在项目源目录打开命令窗口
# -t 表示给镜像命名,注意最后有一个点(表示使用当前目录作为构建上下文)
# 设置BuildKit环境变量
export DOCKER_BUILDKIT=1
# 执行构建(注意最后有个点表示当前目录)
docker build -t your-app-image:v1.0.0 .

4.将docker镜像推送到服务器 加载镜像并运行

# 加载镜像
docker load -i my-bun-app.tar
# 运行docker
docker run -p 3000:3000 --rm my-bun-app

另一种方式

只需要将环境创建成一个容器即可,然后将代码文件夹映射进容器内部的/app 中,在编写compose 文件时 添加启动命令即可

# 使用 Node.js 官方镜像作为基础
FROM node:20

# 安装系统依赖(Python、构建工具、curl 等)
RUN apt-get update && apt-get install -y \
    python3 \
    build-essential \
    curl \
    && rm -rf /var/lib/apt/lists/*

# 安装 Bun
RUN curl -fsSL https://bun.sh/install | bash
ENV PATH="/root/.bun/bin:${PATH}"

# 安装 pnpm
RUN npm install -g pnpm

# 设置工作目录
WORKDIR /app

# 复制项目必要文件(如 package.json)
COPY package.json .

# 可选:定义容器启动时的默认命令(根据需求调整)
# CMD ["bun", "start"]

如果服务器构建过慢的话,可以放在本地构建

查询容器内部,退出并删除容器

docker run -it --rm --entrypoint /bin/bash 镜像名称

导出镜像命令

docker save -o /路径/保存的文件名.tar 镜像名称:标签

导入镜像命令

docker load -i /目标路径/保存的文件名.tar