参加你附近的 ,了解 VS Code 中的 AI 辅助开发。

您的开发环境

您可以选择是在本地环境中,还是在远程环境中开发基于容器的服务。本地环境是您的开发人员工作站的操作系统;使用本地环境意味着您使用安装在工作站上的 Docker 构建和运行服务容器。Docker 支持 Windows、macOS 和各种 Linux 发行版;有关系统和硬件要求,请参阅Docker 安装页面

远程开发环境与您的开发人员工作站不同。它可以是通过 SSH 访问的远程机器、在您的开发人员工作站上运行的虚拟机或开发容器。远程环境可能比本地环境具有优势,主要优势是在开发期间和您的服务在生产环境中运行时使用相同的操作系统。要使用远程环境,您需要确保在该环境中docker 命令(Docker CLI)可用并能正常工作

第二个重要选择是调试作为普通进程运行的服务,还是调试在容器中运行的服务。

选择开发环境的指南

  1. 当您不关心以下问题时,请使用本地环境:

    • 为开发和在服务容器内部使用相同的操作系统。
    • 在本地环境之上安装必要的工具和依赖项。
  2. 如果您需要远程环境,请首先考虑使用开发容器

  3. 调试在容器中运行的服务是可能的,但这会增加额外的复杂性。默认情况下使用常规调试,并在需要时在容器中进行调试。

容器工具扩展原生支持 .NET、Node.js 和 Python 服务的容器调试。

在远程开发环境中启用 Docker CLI

在远程开发环境中启用 Docker CLI 的方式因您选择的远程环境类型而异。

开发容器

对于开发容器,您应该将容器内的 Docker CLI 重定向到在本地机器上运行的 Docker 守护进程。

首先,确保 Docker CLI 已安装到您的开发容器中。具体步骤取决于容器使用的 Linux 发行版

以下是基于 Ubuntu 的发行版示例(来自 .devcontainer/Dockerfile):

    ...
    && apt-get -y install software-properties-common \
    && curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add - 2>/dev/null \
    && add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu bionic stable" \
    && apt-get update -y \
    && apt-get install -y docker-ce-cli \
    && apt-get install -y python python-pip \
    && pip install docker-compose \
    ...

接下来,确保 Docker 套接字已映射到开发容器中(在 .devcontainer/devcontainer.json 中):

    ...
    "runArgs": [ "-v", "/var/run/docker.sock:/var/run/docker.sock"]
    ...

适用于 Linux 的 Windows 子系统

适用于 Linux 的 Windows 子系统是 Windows 上基于容器服务开发的绝佳选择。适用于 Linux 的 Windows 子系统版本 2 (WSL 2) 强烈推荐。适用于 Windows 的 Docker Desktop 已更新为与 WSL 2 配合使用,并具有一个图形设置,可在 WSL 2 发行版中启用 Docker CLI。

Enable Docker inside WSL 2 distribution

要将 WSL 2 用于 Docker 开发,您需要 Windows 10 版本 2004 或更高版本,以及适用于 Windows 的 Docker Desktop 版本 2.2.0.5 或更高版本。

旧版本的 WSL (WSL 1) 不提供连接到主机上的 Docker 守护进程的简单方法。

远程机器

使用远程机器启用容器开发的推荐方法是在机器上完整安装 Docker,包括 Docker 守护进程。

注意:Docker Desktop 产品仅支持物理 Windows 和 macOS 机器,不支持虚拟机。如果您想使用虚拟机作为远程开发环境,我们建议使用安装有Docker Engine 的 Linux 虚拟机。

在远程机器上安装并运行 Docker 后,您可以使用 VS Code 的 Remote - SSH 扩展(来自 Remote Development 扩展包)连接到您的远程机器并在那里工作。

  1. 打开 VS Code 命令面板(⇧⌘P (Windows, Linux Ctrl+Shift+P))并运行命令 Remote-SSH: Add new SSH host...。按照提示设置与目标主机的连接。

  2. 运行命令 Remote-SSH: Connect to host... 并连接到主机。

  3. 一个新的 VS Code 窗口将打开,并在目标机器的上下文中运行。如果您使用密码验证,此处将提示输入密码。我们强烈建议您设置SSH 密钥验证,以方便使用。

  4. 在扩展视图中,安装容器工具扩展(在远程主机上)(此步骤后可能需要重新加载)。

    Screenshot - Installing the Container Tools extension

注意:如果您使用容器工具扩展构建容器镜像并拥有源代码,上述方法可能意味着您的源代码在远程主机上,而不是在您的开发人员工作站上。如果您只是使用容器工具扩展的容器资源管理器功能,则可以忽略此项。

本地 Linux 虚拟机

要使用在您的开发人员工作站上运行的 Linux 虚拟机,您应该像在远程机器上一样在虚拟机上安装 Docker,并使用VS Code Remote-SSH 扩展连接到虚拟机。

或者,您可以在开发环境中只安装 Docker CLI,并使用Docker 上下文机制将 CLI 指向在开发人员工作站上运行的 Docker 主机(引擎)。这种方法的主要问题是确保从虚拟机到主机上的 Docker 引擎的网络连接,并以安全的方式进行连接。一个选项是使用SSH 隧道远程隧道到开发人员工作站。另一个选项是让 Docker 引擎监听 HTTPS 端口。您需要精通 SSH 和公钥基础设施 (PKI) 才能从在虚拟机中运行的 Docker CLI 使用主机 Docker 引擎。对于大多数用户,我们建议在虚拟机中进行完整的 Docker 安装。

在容器中调试

容器工具扩展支持调试在容器中运行的基于 .NET 和 Node.js 的服务。目前不支持其他编程语言。

在容器中调试可能比常规调试更难设置,因为容器是一种比进程更强的隔离机制。特别是:

  • 在 VS Code 进程中运行的调试引擎需要与正在调试的服务进程通信。在服务在容器中运行的情况下,这意味着通过公共网络(通常是 Docker 主机网络)进行网络通信。容器需要通过 Docker 主机网络公开适当的端口,以便调试引擎连接到服务进程 (Node.js) 或在容器中运行的调试器代理 (.NET)。
  • 在构建时生成的源文件信息在构建环境(VS Code 运行的地方)的上下文中是有效的。容器文件系统与构建环境文件系统不同,需要重新映射源文件路径,以便在命中断点时调试器显示正确的源文件。

由于上述原因,通常建议使用常规调试,并在必要时使用容器内调试。

有关如何在容器内设置调试的更多信息,请参阅ASP.NET Core 快速入门Node.js 快速入门容器工具扩展任务属性docker-builddocker-run 任务)。

后续步骤

继续阅读以了解更多信息