WebStorm 2025.3 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 包含从 Docker Hub 中的 node:22 镜像构建镜像的指令。

    当您从该镜像运行容器时,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 构建一个镜像,然后基于该镜像运行一个容器。

    Services 工具窗口,日志选项卡

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

    查看完整日志
  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运行配置,然后点击 “更多操作”图标 ,再选择 编辑

    从 Run 微件打开 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 还生成了一个类型为 bin/wwwNode.js 运行/调试配置。

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

    本地运行 Express 应用程序

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

    Run 工具窗口中显示应用程序输出
  2. 在浏览器中打开 http://localhost:3000。 该页面显示欢迎信息:

    Express 应用程序在浏览器中打开
  3. 我们稍微更新一下代码,以便无需打开浏览器,也能在控制台中从应用程序获得响应。 为此,请打开 bin/www ,并在 onListening() 函数中添加如下行:

    console.log("Hello world");

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

    Run 工具窗口中显示 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 端口打开
最后修改日期: 2025年 12月 8日