WebStorm 2026.1 Help

教程:将 Node.js Express 应用程序容器化

您可以使用 Docker 将应用程序与特定的运行环境及其他必要的依赖项一起打包为镜像。然后使用该镜像运行容器,以查看应用程序在此环境中的运行效果。这被称为应用程序的容器化。 然后,您可以从该镜像运行一个容器,以查看该应用程序在此环境中的运行情况。 这是将应用程序 dockerizing

本教程介绍如何创建一个 Dockerfile,以使用 Node.js 22 和 Node.js Express 应用程序构建 Docker 镜像。它还展示了如何与他人共享此镜像,并基于该镜像运行 Docker 容器。 此外,它还展示如何与他人共享此镜像并从中运行一个 Docker 容器。

示例 1:将一个简单的 Node.js 应用程序容器化

让我们从一个简单的 Node.js Express 应用程序开始。 该应用程序包含一个 hello_express.js 文件,它返回 Hello World!并在控制台中输出 Example app listening on port 3000!

使用 Node.js 创建一个空项目

  1. 请点击 新建项目欢迎屏幕或从主菜单中选择 文件 | 新建 | 项目

  2. 在打开的对话框中,在左侧窗格中选择 Node.js

  3. 指定应用程序的位置及其名称,例如: hello_world_docker

  4. 指定要使用的本地 Node.js 运行时。 接受建议的安装,或从列表中选择另一个,或者如果您的计算机尚未安装 Node.js,可点击 下载 进行安装。 详细了解 创建新的 Node.js 应用程序

    使用 Node.js 创建一个空项目
  5. 点击 创建

填充应用程序

  1. 现在我们将为应用程序创建一个单独的文件夹,这将帮助我们稍后将本地文件夹映射到容器中的文件夹。

    为此,请打开 项目 工具窗口 Alt+1 ,右键点击项目文件夹,从上下文菜单中选择 新建 ,然后选择 目录。 在弹出对话框中,指定文件夹名称,例如: app

    创建一个应用程序文件夹
  2. 现在是时候创建一个 JavaScript 文件来存放应用程序的代码了。

    app 文件夹的上下文菜单中,选择 新建 ,然后选择 JavaScript 文件

    创建一个 JavaScript 文件(上下文菜单)

    在弹出的对话框中,指定文件名称,例如: hello_express.js

    创建一个 JavaScript 文件
  3. 在编辑器中打开新创建的 hello_express.js 文件并输入以下代码:

    const express = require('express'); const app = express(); app.get('/', function(req, res) { res.send('Hello World!') }); app.listen(3000,function() { console.log('Example app listening on port 3000!') });
  4. 正如所预期的那样, express 引用无法解析,并被标记为错误。 但是,当您将鼠标悬停在引用上时,WebStorm 会建议进行快速修复。

    未安装 Express — 提供快速修复建议

    当您点击 安装 'express' 链接时, express 将被添加到 package.json 文件中并安装。

    package.json - 已安装 Express

在本地运行应用程序

让我们在本地运行应用程序,以确保其按预期工作。

  • 打开 hello_express.js 文件,在编辑器选项卡中的任意位置右键点击,然后在上下文菜单中选择 运行 'hello_express.js'

    在本地运行应用程序

    运行 工具窗口已打开,显示 Example app listening on port 3000!

    如果您在 http://localhost:3000 地址打开浏览器,将会看到页面如预期那样显示 Hello World!

    应用程序正在本地运行

创建 Dockerfile

  1. 在项目文件夹的上下文菜单中,选择 新建 ,然后选择 Dockerfile

    创建 Dockerfile(上下文菜单)
  2. 打开新创建的 Dockerfile ,并输入以下代码:

    FROM node:22-alpine WORKDIR /tmp COPY package*.json . RUN npm ci --omit=dev COPY ./app/ ./app/ CMD ["node","./app/hello_express.js"]

    Dockerfile 包含基于 node:22 镜像从 Docker Hub 构建镜像的指令。

    当您从此镜像运行容器时,Docker 会将 /app/ 目录的内容复制到容器中的 /tmp/app/ 目录(在我们的示例中, /app/ 目录包含 hello_express.js 文件)。 package.json 文件将被复制到 /tmp/

    然后 Docker 将当前工作目录设置为 /tmp 并运行 node ./app/hello_express.js。 因此,容器日志中应显示 Example app listening on port 3000!

