好的,阿杰 👍,下面给你整理一份 Node.js Docker 容器化部署详细手册,覆盖从基础环境、Dockerfile 构建、Compose、多环境部署到性能优化的完整流程,适合开发和生产环境使用。


🧩 一、前置条件

1️⃣ 操作系统

  • Ubuntu 20.04+ / macOS / Windows(Docker Desktop)

2️⃣ 软件要求

  • Node.js 版本 ≥ 14(可选)
  • Docker Engine ≥ 20.10
  • Docker Compose 插件

验证安装:

node -v
docker -v
docker compose version


🏗️ 二、准备 Node.js 应用

示例项目结构:

my-node-app/
├── package.json
├── package-lock.json
├── server.js
└── src/

server.js 示例:

const express = require('express');
const app = express();
const PORT = process.env.PORT || 3000;

app.get('/', (req, res) => {
  res.send('Hello 阿杰, Node.js Docker 已就绪!');
});

app.listen(PORT, () => console.log(`Server running on port ${PORT}`));

package.json 示例:

{
  "name": "my-node-app",
  "version": "1.0.0",
  "main": "server.js",
  "scripts": {
    "start": "node server.js"
  },
  "dependencies": {
    "express": "^4.18.2"
  }
}


🐳 三、编写 Dockerfile

在项目根目录创建 Dockerfile

# 使用官方 Node.js LTS 版本
FROM node:20-alpine

# 设置工作目录
WORKDIR /usr/src/app

# 复制 package.json 和 package-lock.json
COPY package*.json ./

# 安装依赖
RUN npm install --production

# 复制应用代码
COPY . .

# 暴露端口
EXPOSE 3000

# 设置启动命令
CMD ["npm", "start"]

说明:

  • node:20-alpine 轻量化镜像,体积小
  • WORKDIR 设置容器工作目录
  • COPY package*.json ./ 优化缓存,提高构建速度

🏗️ 四、构建与运行 Docker 镜像

1️⃣ 构建镜像

docker build -t my-node-app:latest .

2️⃣ 运行容器

docker run -d -p 3000:3000 --name my-node-container my-node-app:latest

访问:

http://localhost:3000

3️⃣ 查看日志

docker logs -f my-node-container


🗂️ 五、挂载本地代码(开发模式)

开发时希望修改代码实时生效:

docker run -it -p 3000:3000 \
  -v $(pwd):/usr/src/app \
  -w /usr/src/app \
  node:20-alpine sh

安装依赖并启动:

npm install
npm install -g nodemon
nodemon server.js


🧰 六、使用 Docker Compose(多容器管理)

创建 docker-compose.yml

version: '3.8'
services:
  node-app:
    build: .
    container_name: node-app
    ports:
      - "3000:3000"
    volumes:
      - ./src:/usr/src/app/src
      - ./package.json:/usr/src/app/package.json
    environment:
      - NODE_ENV=production

启动:

docker compose up -d

停止:

docker compose down


⚡ 七、多环境部署建议

1️⃣ 环境变量管理

  • 开发环境 .env.dev
  • 生产环境 .env.prod

示例 .env

PORT=3000
NODE_ENV=production
DATABASE_URL=mongodb://mongo:27017/mydb

Docker Compose 使用:

env_file:
  - .env.prod

2️⃣ 生产镜像优化

  • 使用多阶段构建(Build + Runtime)
# Stage 1: build
FROM node:20-alpine as build
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build

# Stage 2: runtime
FROM node:20-alpine
WORKDIR /usr/src/app
COPY --from=build /usr/src/app .
EXPOSE 3000
CMD ["node", "server.js"]


🧹 八、常用管理命令

功能命令
查看运行容器docker ps
停止容器docker stop node-app
删除容器docker rm node-app
查看镜像docker images
删除镜像docker rmi my-node-app
查看日志docker logs -f node-app
进入容器docker exec -it node-app sh

🌐 九、部署生产环境优化

1️⃣ 使用 Nginx 反向代理

  • 将 80/443 端口映射到 Node.js 容器
  • 提供 HTTPS 支持

2️⃣ 开启 pm2 或 cluster

  • 支持多进程,提高 CPU 利用率

3️⃣ 开启容器自动重启

restart: always

4️⃣ 配置持久化卷

  • 保存日志或上传文件,防止容器删除丢失数据

✅ 十、Node.js Docker 部署流程总结

  1. 准备 Node.js 应用代码
  2. 编写 Dockerfile 并构建镜像
  3. 启动容器,映射端口
  4. 开发模式挂载本地卷,支持热更新
  5. 使用 Docker Compose 管理多容器
  6. 配置生产环境变量、反向代理与多进程
  7. 优化镜像与持久化数据