Docker 安装 Node.js(完整教程)

Docker 安装 Node.js 的完整指南:从零开始搭建开发环境

你是否曾遇到这样的问题:在本地电脑上运行一个项目时,提示 Node.js 版本不匹配?或者团队成员之间因为环境差异导致“在我电脑上能跑”的尴尬?别担心,Docker 正是解决这类问题的利器。通过 Docker 安装 Node.js,你可以将整个运行环境打包成一个“标准化容器”,无论在哪台机器上运行,结果都完全一致。

想象一下,Node.js 就像一辆车,而你的开发环境就是不同的加油站。如果每个加油站的油品都不一样,车自然开得不稳。而 Docker 就是为你提供了一个“标准油箱”——无论你去哪个加油站,只要加的是这个标准油,车就能跑得稳。

今天我们不讲抽象概念,直接上手操作,一步步带你用 Docker 安装 Node.js,并运行一个简单的 Express 服务。全程零基础也能跟上。


为什么选择 Docker 安装 Node.js?

在传统开发中,我们需要手动安装 Node.js、配置环境变量、管理版本,一旦系统升级或换电脑,重装过程繁琐且容易出错。Docker 则提供了一种“打包即用”的模式,把 Node.js 运行环境和你的应用代码一起封装进一个容器里。

它的好处非常直观:

  • 环境一致性:开发、测试、生产环境完全一致,避免“我电脑能跑,你那跑不了”的问题。
  • 快速部署:无需安装 Node.js,直接拉取镜像就能运行。
  • 版本隔离:可以同时运行多个不同版本的 Node.js,比如同时支持 Node 16 和 Node 18。
  • 资源轻量:相比虚拟机,Docker 容器启动快、占用资源少。

简而言之,Docker 安装 Node.js,就是给你的 Node 项目穿上“防护服”,让应用在任何环境中都能稳定运行。


安装 Docker Desktop:准备你的“工作台”

在开始之前,你需要先安装 Docker Desktop。它提供了图形化界面和命令行工具,是大多数开发者的首选。

1. 下载并安装 Docker Desktop

访问 https://www.docker.com/products/docker-desktop 下载对应操作系统的版本(Windows / macOS / Linux)。

  • Windows 用户:建议使用 WSL2 后端,性能更好。
  • macOS 用户:直接下载 .dmg 文件安装即可。
  • Linux 用户:可通过包管理器安装(如 Ubuntu 的 sudo apt install docker.io),但推荐使用 Docker Desktop。

安装完成后,启动 Docker Desktop。你可以在系统托盘看到 Docker 的小鲸鱼图标,表示服务已运行。

✅ 提示:首次启动可能需要几分钟,因为它会下载基础镜像并初始化环境。


拉取 Node.js 镜像:获取你的“运行引擎”

Docker 的核心思想是“镜像”(Image),它相当于一个模板,包含了操作系统、依赖库和应用程序。我们要做的第一步,就是从 Docker Hub 拉取一个 Node.js 镜像。

打开终端(Terminal / PowerShell / WSL),执行以下命令:

docker pull node:18-alpine

这个命令的含义是:

  • docker pull:从远程仓库拉取镜像。
  • node:18-alpine:指定镜像名称和标签。
    • node:基础镜像名称,表示这是 Node.js 镜像。
    • 18:Node.js 的版本号,这里是 18。
    • alpine:精简版 Linux 发行版,体积小,适合生产环境。

📌 注意:alpine 是基于 Alpine Linux 的轻量镜像,比默认的 Debian 更小,但某些系统调用可能不兼容。如果你不确定,也可以用 node:18(默认 Debian 版本)。

执行后你会看到类似以下输出:

18-alpine: Pulling from library/node
Digest: sha256:...
Status: Downloaded newer image for node:18-alpine

这说明镜像已成功下载,现在你可以在本地运行它了。


创建你的第一个 Node.js 应用容器

接下来,我们来创建一个简单的 Express 服务,并通过 Docker 运行它。

1. 创建项目目录

mkdir my-node-app
cd my-node-app

2. 初始化 Node.js 项目

npm init -y

这个命令会生成 package.json 文件,包含项目的基本信息。

3. 安装 Express

npm install express

