Node.js 项目 用 `Docker Compose` 发布的完整流程

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 应用:

dockerfile 复制代码
# 使用官方 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 管理服务(构建+运行):

yaml 复制代码
version: "3.8"

services:
  app:
    build: .
    ports:
      - "3000:3000"  # 宿主机:容器
    volumes:
      - .:/usr/src/app  # 开发模式可选:代码同步
    environment:
      - NODE_ENV=production
    restart: unless-stopped

▶️ 四、启动服务

在项目根目录执行:

bash 复制代码
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

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️⃣ 部署上线 搭配服务器 + 反向代理部署
相关推荐
滨哥GPT6 分钟前
Codex修改环境变量后项目还是报错怎么办?.env、配置加载与运行环境排查
docker·ai编程·环境变量·开发环境·codex·env
nuo53420226 分钟前
进阶 1 —— Docker 中常见软件的复杂安装
docker·容器
苍狗T29 分钟前
K8s 集群实战:基于 Harbor 私有仓库 + cri‑dockerd 完整部署
linux·运维·云原生·容器·kubernetes
明王明王34 分钟前
从零搭建一个单节点 K8S 可观测实验室(十二):告警与故障注入——从 Pending、Firing 到故障恢复
云原生·容器·kubernetes
EXI-小洲36 分钟前
Docker 容器部署 EMQX|MQTT 消息代理服务安装与配置教程
运维·mqtt·docker·emqx
今日无bug42 分钟前
从「拿来主义」到「亲手造轮子」:2 种 MCP 文件服务器写法对比
前端·node.js·mcp
八角丶1 小时前
Node.js 异步上下文详解(实验驱动)
前端·node.js
X-future4261 小时前
Node.js快速入门+demo案例
node.js
八角丶1 小时前
Node.js 事件循环详解(实验驱动)
前端·node.js
云浪2 小时前
给大模型装上"手":三分钟看懂 AI Agent 的 Tool 工具调用
javascript·人工智能·node.js