快速入門:Visual Studio 中的 Docker
使用 Visual Studio,您可以輕鬆地建置、偵錯及執行容器化 .NET、ASP.NET,以及 ASP.NET Core 應用程式,並將其發佈至 Azure Container Registry、Docker Hub、Azure App Service 或您自己的 Container Registry。 在本文中,我們會將 ASP.NET Core 應用程式發佈至 Azure Container Registry。
先決條件
- Docker Desktop
- 已安裝 Web Development、Azure Tools 工作負載和/或 .NET Core 跨平台開發 工作負載的 Visual Studio 2019
- .NET Core 開發工具 使用 .NET Core 進行開發
- 若要發佈至 Azure Container Registry,Azure 訂用帳戶。 註冊免費試用。
安裝和設定
針對 Docker 安裝,請先檢閱適用於 Windows Docker Desktop 的資訊:安裝之前要知道的事項。 接下來,安裝 Docker Desktop。
將專案新增至 Docker 容器
使用 ASP.NET Core Web App 樣本建立新專案,或如果您想要使用 .NET Framework 而非 .NET Core,請選擇 ASP.NET Web 應用程式 (.NET Framework)。
在 [[建立新的 Web 應用程式] 畫面上,確定已選取 [啟用 Docker 支援] 複選框。
此螢幕快照顯示 .NET Core;如果您使用 .NET Framework,看起來有點不同。
選擇您要的容器類型(Windows 或 Linux),然後按下 [建立] 。
Dockerfile 概觀
在專案中被建立的 Dockerfile是一個用於製作最終 Docker 映像的配方。 如需瞭解其內的命令,請參閱 Dockerfile 參考。
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1 AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build
WORKDIR /src
COPY ["WebApplication1/WebApplication1.csproj", "WebApplication1/"]
RUN dotnet restore "WebApplication1/WebApplication1.csproj"
COPY . .
WORKDIR "/src/WebApplication1"
RUN dotnet build "WebApplication1.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "WebApplication1.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "WebApplication1.dll"]
上述 Dockerfile 是以 dotnet/core/aspnet 映射為基礎,並包含透過建置專案並將其新增至容器來修改基底映射的指示。 如果您使用 .NET Framework,基底映射將會不同。
當勾選新專案對話框中的 設定 HTTPS 複選框時,Dockerfile 會開放兩個埠。 一個埠用於 HTTP 流量;另一個埠用於 HTTPS。 如果沒有勾選該核取方塊,則將公開一個單一埠口(80)供 HTTP 流量使用。
除錯
從工具列中的 [偵錯] 下拉式清單中選取 [Docker],然後開始對應用程式進行偵錯。 您可能會看到訊息,其中包含信任憑證的提示;選擇信任憑證以繼續。
在 [輸出] 視窗中的 [Container Tools] 選項會顯示正在進行的操作。 第一次下載基底映射可能需要一些時間,但後續執行速度會快得多。
容器視窗
如果您有 Visual Studio 2019 16.4 版或更新版本,您可以使用 Containers 視窗來檢視電腦上執行中的容器,以及可用的映像。
使用 IDE 中的搜尋方塊開啟 [容器] 視窗(按 ctrl+Q 以使用它),在 container
中輸入 ,然後從清單中選擇 [容器] 視窗。
您可以將 容器 視窗掛接在方便的位置,例如跟隨視窗放置指南將其放置在編輯器下方。
在視窗中,尋找您的容器,並逐一查看每個標籤,以查看環境變數、埠映射、日誌和文件系統。
如需詳細資訊,請參閱 使用 [容器] 視窗。
發佈 Docker 映像
完成應用程式的開發和偵錯周期之後,您就可以建立應用程式的生產映像。
將組態下拉式清單變更為 Release 並建置應用程式。
按一下右鍵在 [方案總管] 中的您的專案,然後選擇 [發行] 。
在 [發佈] 對話框中,選取 [Docker Container Registry] 選項卡。
選擇 [建立新的 Azure Container Registry。
在 中建立新的 Azure Container Registry,然後填入您所需的值。
設定 建議的值 描述 DNS 前綴 全域唯一名稱 能唯一識別容器註冊表的名稱。 訂用帳戶 選擇您的訂用帳戶 要使用的 Azure 訂用帳戶。 資源群組 我的資源群組 要在其中建立容器登錄的資源群組名稱。 選擇 新增 以建立新的資源群組。 SKU 標準 容器登錄的服務層級 登錄位置 離您較近的位置 請選擇靠近您或其他會使用您的容器註冊表服務的 區域中的 位置。 按一下 建立。 [發佈] 對話框現在會顯示已建立的登錄。
選擇 [完成] 以完成將容器映像發佈至在 Azure 中新建立的註冊表的過程。
後續步驟
您現在可以將容器從註冊表中拉取到任何能夠執行 Docker 映像的主機,例如 Azure Container Instances。
使用 Visual Studio,您可以輕鬆地建置、偵錯及執行容器化 .NET、ASP.NET,以及 ASP.NET Core 應用程式,並將其發佈至 Azure Container Registry、Docker Hub、Azure App Service 或您自己的 Container Registry。 在本文中,您會將 ASP.NET Core 應用程式發佈至 Azure Container Registry。
先決條件
- Docker Desktop
- Visual Studio 2022 已安裝 Web Development、Azure Tools 工作負載和/或 .NET 桌面開發 工作負載
- 若要發佈至 Azure Container Registry,Azure 訂用帳戶。 註冊免費試用。
安裝和設定
針對 Docker 安裝,請先檢閱適用於 Windows Docker Desktop 的資訊:安裝之前要知道的事項。 接下來,安裝 Docker Desktop。
將專案新增至 Docker 容器
建立 Visual Studio 專案之前,請確定 Docker Desktop 正在執行您想要在 Visual Studio 專案中使用的容器類型(Windows 或 Linux)。
若要變更 Docker Desktop 所使用的容器類型,請以滑鼠右鍵按兩下任務列中的 Docker 圖示 (whale),然後選擇 [切換至 Linux 容器] 或 [切換至 Windows 容器]。
警告
如果您在建立 Visual Studio 項目之後切換容器類型,Docker 映像檔可能無法載入。
使用 ASP.NET Core Web App 樣本建立新專案,或如果您想要使用 .NET Framework 而非 .NET Core,請選擇 ASP.NET Web 應用程式 (.NET Framework)。
在 [[建立新的 Web 應用程式] 畫面上,確定已選取 [啟用 Docker 支援] 複選框。
此螢幕快照顯示 .NET 8.0 的最新版本。 如果您使用 .NET Framework,對話框看起來有點不同。
選取您要的容器類型(Windows 或 Linux),然後選取 [建立]。
Dockerfile 概觀
Visual Studio 會在專案中建立 Dockerfile,其提供如何建立最終 Docker 映像的配方。 如需詳細資訊,請參閱 Dockerfile 參考,以取得 Dockerfile 中使用的命令詳細數據。
#See https://aka.ms/customizecontainer to learn how to customize your debug container and how Visual Studio uses this Dockerfile to build your images for faster debugging.
# This stage is used when running from VS in fast mode (Default for Debug configuration)
FROM mcr.microsoft.com/dotnet/aspnet:8.0-nanoserver-1809 AS base
WORKDIR /app
EXPOSE 8080
EXPOSE 8081
# This stage is used to build the service project
FROM mcr.microsoft.com/dotnet/sdk:8.0-nanoserver-1809 AS build
ARG BUILD_CONFIGURATION=Release
WORKDIR /src
COPY ["MyWepApp/MyWebApp.csproj", "MyWebApp/"]
RUN dotnet restore "./MyWebApp/./MyWebApp.csproj"
COPY . .
WORKDIR "/src/MyWebApp"
RUN dotnet build "./MyWebApp.csproj" -c %BUILD_CONFIGURATION% -o /app/build
# This stage is used to publish the service project to be copied to the final stage
FROM build AS publish
ARG BUILD_CONFIGURATION=Release
RUN dotnet publish "./MyWebApp.csproj" -c %BUILD_CONFIGURATION% -o /app/publish /p:UseAppHost=false
# This stage is used in production or when running from VS in regular mode (Default when not using the Debug configuration)
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "MyWebApp.dll"]
上述 Dockerfile 是以 Microsoft Container Registry (MCR) .NET 8 映射為基礎,並包含透過建置名為 MyWebApp
的專案並將其新增至容器來修改基底映射的指示。 如果您使用 .NET Framework,基底映射會有所不同。
當勾選新專案對話框中的 設定 HTTPS 複選框時,Dockerfile 會開放兩個埠。 一個埠用於 HTTP 流量;另一個埠用於 HTTPS。 如果沒有勾選該核取方塊,則將公開一個單一埠口(80)供 HTTP 流量使用。
使用 Visual Studio 2022 17.7 版或更新版本,您可以將 目標設為 .NET 8。 在此情況下,您可以更安全地以一般使用者身分執行應用程式,而不是提升許可權。 Visual Studio for .NET 8 專案所產生的預設 Dockerfile 會設定為以一般使用者身分執行。 若要在現有項目上啟用此行為,請將行 USER app
新增至基底映射中的 Dockerfile。 此外,由於埠 80 受限於一般使用者,因此會公開埠 8080 和 8081,而不是 80 和 443。 埠 8080 用於 HTTP 流量,而埠 8081 則用於 HTTPS。 若要以一般使用者身分執行,容器必須使用 .NET 8 基底映射,而且應用程式必須以 .NET 8 應用程式的形式執行。 正確設定時,您的 Dockerfile 應該包含程式代碼,如下列範例所示:
FROM mcr.microsoft.com/dotnet/aspnet:8.0-preview AS base
USER app
WORKDIR /app
EXPOSE 8080
EXPOSE 8081
除錯
從工具列中的 [偵錯] 下拉式清單中選取 [Docker],然後開始對應用程式進行偵錯。 您可能會看到訊息,其中包含信任憑證的提示;選擇信任憑證以繼續。
在 [輸出] 視窗中的 [Container Tools] 選項會顯示正在進行的操作。 第一次下載基底映射可能需要一些時間,但後續執行速度會比較快。
建置完成之後,瀏覽器會開啟並顯示應用程式的首頁。 在瀏覽器網址列中,您可以看到 localhost
URL 和埠號碼以進行偵錯。
容器視窗
您可以使用 [容器] 視窗來檢視計算機上執行中的容器,以及其他可用的映射。
使用 IDE 中的搜尋方塊開啟 [容器] 視窗(按 ctrl+Q 以使用它),在 container
中輸入 ,然後從清單中選擇 [容器] 視窗。
您可以將 容器 視窗掛接在方便的位置,例如跟隨視窗放置指南將其放置在編輯器下方。
在視窗中,尋找您的容器,並逐一查看每個標籤,以查看環境變數、埠映射、日誌和文件系統。
如需詳細資訊,請參閱 使用 [容器] 視窗。
發佈 Docker 映像
完成應用程式的開發和偵錯周期之後,您就可以建立應用程式的生產映像。
將組態下拉式清單變更為 Release 並建置應用程式。
按一下右鍵在 [方案總管] 中的您的專案,然後選擇 [發行] 。
在 [發佈] 對話框中,選取 [Docker Container Registry] 選項卡。
選擇 [建立新的 Azure Container Registry。
在 中建立新的 Azure Container Registry,然後填入您所需的值。
設定 建議的值 描述 DNS 前綴 全域唯一名稱 能唯一識別容器註冊表的名稱。 訂用帳戶 選擇您的訂用帳戶 要使用的 Azure 訂用帳戶。 資源群組 我的資源群組 要在其中建立容器登錄的資源群組名稱。 選擇 新增 以建立新的資源群組。 SKU 標準 容器登錄的服務層級 登錄位置 離您較近的位置 在 區域中選擇位置, 靠近您或靠近其他可以使用容器登錄的服務。 選取 ,然後建立。 [發佈] 對話框現在會顯示已建立的登錄。
選擇 [完成] 以完成將容器映像發佈至在 Azure 中新建立的註冊表的過程。
後續步驟
您現在可以將容器從註冊表中拉取到任何能夠執行 Docker 映像的主機,例如 Azure Container Instances。
其他資源
- 使用 Visual Studio 進行容器開發
- 使用 Docker Compose 建立多容器應用程式
- 針對 Visual Studio 開發使用 Docker 進行疑難解答
- Visual Studio Container Tools GitHub 儲存庫