本站点文档内容均翻译自code.visualstudio.com,仅供个人学习,如有差异请以官网为准。

您的开发环境

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

一个远程开发环境 与您的开发工作站不同。它可以是通过SSH访问的远程机器,也可以是运行在您的开发工作站上的虚拟机,或者是一个开发容器。远程环境可能比本地环境有优势,主要优势是在开发和生产中可以使用相同的操作系统。要使用远程环境,您需要确保Docker command (Docker CLI) 在该环境中可用且功能正常.

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

选择开发环境的指南

  1. 在以下情况下使用本地环境:

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

    • 在 Windows 上,使用 Windows Subsystem for Linux (WSL) 是一个不错的选择。
  3. 在容器中调试您的服务是可能的,但会带来额外的复杂性。默认情况下使用常规调试,当需要时在容器中进行调试。

Container Tools 扩展原生支持 .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 子系统

Windows Subsystem for Linux 代表了在 Windows 上进行基于容器的服务开发的一个绝佳选择。Windows Subsystem for Linux 版本 2 (WSL 2)强烈推荐。Docker Desktop for Windows 已更新以与 WSL 2 兼容,并且有一个图形化设置可以在 WSL 2 分发版中启用 Docker CLI:

在WSL 2发行版内启用Docker

要使用WSL 2进行Docker开发,您需要Windows 10版本2004或更高版本,以及Docker Desktop for Windows版本2.2.0.5或更高版本。

旧版的WSL(WSL 1)没有提供一个简单的方法来连接到主机上的Docker守护进程。

远程机器

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

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

在远程机器上安装并运行Docker后,您可以使用VS Code的Remote - SSH扩展,从远程开发扩展包中连接到您的远程机器并在其上工作。

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

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

  3. 一个新的 VS Code Windows在目标机器的上下文中打开。如果你使用密码认证,密码将在此处被要求。我们强烈建议你设置SSH 密钥认证,以便于使用。

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

    截图 - 安装容器工具扩展

注意:如果您正在使用 Container Tools 扩展来构建容器镜像并且拥有源代码,那么上述方法可能意味着您的源代码注册在远程主机上,而不是在您的开发工作站上。如果您只是使用 Container Tools 扩展的 Container Explorer 功能,则可以忽略此内容。

本地 Linux 虚拟机

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

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

在容器中调试

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

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

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

由于上述担忧,通常建议使用常规调试,并在必要时在容器中进行调试。

有关在容器内设置调试的更多信息,请参见ASP.NET Core 快速入门Node.js 快速入门容器工具扩展任务属性 (Docker 构建docker运行任务)。

下一步

继续阅读以了解更多关于