Docker 容器化部署 Node.js 详细手册
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行时环境,它打破了传统浏览器对 JavaScript 的限制,允许开发者使用 JavaScript 编写服务器端代码。其核心特点是采用非阻塞、事件驱动的 I/O 模型,非常适合构建高性能、高并发的网络应用,如 API 服务、实时通信应用、微服务等。
Node.js 拥有全球最大的开源库生态系统之一——npm(Node Package Manager),提供了超过 200 万个可复用的包,能极大提升开发效率。无论是前端工程化工具(如 Webpack、Vite),还是后端服务开发,Node.js 都占据着重要地位。
为什么用 Docker 部署 Node.js?
Docker 是一种轻量级容器化技术,使用 Docker 部署 Node.js 应用能带来诸多优势:
环境一致性:Docker 容器封装了应用运行所需的全部依赖(Node.js 版本、npm 包、系统库等),确保应用在开发、测试、生产环境中表现一致,彻底解决"在我电脑上能运行"的经典问题。
隔离性:容器之间相互隔离,不同 Node.js 应用(甚至不同版本的 Node.js)可以在同一台服务器上独立运行,避免依赖冲突和资源抢占。
快速部署与扩展:Docker 镜像可快速分发和启动,配合编排工具(如 Docker Compose、Kubernetes),能实现 Node.js 应用的秒级启停和弹性扩展。
版本控制:Docker 镜像支持版本标签管理,可轻松回滚到历史版本,便于应用迭代和问题排查。
资源高效:相比传统虚拟机,容器共享宿主机内核,启动更快、占用资源更少,能在有限服务器资源上部署更多 Node.js 应用。
🧰 准备工作
若你的系统尚未安装 Docker,请先一键安装:
Linux Docker & Docker Compose 一键安装
一键安装配置脚本(推荐方案):
该脚本支持多种 Linux 发行版,支持一键安装 Docker、Docker Compose 并自动配置轩辕镜像加速源。
bash <(wget -qO- https://xuanyuan.cloud/docker.sh)
1、查看 Node.js 镜像详情
你可以在 轩辕镜像 中找到 Node.js 镜像页面:
👉 https://xuanyuan.cloud/r/library/node
在镜像页面中,你会看到多种拉取方式,下面我们逐一说明如何部署。
2、下载 Node.js 镜像
2.1 使用轩辕镜像登录验证的方式拉取
docker pull docker.xuanyuan.run/library/node:latest
2.2 拉取后改名
docker pull docker.xuanyuan.run/library/node:latest \
&& docker tag docker.xuanyuan.run/library/node:latest library/node:latest \
&& docker rmi docker.xuanyuan.run/library/node:latest
说明:
docker pull
:从轩辕镜像加速拉取镜像docker tag
:将镜像重命名为官方标准名称library/node:latest
,后续运行命令更简洁docker rmi
:删除临时镜像标签,避免占用额外存储空间
2.3 使用免登录方式拉取(推荐)
基础拉取命令:
docker pull xxx.xuanyuan.run/library/node:latest
带重命名的完整命令:
docker pull xxx.xuanyuan.run/library/node:latest \
&& docker tag xxx.xuanyuan.run/library/node:latest library/node:latest \
&& docker rmi xxx.xuanyuan.run/library/node:latest
2.4 官方直连方式
若网络可直连 Docker Hub,或已配置轩辕镜像加速器,可直接拉取官方镜像:
docker pull library/node:latest
2.5 查看镜像是否拉取成功
docker images
输出示例:
REPOSITORY TAG IMAGE ID CREATED SIZE
library/node latest 7b1f3ef4f4e8 3 weeks ago 155MB
3、部署 Node.js
以下基于 library/node:latest
镜像,提供三种部署方案,可根据场景选择。
3.1 快速运行(最简方式)
适合测试或临时运行:
第一步:编写测试脚本
mkdir -p /data/node && cd /data/node
echo "console.log('Hello from Xuanyuan Node.js!')" > app.js
第二步:运行 Node 容器
docker run -it --rm \-v /data/node:/usr/src/app \-w /usr/src/app \library/node:latest \node app.js
输出结果:
Hello from Xuanyuan Node.js!
核心参数说明:
-v /data/node:/usr/src/app
:挂载宿主机目录到容器,方便代码修改-w /usr/src/app
:指定容器内的工作目录--rm
:容器退出后自动删除,避免产生无用容器
3.2 启动 Node Web 应用(推荐方式)
适合实际项目部署,通过 Node.js 提供 HTTP 服务。
第一步:准备项目代码
mkdir -p /data/node-web && cd /data/node-web
新建 server.js
:
// 简单的 Node.js Web 服务
const http = require('http');
const PORT = 3000;http.createServer((req, res) => {res.writeHead(200, {'Content-Type': 'text/plain'});res.end('Hello from Xuanyuan Node.js Server!\n');
}).listen(PORT);console.log(`Server running at http://0.0.0.0:${PORT}/`);
第二步:运行容器并映射端口
docker run -d --name node-web \-p 3000:3000 \-v /data/node-web:/usr/src/app \-w /usr/src/app \library/node:latest \node server.js
验证方式:
浏览器访问 http://服务器IP:3000
,应显示:
Hello from Xuanyuan Node.js Server!
3.3 docker-compose 部署(企业级推荐)
使用 docker-compose.yml
管理容器配置。
第一步:编写 docker-compose.yml
version: '3'
services:node:image: library/node:latestcontainer_name: node-serviceworking_dir: /usr/src/appvolumes:- ./app:/usr/src/appports:- "3000:3000"command: node server.jsrestart: always
第二步:准备应用目录
mkdir -p app && cd app
server.js
内容同 3.2 中的 server.js
。
第三步:启动服务
docker compose up -d
4、结果验证
浏览器访问
打开 http://服务器IP:3000
,应显示 Hello from Xuanyuan Node.js Server!
查看容器状态
docker ps
STATUS
列显示 Up
说明运行正常
查看日志
docker logs node-web
输出 Server running at http://0.0.0.0:3000/
说明启动成功
5、常见问题
5.1 为什么访问不到服务?
排查方向:
端口未放行:检查服务器安全组、防火墙是否开放 3000 端口
宿主机端口冲突:若 3000 被占用,可改用
-p 8080:3000
5.2 如何安装依赖?
进入容器执行 npm install
:
docker exec -it node-web npm install express
或者在 docker-compose.yml
中预置 command: npm install && node server.js
5.3 如何启用热更新?
使用 nodemon
:
docker exec -it node-web npm install -g nodemon
docker exec -it node-web nodemon server.js
5.4 如何指定 Node.js 版本?
拉取指定标签镜像,例如:
docker pull library/node:18
docker pull library/node:20
5.5 容器内时区不正确?
运行时加上:
-e TZ=Asia/Shanghai
结尾
至此,你已掌握基于 轩辕镜像 的 Node.js 镜像拉取与 Docker 部署全流程。
初学者:可以先用 快速运行,体验 Node.js 容器化开发。
实际项目:推荐 挂载目录 或
docker-compose
,便于管理依赖与配置。高级工程师:可基于本文继续扩展 CI/CD、PM2 进程守护、Kubernetes 部署等高级场景。