从 Dockerfile 构建并运行镜像

  1. 在编辑器中打开 Dockerfile ,点击 在 Docker 上运行图标 装订区域图标,选择 运行 ,然后选择 在 'Docker' 上运行

    从编辑器运行 Dockerfile
  2. WebStorm 创建一个 Dockerfile 运行配置 ,该配置从 Dockerfile 构建一个镜像,然后基于该镜像运行一个容器。

    服务工具窗口,日志选项卡

    要跟踪整个过程,请在 构建日志 工具窗口中打开 服务 选项卡。

    查看完整日志
  3. 您可以与他人共享此镜像,例如,无需安装 Node.js(仅需 Docker),即可准确展示您的应用程序预期的运行方式。

我们现在有一个在容器中运行的 Express 应用程序,正在侦听 3000 端口。 但我们无法从外部连接到它。 我们需要暴露容器端口,然后将其绑定到主机端口。

公开容器端口

  • 打开您的 Dockerfile 并添加以下行:

    EXPOSE 3000

    您的 Dockerfile 现在如下所示:

    FROM node:22-alpine WORKDIR /tmp COPY package*.json . RUN npm ci --omit=dev COPY ./app/ ./app/ EXPOSE 3000 CMD ["node","./app/hello_express.js"]

将容器端口绑定到主机端口

您可以通过两种方式进行端口绑定:

  • 在运行 Dockerfile 时,WebStorm 会生成一个运行/调试配置。 在此情况下,您需要使用以下命令重新启动容器:

  • 在正在运行的容器中。

在运行/调试配置中绑定端口

当您按照上述方式运行 Dockerfile 时,WebStorm 会创建一个类型为 Dockerfile临时运行/调试配置 ,默认名称为 Dockerfile。 此配置基于所使用 Dockerfile 中的设置,没有包含任何端口绑定信息。

  1. 在主工具栏上的 运行微件 中,选择自动生成的 Dockerfile 运行配置,然后点击 “更多操作”图标 ,再选择 编辑

    从运行微件中打开 Dockerfile 运行配置
  2. 在打开的 运行/调试配置 对话框中,在左侧窗格选择 Dockerfile 运行配置,然后点击工具栏上的 保存配置图标

    保存临时 Dockerfile 配置
  3. 在右侧窗格中,点击 修改选项 ,然后选择 绑定端口

    Dockerfile 配置 — 绑定端口
  4. 绑定端口 字段中,点击 “浏览”按钮 ,然后在打开的 端口绑定 对话框中点击 "添加"按钮

    容器端口 字段中,指定应用程序在容器中运行的端口,本示例中为 3000

    主机端口 字段中,指定从容器外部访问应用程序时使用的端口,例如 3001

    指定容器端口和主机端口

    点击 确定 后,对话框将关闭,您将返回到 运行/调试配置 对话框,其中在 绑定端口 字段中指定了端口绑定:

    端口已绑定

在运行中的容器中绑定端口

  1. 如上所述运行您的应用程序。

  2. 仪表板 选项卡中,在 端口 区域点击 添加 ,然后指定容器端口,在本例中为 3000

    绑定端口 — 指定容器端口

    点击 修改选项 ,勾选 主机端口 ,并在新增的字段中指定主机端口。 在本示例中,设为 3001

    在运行中的容器中绑定端口

无论您以何种方式指定了端口绑定,现在都可以通过 http ://localhost:30001 打开应用程序:

端口已绑定,应用程序在浏览器中以 3001 打开

示例 2:容器化具有复杂文件夹结构的 Node.js Express 应用程序

