您的開發環境

您可以選擇在本機環境遠端環境中開發基於容器的服務。本機環境即您開發工作站的作業系統;使用本機環境意味著您將使用安裝在工作站上的 Docker 來建置並執行您的服務容器。Docker 支援 Windows、macOS 以及各種 Linux 發行版;關於系統與硬體需求,請參考 Docker 安裝頁面

遠端開發環境與您的開發工作站不同。它可以是透過 SSH 存取的遠端機器、在開發工作站上執行的虛擬機器,或是開發容器。相較於本機環境,遠端環境具有多項優勢,其中最主要的是能在開發過程中以及服務正式部署時,使用相同的作業系統。若要使用遠端環境,您需要確保 docker 指令(Docker CLI)在該環境中是可用且正常的

第二個重要的選擇是,您要以一般處理序 (process) 的方式偵錯您的服務,還是以執行在容器中的方式進行偵錯。

選擇開發環境的準則

  1. 當您不介意以下事項時,請使用本機環境:

    • 開發環境與服務容器內部使用相同的作業系統。
    • 在本機環境中安裝必要的工具與相依套件。
  2. 如果您需要遠端環境,請優先考慮使用開發容器 (development container)

  3. 在容器中偵錯您的服務是可行的,但會增加複雜度。預設請使用一般偵錯,僅在必要時才使用容器內偵錯。

Container Tools 擴充功能原生支援針對 .NET、Node.js 及 Python 服務的容器偵錯。

在遠端開發環境中啟用 Docker CLI

在遠端開發環境中啟用 Docker CLI 的方式,取決於您所選擇的遠端環境類型。

開發容器

對於開發容器,您應該將容器內的 Docker CLI 重新導向至在本機執行的 Docker daemon。

首先,確保 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 socket 已對應至開發容器內(在 .devcontainer/devcontainer.json 中)

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

Windows 子系統 Linux 版

Windows Linux 子系統是 Windows 上進行容器化服務開發的絕佳選擇。強烈建議使用 Windows Linux 子系統第 2 版 (WSL 2)。Docker Desktop for Windows 已更新為可與 WSL 2 配合使用,並提供了圖形化設定來在 WSL 2 發行版中啟用 Docker CLI。

Enable Docker inside WSL 2 distribution

若要使用 WSL 2 進行 Docker 開發,您需要 Windows 10 版本 2004 或更新版本,以及 Docker Desktop for Windows 版本 2.2.0.5 或更新版本。

舊版 WSL (WSL 1) 並未提供連接至主機 Docker daemon 的簡易方法。

遠端機器

建議在遠端機器上進行容器開發的方式,是直接在該機器上進行完整的 Docker 安裝,包含 Docker daemon。

注意:Docker Desktop 產品僅支援實體 Windows 和 macOS 機器,不支援虛擬機器。如果您想使用虛擬機器作為遠端開發環境,我們建議使用搭配 Docker Engine 的 Linux VM。

在遠端機器上安裝並成功執行 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. 在擴充功能檢視中,安裝 Container Tools 擴充功能(於遠端主機上)(此步驟完成後可能需要重新載入)

    Screenshot - Installing the Container Tools extension

注意:如果您正在使用 Container Tools 擴充功能來建置容器映像檔並擁有原始程式碼,上述方法意味著您的原始碼位於遠端主機上,而非您的開發工作站。若您僅是使用 Container Tools 的 Container Explorer 功能,則可忽略此點。

本機 Linux VM

若要使用執行於開發工作站上的 Linux 虛擬機器,您應該以與安裝在遠端機器相同的方式在 VM 上安裝 Docker,並使用 VS Code Remote-SSH 擴充功能連線至該 VM。

或者,您也可以僅在開發環境中安裝 Docker CLI,並使用 Docker context 機制將 CLI 指向執行在開發工作站上的 Docker 主機 (engine)。此方法的主要考量在於確保 VM 與主機 Docker engine 之間的網路連通性,並以安全的方式進行。一種選擇是使用 SSH 通道Remote - Tunnels 連接到開發工作站。另一種選項是讓 Docker engine 監聽 HTTPS 通訊埠。您需要熟悉 SSH 與公開金鑰基礎建設 (PKI) 才能從執行在 VM 內的 Docker CLI 使用主機端的 Docker engine。對於大多數使用者,我們建議在虛擬機器內進行完整的 Docker 安裝。

在容器中進行偵錯

Container Tools 擴充功能支援針對執行於容器內部的 .NET 與 Node.js 服務進行偵錯。目前不支援其他程式語言。

在容器中進行偵錯可能比一般偵錯更難設定,因為容器是比處理序更強的隔離機制。特別是:

  • 執行在 VS Code 處理序內的偵錯引擎需要與被偵錯的服務處理序通訊。對於執行在容器內的服務,這意味著需要透過共同網路(通常是 Docker 主機網路)進行網路通訊。容器需要透過 Docker 主機網路開放適當的連接埠,以便偵錯引擎連線至服務處理序 (Node.js),或連線至執行在容器內部的偵錯代理程式 (.NET)。
  • 建置期間產生的原始檔案資訊在建置環境(VS Code 執行所在位置)的內容中是有效的。容器檔案系統與建置環境檔案系統不同,為了在觸發中斷點時讓偵錯器顯示正確的原始檔案,必須重新對應原始檔案路徑。

基於上述考量,通常建議使用一般偵錯,僅在必要時才使用容器內偵錯。

關於如何設定容器內偵錯的更多資訊,請參閱 ASP.NET Core 快速入門Node.js 快速入門,以及 Container Tools 擴充功能工作屬性 (docker-builddocker-run 工作)。

後續步驟

繼續閱讀以深入了解:

© . This site is unofficial and not affiliated with Microsoft.