好的,阿杰 👍,下面给你整理一份 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 部署流程总结
- 准备 Node.js 应用代码
- 编写 Dockerfile 并构建镜像
- 启动容器,映射端口
- 开发模式挂载本地卷,支持热更新
- 使用 Docker Compose 管理多容器
- 配置生产环境变量、反向代理与多进程
- 优化镜像与持久化数据
发表回复