Node.js 项目 用 Docker Compose
发布的完整流程
✅ 一、基本项目结构示例
以一个简单 Express 项目为例:
my-node-app/
├── app.js # 启动文件
├── package.json
├── package-lock.json
├── Dockerfile # 构建 Node 容器
├── docker-compose.yml # 启动服务
└── README.md
🛠️ 二、Dockerfile 编写
Dockerfile
描述如何构建这个 Node 应用:
# 使用官方 Node.js 镜像
FROM node:18
# 设置工作目录
WORKDIR /usr/src/app
# 拷贝依赖描述文件
COPY package*.json ./
# 安装依赖
RUN npm install --production
# 拷贝项目代码
COPY . .
# 启动服务(app.js 是入口)
CMD ["node", "app.js"]
# 开放端口
EXPOSE 3000
📦 三、docker-compose.yml 编写
让我们通过 Docker Compose 管理服务(构建+运行):
version: "3.8"
services:
app:
build: .
ports:
- "3000:3000" # 宿主机:容器
volumes:
- .:/usr/src/app # 开发模式可选:代码同步
environment:
- NODE_ENV=production
restart: unless-stopped
▶️ 四、启动服务
在项目根目录执行:
docker-compose up --build
你会看到 Node.js 启动并监听 3000
端口。
浏览器访问:http://localhost:3000
🔁 五、可选优化(生产建议)
项 | 优化建议 |
---|---|
PM2 管理 Node 应用 | 用 CMD ["npx", "pm2-runtime", "start", "ecosystem.config.js"] |
多阶段构建 | 分离依赖构建和运行阶段,减小镜像体积 |
.env 文件 | 使用 env_file: .env 配置环境变量 |
反向代理 | 结合 nginx(可用 nginx 容器)做流量转发、SSL 支持 |
🧪 示例:简单 app.js
const express = require('express');
const app = express();
const PORT = process.env.PORT || 3000;
app.get('/', (req, res) => {
res.send('Hello from Dockerized Node.js!');
});
app.listen(PORT, () => {
console.log(`Server running at http://localhost:${PORT}`);
});
✅ 总结步骤(纯 Node.js 项目 Docker Compose 发布流程)
步骤 | 说明 |
---|---|
1️⃣ 创建 Dockerfile |
定义镜像构建流程 |
2️⃣ 创建 docker-compose.yml |
定义服务,设置端口、环境变量等 |
3️⃣ 构建并启动 | docker-compose up --build |
4️⃣ 验证服务运行 | 访问 http://localhost:3000 |
5️⃣ 部署上线 | 搭配服务器 + 反向代理部署 |