# ---- Stage 1: Build ---- # 选择一个包含 Node.js 的官方镜像。使用 LTS (长期支持) 版本以保证稳定性。 # slim 版本体积更小,适合生产环境。 FROM node:18-slim AS builder # 在容器内创建一个工作目录 WORKDIR /usr/src/app # 复制 package.json 和 package-lock.json 到工作目录 # 这样可以利用 Docker 的层缓存机制,只有当这两个文件变化时才会重新安装依赖 COPY package*.json ./ # 安装项目依赖 # 使用 --only=production 参数可以避免安装 devDependencies,减小最终镜像体积 RUN npm install --only=production # 复制所有项目文件到工作目录 COPY . . # ---- Stage 2: Production ---- # 使用一个更轻量的基础镜像来运行应用 FROM node:18-slim # 设置容器内的工作目录 WORKDIR /usr/src/app # 从 builder 阶段复制已经安装好的 node_modules COPY --from=builder /usr/src/app/node_modules ./node_modules # 复制应用程序代码 COPY --from=builder /usr/src/app . # 暴露应用程序运行的端口 # 这个端口号应该与您 server.js 中监听的端口一致,后续会通过环境变量传入 EXPOSE 8101 # 定义容器启动时执行的命令 # 使用 ["node", "server.js"] 而不是 "node server.js",这是更推荐的 exec 格式 CMD ["node", "server.js"]