现已推出!阅读有关 11 月份新功能和修复的信息。

您的开发环境

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

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

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

选择开发环境的指南

  1. 当您不关心以下情况时,请使用本地环境

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

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

Docker 扩展原生支持基于 .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 VM。

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

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

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

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

  4. 在“扩展”视图中,安装 Docker 扩展(在远程主机上)(在此步骤之后可能需要重新加载)

    Screenshot - Installing the Docker extension

注意:如果您使用 Docker 扩展来构建 Docker 映像并且有源代码,则以上方法可能意味着您的源代码登记在远程主机上,而不是在您的开发人员工作站上。如果您仅将 Docker 扩展用于 Docker Explorer 功能,则可以忽略此内容。

本地 Linux VM

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

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

在容器中进行调试

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

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

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

由于上述问题,通常建议使用常规调试,并在必要时在容器中使用调试。

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

后续步骤

继续阅读以了解更多关于