在本示例中,我们将使用一个具有更复杂文件夹结构的 Express 应用程序。

创建一个 Node.js Express 应用程序

  1. 请点击 新建项目欢迎屏幕或从主菜单中选择 文件 | 新建 | 项目

  2. 在打开的对话框中,在左侧窗格中选择 Express

  3. 指定应用程序的位置及其名称,例如: node_express_docker

  4. 指定要使用的本地 Node.js 运行时。 接受建议的安装,或从列表中选择另一个,或者如果您的计算机尚未安装 Node.js,可点击 下载 进行安装。 详细了解 创建新的 Node.js 应用程序

    创建一个 Node.js Express 应用程序
  5. 接受 视图引擎样式表引擎 的默认设置。

  6. 点击 创建

WebStorm 会生成一个简单的 Express 应用程序,并安装 package.json 中列出的依赖项。

在本地运行应用程序

为确保我们自动生成的应用程序可以正常工作,我们首先在本地运行它。 您可能会注意到,WebStorm 还生成了一个类型为 Node.jsbin/www 运行/调试配置。

  1. 从工具栏上的 运行 微件中选择 bin/www 运行/调试配置,然后点击其旁边的 运行 'bin/www' 图标

    在本地运行一个 Express 应用程序

    运行 工具窗口会打开,显示应用程序的输出。

    带有应用程序输出的运行工具窗口
  2. 在浏览器中打开 http://localhost:3000。 页面会显示一条欢迎消息:

    在浏览器中打开 Express 应用程序
  3. 我们稍微更新一下代码,这样就不需要打开浏览器,而是能够在控制台中获取来自应用程序的响应。 为此,请打开 bin/www ,例如,在 onListening() 函数中添加以下代码行:

    console.log("Hello world");

    如果现在重新运行应用程序, 运行 工具窗口如下所示:

    运行工具窗口中显示 Hello world

创建 Dockerfile

  1. 项目 工具窗口中,右键点击项目名称,指向 新建 并点击 文件

  2. 新建文件… 对话框中,键入 Dockerfile 并按 Enter

  3. 请将以下代码粘贴到新的 Dockerfile 中:

    FROM node:22-alpine WORKDIR /tmp COPY package*.json . RUN npm ci --omit=dev COPY ./bin/ ./bin/ COPY ./public/ ./public/ COPY ./routes/ ./routes/ COPY ./views/ ./views/ COPY ./app.js . CMD ["npm","start"]

    如您所见,此处我们逐步单独复制本地文件夹。

  4. 让我们通过向 Dockerfile 添加 EXPOSE 3000 来暴露容器端口:

    FROM node:22-alpine WORKDIR /tmp COPY package*.json . RUN npm ci --omit=dev COPY ./bin/ ./bin/ COPY ./public/ ./public/ COPY ./routes/ ./routes/ COPY ./views/ ./views/ COPY ./app.js . EXPOSE 3000 CMD ["npm","start"]

部署并运行应用程序

  • 要部署并运行应用程序,请点击 在 Docker 上运行图标 装订区域图标,选择 运行 ,然后选择 在 'Docker' 上运行。 应用程序现在正在容器中运行:

    应用程序已部署并在 Docker 容器中运行

绑定端口

要使应用程序可以从 Docker 容器外部访问,我们需要将容器端口(在示例中为 3000 )绑定到主机上的一个端口。

您可以直接在正在运行的容器中,或在 Dockerfile 运行/调试配置中执行此操作, 如上所述

  • 仪表板 选项卡中,在 端口 区域点击 添加 ,然后指定容器端口,在本例中为 3000

    绑定端口 — 指定容器端口

    点击 修改选项 ,勾选 主机端口 ,并在新增的字段中指定主机端口。 在本示例中,设为 3001

    在运行中的容器中绑定端口

无论您以何种方式指定了端口绑定,现在都可以通过 http://localhost :30001 打开应用程序:

端口已绑定,应用程序在浏览器中以 3001 打开
2026年 3月 24日