尝试以扩展 VS Code 中的代理模式!

容器中的 Node.js

在本指南中,您将学习如何

  • Express Node.js 服务容器创建 Dockerfile 文件
  • 构建、运行并验证服务的功能
  • 调试在容器中运行的服务

先决条件

  • 必须按照概述中所述安装 Docker 和 VS Code 容器工具扩展
  • Node.js 版本 10 或更高

创建 Express Node.js 应用程序

  1. 创建项目文件夹。

  2. 在项目文件夹中打开开发命令提示符并创建项目

    npx express-generator
    npm install
    

向项目添加 Docker 文件

  1. 在 VS Code 中打开项目文件夹。

  2. 打开命令面板(⇧⌘P(Windows、Linux Ctrl+Shift+P),然后使用“**容器:将 Docker 文件添加到工作区...**”命令

    Add Dockerfile to a Node.js project

  3. 当系统提示选择应用程序平台时,选择“**Node.js**”。

  4. 选择默认的 **package.json** 文件。

  5. 当系统提示输入应用程序端口时,输入 3000

  6. 当系统提示是否包含 Docker Compose 文件时,选择“**是**”或“**否**”。Compose 通常用于同时运行多个容器的情况。

此扩展会创建 Dockerfile.dockerignore 文件。如果您选择包含 Docker Compose 文件,还会生成 docker-compose.ymldocker-compose.debug.yml。最后,此扩展会在 .vscode/tasks.json 中创建一组 **VS Code 任务**,用于构建和运行容器(包括调试和发布配置),并在 .vscode/launch.json 中创建 **启动调试配置**,用于调试容器中的服务。

向镜像添加环境变量

容器工具扩展通过使用 IntelliSense 来提供自动补全和上下文帮助,从而协助您编写 Dockerfile。要查看此功能的实际效果,请按照以下步骤向服务镜像添加环境变量

  1. 打开 Dockerfile 文件。

  2. 使用 ENV 指令向服务容器镜像添加环境变量。

    Add an environment variable to Docker image

    请注意,容器工具扩展会列出所有可用的 Dockerfile 指令并描述其语法。

    容器工具扩展使用 Dockerfilebase 阶段来为您的服务创建容器镜像的调试版本。将环境变量定义放在 base 阶段,以便此变量在容器镜像的调试和发布版本中都可用。

  3. 保存 Dockerfile 文件。

在本地运行服务

  1. 打开终端(⌃`(Windows、Linux Ctrl+`)。

  2. 输入 npm run start 以启动应用程序

    > express-app@0.0.0 start /Users/user/code/scratch/express-app
    > node ./bin/www
    
  3. 打开 Web 浏览器并导航到 https://:3000。您应该会看到一个类似于以下的页面

    Application page in browser

  4. 测试完成后,在终端中键入 Ctrl+C

构建服务镜像

  1. 打开命令面板(⇧⌘P(Windows、Linux Ctrl+Shift+P),然后选择“**容器镜像:构建镜像...**”命令。

  2. 打开容器资源管理器并验证新镜像在“镜像”视图中可见

    Verify Docker image exists

运行服务容器

  1. 右键单击上一节中构建的镜像,然后选择“**运行**”或“**交互式运行**”。容器应会启动,您应该能在“容器”视图中看到它

    Running service container

  2. 打开 Web 浏览器并导航到 https://:3000。您应该会看到一个类似于以下的页面

    Application page in browser

  3. 测试完成后,右键单击“容器”视图中的容器,然后选择“**停止**”。

在服务容器中调试

当容器工具扩展向应用程序添加文件时,它还在 .vscode/launch.json 中添加了一个 **VS Code 调试器配置**,用于调试在容器内运行的服务。该扩展会检测服务使用的协议和端口,并将浏览器指向该服务。

  1. routes/index.js'/' 路由的 get() 处理程序中设置一个断点。

  2. 确保已选择“**容器:Node.js 启动**”调试器配置。

    Selected debug configuration

  3. 开始调试(使用 F5 键)。

    • 服务的镜像正在构建。
    • 服务的容器正在运行。
    • 浏览器打开映射到服务容器的(随机)端口。
    • 调试器在 index.js 中的断点处停止。

    请注意,由于调试器是在应用程序启动_后_才附加的,因此第一次可能无法命中断点;您可能需要刷新浏览器才能在第二次尝试时看到调试器断点。

    您可以将 tasks.jsonnode 对象下 docker-run: debug 任务的 inspectMode 属性设置为 break,以配置应用程序在调试器附加后再开始执行。

查看应用程序日志

您可以通过在容器上使用“**查看日志**”命令来在 VS Code 中查看日志

  1. 导航到容器资源管理器。

  2. 在“**容器**”视图中,右键单击您的容器并选择“**查看日志**”。

    Screenshot of logs in the terminal

  3. 输出将显示在终端中。

后续步骤

你已完成!现在你的容器已准备就绪,你可能想