您的開發環境
您可以選擇在本機環境或遠端環境中開發以容器為基礎的服務。本機環境是您開發人員工作站的作業系統;使用本機環境表示您使用工作站上安裝的 Docker 建置和執行服務容器。Windows、macOS 和各種 Linux 發行版本均支援 Docker;如需系統和硬體需求,請參閱 Docker 安裝頁面。
遠端開發環境與您的開發人員工作站不同。它可以是透過 SSH 存取的遠端機器、在您的開發人員工作站上執行的虛擬機器,或是開發容器。遠端環境可能比本機環境更具優勢,主要優勢是在開發期間以及服務在生產環境中執行時,能夠使用相同的作業系統。若要使用遠端環境,您需要確保 docker
命令 (Docker CLI) 在該環境中可用且可運作。
第二個重要的選擇是偵錯以一般程序執行的服務,還是偵錯在容器中執行的服務。
選擇開發環境的指南
-
當您不擔心下列事項時,請使用本機環境
- 針對開發和服務容器內部使用相同的作業系統。
- 在本機環境之上安裝必要的工具和相依性。
-
如果您需要遠端環境,請優先考慮使用開發容器。
- 在 Windows 上,使用 適用於 Linux 的 Windows 子系統 (WSL) 是不錯的選擇。
-
在容器中偵錯服務是可行的,但會帶來額外的複雜性。預設情況下使用一般偵錯,並在需要時使用容器中的偵錯。
Docker 擴充功能原生支援以 .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"]
...
適用於 Linux 的 Windows 子系統
適用於 Linux 的 Windows 子系統是在 Windows 上進行以容器為基礎之服務開發的絕佳選擇。強烈建議使用適用於 Linux 的 Windows 子系統版本 2 (WSL 2)。Docker Desktop for Windows 已更新為可與 WSL 2 搭配使用,並具有圖形化設定,可在 WSL 2 發行版本中啟用 Docker CLI
若要將 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 擴充功能套件連線至您的遠端機器並在那裡工作。
-
開啟 VS Code 命令面板 (⇧⌘P (Windows、Linux Ctrl+Shift+P)) 並執行命令Remote-SSH: Add new SSH host...。依照提示設定與目標主機的連線。
-
執行命令 Remote-SSH: Connect to host... 並連線至主機。
-
隨即會開啟新的 VS Code 視窗,並在目標機器的內容中執行。如果您使用密碼驗證,系統會在此處提示您輸入密碼。我們強烈建議您設定 SSH 金鑰驗證,以方便使用。
-
在 [擴充功能] 檢視中,安裝 Docker 擴充功能 (在遠端主機上) (此步驟之後可能需要重新載入)
注意:如果您使用 Docker 擴充功能來建置 Docker 映像並具有原始碼,則上述方法可能表示您的原始碼登錄在遠端主機上,而不是在您的開發人員工作站上。如果您僅將 Docker 擴充功能用於 Docker Explorer 功能,則可以忽略此事項。
本機 Linux VM
若要使用在您的開發人員工作站上執行的 Linux 虛擬機器,您應該在 VM 上安裝 Docker,方式與在遠端機器上安裝 Docker 的方式相同,並使用 VS Code Remote-SSH 擴充功能連線至 VM。
或者,您可以在開發環境中僅安裝 Docker CLI,並使用 Docker context 機制,將 CLI 指向在開發人員工作站上執行的 Docker 主機 (引擎)。此方法的主要考量是確保從 VM 到主機上 Docker 引擎的網路連線能力,並以安全的方式進行。其中一個選項是使用SSH 通道或Remote - Tunnels 連線至開發人員工作站。另一個選項是讓 Docker 引擎接聽 HTTPS 連接埠。您需要精通 SSH 和公開金鑰基礎架構 (PKI),才能從 VM 內執行的 Docker CLI 使用主機 Docker 引擎。對於大多數使用者,我們建議在虛擬機器中完整安裝 Docker。
在容器中偵錯
Docker 擴充功能支援偵錯在容器內執行的 .NET 和 Node.js 型服務。目前不支援其他程式設計語言。
在容器中偵錯可能比一般偵錯更難設定,因為容器是比程序更強大的隔離機制。尤其
- 在 VS Code 程序中執行的偵錯引擎需要與正在偵錯的服務程序通訊。如果服務在容器內執行,則表示需要透過通用網路 (通常是 Docker 主機網路) 進行網路通訊。容器需要透過 Docker 主機網路公開適當的連接埠,偵錯引擎才能連線至服務程序 (Node.js) 或在容器內執行的偵錯工具 Proxy (.NET)。
- 在組建時間產生的原始檔資訊在組建環境 (VS Code 執行所在位置) 的內容中有效。容器檔案系統與組建環境檔案系統不同,且需要重新對應原始檔的路徑,偵錯工具才能在命中中斷點時顯示正確的原始檔。
由於上述考量,一般建議使用一般偵錯,並在必要時才在容器中使用偵錯。
如需關於如何在容器內設定偵錯的詳細資訊,請參閱 ASP.NET Core 快速入門、Node.js 快速入門和 Docker 擴充功能工作屬性 (docker-build
和 docker-run
工作)。
後續步驟
請繼續閱讀以深入瞭解