容器中的 Node.js
在本指南中,您将学习如何
- 为 Express Node.js 服务容器创建
Dockerfile
文件 - 构建、运行和验证服务的性能
- 调试在容器中运行的服务
先决条件
创建 Express Node.js 应用程序
-
为项目创建一个文件夹。
-
在项目文件夹中打开开发命令提示符,并创建项目
npx express-generator npm install
向项目添加 Docker 文件
-
在 VS Code 中打开项目文件夹。
-
打开命令面板 (⇧⌘P (Windows, Linux Ctrl+Shift+P)) 并使用 Docker: 将 Docker 文件添加到工作区... 命令
-
在提示您选择应用程序平台时,选择 Node.js。
-
选择默认的 package.json 文件。
-
在提示您输入应用程序端口时,输入
3000
。 -
在提示您是否要包含 Docker Compose 文件时,选择 是 或 否。Compose 通常用于同时运行多个容器。
该扩展将创建 Dockerfile
和 .dockerignore
文件。如果您选择包含 Docker Compose 文件,则还会生成 docker-compose.yml
和 docker-compose.debug.yml
。最后,该扩展将在 .vscode/tasks.json
中为构建和运行容器(在调试和发布配置中)创建一个 VS Code 任务 集,并在 .vscode/launch.json
中为在容器中调试服务创建一个 启动调试配置。
向映像添加环境变量
Docker 扩展通过使用 IntelliSense 提供自动完成和上下文帮助来帮助您编写 Dockerfile。要查看此功能的实际应用,请按照以下步骤将环境变量添加到服务映像中
-
打开
Dockerfile
文件。 -
使用
ENV
指令向服务容器映像添加环境变量。请注意 Docker 扩展如何列出所有可用的 Dockerfile 指令并描述语法。
Docker 扩展使用
Dockerfile
的base
阶段来创建服务容器映像的调试版本。将环境变量定义放在base
阶段中,以便此变量在容器映像的调试和发布版本中都可用。 -
保存
Dockerfile
文件。
在本地运行服务
-
打开终端 (⌃` (Windows, Linux Ctrl+`)).
-
输入
npm run start
来启动应用程序> [email protected] start /Users/user/code/scratch/express-app > node ./bin/www
-
打开 Web 浏览器,并导航到 https://127.0.0.1:3000。您应该看到一个类似于以下内容的页面
-
测试完成后,在终端中键入 Ctrl+C。
构建服务映像
-
打开命令面板 (⇧⌘P (Windows, Linux Ctrl+Shift+P)),并选择 Docker 映像: 构建映像... 命令。
-
打开 Docker 资源管理器,并验证新映像是否在映像树中可见
运行服务容器
-
右键单击上一节中构建的映像,并选择 运行 或 以交互方式运行。容器应启动,您应该能够在 Docker 容器树中看到它
-
打开 Web 浏览器,并导航到 https://127.0.0.1:3000。您应该看到一个类似于以下内容的页面
-
测试完成后,右键单击容器树中的容器,并选择 停止。
在服务容器中调试
当 Docker 扩展向应用程序添加文件时,它还会在 .vscode/launch.json
中添加一个 VS Code 调试器配置,用于在容器中运行时调试服务。该扩展将检测服务使用的协议和端口,并将浏览器指向该服务。
-
在
routes/index.js
中为'/'
路由的get()
处理程序设置一个断点。 -
确保已选择 Docker Node.js 启动 调试器配置。
-
开始调试(使用 F5 键)。
- 服务的 Docker 映像将构建。
- 服务的 Docker 容器将运行。
- 浏览器将打开到映射到服务容器的(随机)端口。
- 调试器将在
index.js
中的断点处停止。
请注意,由于调试器在应用程序启动 之后 附加,因此断点可能会在第一次尝试时错过;您可能需要刷新浏览器才能在第二次尝试时看到调试器中断。
您可以通过在
tasks.json
中node
对象下的docker-run: debug
任务中将 inspectMode 属性设置为break
来配置应用程序,使其在启动执行之前等待调试器附加。
查看应用程序日志
您可以通过在容器上使用 查看日志 命令在 VS Code 中查看日志
-
导航到 Docker 资源管理器。
-
在 容器 选项卡中,右键单击您的容器,然后选择 查看日志。
-
输出将在终端中显示。
后续步骤
您已经完成了!现在容器已经准备就绪,您可能想要