Express 是最流行的 Node.js Web 框架,用来快速搭建服务器。

4. 创建服务器文件

新建一个文件 server.js,内容如下:

// 引入 Express 模块
const express = require('express');

// 创建 Express 应用实例
const app = express();

// 定义根路径的响应
app.get('/', (req, res) => {
  res.send('<h1>欢迎访问我的 Node.js 应用!</h1>');
});

// 设置监听端口
const PORT = process.env.PORT || 3000;

// 启动服务器
app.listen(PORT, () => {
  console.log(`服务器运行在 http://localhost:${PORT}`);
});

✅ 说明:process.env.PORT 是 Docker 推荐的端口配置方式,允许容器在不同环境中动态指定端口。


使用 Dockerfile 构建自定义镜像

现在我们有了应用代码,但还不能直接运行。我们需要一个 Dockerfile 来告诉 Docker 如何构建这个应用的镜像。

在项目根目录下创建文件 Dockerfile,内容如下:

FROM node:18-alpine

WORKDIR /app

COPY package.json ./

RUN npm install

COPY . .

EXPOSE 3000

CMD ["node", "server.js"]

🔍 逐行解释:

  • FROM:指定基础镜像。
  • WORKDIR:设置容器内的工作目录,相当于进入一个新文件夹。
  • COPY:将本地文件复制到容器中。先复制 package.json,再复制代码,是因为依赖变化时只需重装依赖,避免每次重建整个镜像。
  • RUN npm install:在构建镜像时安装依赖,提升运行效率。
  • EXPOSE:声明端口,但不实际映射。
  • CMD:容器启动时执行的命令。

构建并运行容器:让应用跑起来

现在,我们来构建镜像并启动容器。

1. 构建镜像

docker build -t my-node-app .
  • docker build:构建镜像。
  • -t my-node-app:为镜像打上标签(名字),方便后续使用。
  • .:表示当前目录是构建上下文。

构建过程会输出详细日志,完成后你可以通过以下命令查看镜像:

docker images

你会看到类似输出:

REPOSITORY       TAG       IMAGE ID       CREATED         SIZE
my-node-app      latest    abcdef123456   2 minutes ago   234MB

2. 运行容器

docker run -p 3000:3000 my-node-app
  • docker run:运行一个容器。
  • -p 3000:3000:将主机的 3000 端口映射到容器的 3000 端口。
  • my-node-app:要运行的镜像名称。

运行后你会看到控制台输出:

服务器运行在 http://localhost:3000

打开浏览器,访问 http://localhost:3000,你就能看到欢迎页面了!


常见问题与最佳实践

1. 端口冲突怎么办?

如果你看到提示“port already in use”,说明 3000 端口被占用。可以改用其他端口:

docker run -p 3001:3000 my-node-app

然后访问 http://localhost:3001

2. 开发时如何热更新?

在开发阶段,我们希望代码修改后能自动重启服务。可以通过 docker run 加入 --watch 参数,但 Docker 本身不支持自动重启。推荐使用 nodemon

npm install -g nodemon

然后修改 Dockerfile 中的 CMD

CMD ["nodemon", "server.js"]

并确保在容器中安装 nodemon

RUN npm install -g nodemon

3. 多版本 Node.js 共存

如果你需要同时支持 Node 16 和 Node 18,可以分别构建两个镜像:

docker build -t my-app-node16 -f Dockerfile.node16 .
docker build -t my-app-node18 -f Dockerfile.node18 .

通过不同标签区分,实现版本隔离。


总结:Docker 安装 Node.js 的价值

通过本文,你已经掌握了使用 Docker 安装 Node.js 的完整流程。从环境准备、镜像拉取、项目构建到容器运行,每一步都清晰可见。

更重要的是,你学会了一种现代开发的思维:把环境打包,让应用“所到之处,皆可运行”。这种模式不仅提升了开发效率,也降低了协作成本。

无论你是初学者,还是已有项目经验的中级开发者,Docker 都能让你的 Node.js 开发更稳定、更高效。下一次当你遇到“环境问题”时,不妨试试用 Docker 来解决——它可能就是你最需要的“救星”。

现在,就动手试试吧,让你的 Node.js 项目真正“跑起来”!