快速入門:Visual Studio 中的 Docker

使用 Visual Studio,您可以輕鬆地建置、偵錯和執行容器化 .NET、ASP.NET 和 ASP.NET Core 應用程式,並將其發行至 Azure Container Registry、Docker Hub、Azure App Service 或您自己的容器登錄。 在本文中,我們會將 ASP.NET Core 應用程式發行至 Azure Container Registry。

必要條件

安裝和設定

針對 Docker 安裝,請先檢閱 Docker Desktop for Windows: What to know before you install (英文) 中的資訊。 接下來,安裝 Docker Desktop

將專案新增至 Docker 容器

  1. 使用 ASP.NET Core Web 應用程式範本建立新專案,或如果您想要使用 .NET Framework 而非 .NET Core,請選擇 [ASP.NET Web 應用程式 (.NET Framework)]

  2. 在 [建立新的 Web 應用程式] 畫面上,確定已選取 [啟用 Docker 支援] 核取方塊。

    [啟用 Docker 支援] 核取方塊的螢幕擷取畫面。

    螢幕擷取畫面會顯示 .NET Core;如果您使用 .NET Framework,看起來會有些不同。

  3. 選取您想要的容器類型 (Windows 或 Linux),然後按一下 [建立]

Dockerfile 概觀

Dockerfile 是用於建立最終 Docker 映像的配方,會在專案中建立。 請參閱 Dockerfile reference (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"]

上述的 Dockerfilemicrosoft/aspnetcore 映像為基礎,其中包含藉由建置專案並將其新增至容器來修改基底映像的指示。 如果您使用 .NET Framework,基礎映像將會不同。

核取新專案對話方塊的 [設定 HTTPS] 核取方塊時,Dockerfile 會提供兩個連接埠。 其中一個連接埠用於 HTTP 流量,另一個連接埠則用於 HTTPS。 如果未核取該核取方塊,則會為 HTTP 流量提供單一連接埠 (80)。

偵錯

從工具列的偵錯下拉式清單中選取 [Docker],然後開始對應用程式進行偵錯。 您可能會看到提示信任憑證的訊息,請選擇信任憑證以繼續進行。

[輸出] 視窗中的 [容器工具] 選項會顯示要採取哪些動作。 第一次下載基礎映像可能需要一些時間,但後續執行速度會快得多。

注意

如果您需要變更連接埠以進行偵錯,您可以在 launchSettings.json 檔案中執行該動作。 請參閱容器啟動設定

容器視窗

如果您有 Visual Studio 2019 版本 16.4 或更新版本,您可以使用 [容器] 視窗來檢視電腦上執行中的容器,以及可用的映像。

使用 IDE 中的搜尋方塊開啟 [容器] 視窗 (按 Ctrl+Q 以使用它),輸入 container,然後從清單中選擇 [容器] 視窗。

您可以將 [容器] 視窗掛接在方便的位置,例如編輯器下方,方法是將它四處移動,並遵循視窗放置輔助線。

在視窗中,尋找您的容器並逐步執行每個索引標籤,以檢視環境變數、連接埠對應、記錄和檔案系統。

[容器] 視窗的螢幕擷取畫面。

如需詳細資訊,請參閱使用 [容器] 視窗

發行 Docker 映像

一旦應用程式的開發和偵錯循環完成,您就可以建立應用程式的生產映像。

  1. 將組態下拉式清單變更為 [發行] 並建置應用程式。

  2. 方案總管中以滑鼠右鍵按一下專案,並選擇 [發佈]

  3. 在 [發行] 對話方塊中,選取 [Docker Container Registry] 索引標籤。

    [發佈] 對話方塊 – 選擇 Docker 容器登錄的螢幕擷取畫面。

  4. 選擇 [建立新的 Azure Container Registry]

    [發佈] 對話方塊 – 選擇 [建立新的 Azure Container Registry] 的螢幕擷取畫面。

  5. 在 [建立新的 Azure Container Registry] 中填入您想要的值。

    設定 建議的值 描述
    DNS 首碼 全域唯一的名稱 用以唯一識別容器登錄的名稱。
    訂用帳戶 選擇您的訂用帳戶 要使用的 Azure 訂用帳戶。
    資源群組 myResourceGroup 要在其中建立容器登錄的資源群組名稱。 選擇 [新增] 以建立新的資源群組。
    SKU 標準 容器登錄的服務層
    登錄位置 接近您的位置 區域中選擇您附近的 [位置],或選擇將會使用容器登錄的其他服務所接近的位置。

    Visual Studio 的 [建立 Azure Container Registry] 對話方塊的螢幕擷取畫面。

  6. 按一下 [建立]。 [發行] 對話方塊現在會顯示建立的登錄。

    [發佈] 對話方塊的螢幕擷取畫面,其中顯示建立的 Azure Container Registry。

  7. 選擇 [完成] 以完成將容器映像發行至 Azure 中新建立登錄的程序。

    顯示成功發佈的螢幕擷取畫面。

後續步驟

您現在可以從登錄中,將容器提取至能夠執行 Docker 映像的任何主機,例如 Azure 容器執行個體

使用 Visual Studio,您可以輕鬆地建置、偵錯和執行容器化 .NET、ASP.NET 和 ASP.NET Core 應用程式,並將其發行至 Azure Container Registry、Docker Hub、Azure App Service 或您自己的容器登錄。 在本文中,您會將 ASP.NET Core 應用程式發行至 Azure Container Registry。

必要條件

安裝和設定

針對 Docker 安裝,請先檢閱 Docker Desktop for Windows: What to know before you install (英文) 中的資訊。 接下來,安裝 Docker Desktop

將專案新增至 Docker 容器

  1. 在建立 Visual Studio 專案之前,請確定 Docker Desktop 正在執行您想要在 Visual Studio 專案中使用的容器類型 (Windows 或 Linux)。

    若要變更 Docker Desktop 使用的容器類型,請以滑鼠右鍵按一下 [工作列] 中的 Docker 圖示 (鯨),並選擇 [切換到 Linux 容器] 或 [切換到 Windows 容器]

    警告

    如果您在建立 Visual Studio 專案之後切換容器類型,Docker 映像檔案可能無法載入。

  2. 使用 ASP.NET Core Web 應用程式範本建立新專案,或如果您想要使用 .NET Framework 而非 .NET Core,請選擇 [ASP.NET Web 應用程式 (.NET Framework)]

  3. 在 [建立新的 Web 應用程式] 畫面上,確定已選取 [啟用 Docker 支援] 核取方塊。

    [啟用 Docker 支援] 核取方塊的螢幕擷取畫面。

    此螢幕擷取畫面顯示 .NET 8.0 的最新版本。 如果您是使用 .NET Framework,對話方塊看起來會有點不同。

  4. 選取您想要的容器類型 (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.

#Depending on the operating system of the host machines(s) that will build or run the containers, the image specified in the FROM statement may need to be changed.
#For more information, please see https://aka.ms/containercompat

FROM mcr.microsoft.com/dotnet/aspnet:8.0-nanoserver-1809 AS base
WORKDIR /app
EXPOSE 8080
EXPOSE 8081

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

FROM build AS publish
ARG BUILD_CONFIGURATION=Release
RUN dotnet publish "./MyWebApp.csproj" -c %BUILD_CONFIGURATION% -o /app/publish /p:UseAppHost=false

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "MyWebApp.dll"]

上述的 DockerfileMicrosoft Container Registry (MCR) .NET 8 映像為基礎,其中包含藉由建置名稱為 MyWebApp 之專案並將其新增至容器來修改基礎映像的指示。 如果您使用 .NET Framework,則基礎映像會不同。

核取新專案對話方塊的 [設定 HTTPS] 核取方塊時,Dockerfile 會提供兩個連接埠。 其中一個連接埠用於 HTTP 流量,另一個連接埠則用於 HTTPS。 如果未核取該核取方塊,則會為 HTTP 流量提供單一連接埠 (80)。

有了 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],然後開始對應用程式進行偵錯。 您可能會看到提示信任憑證的訊息,請選擇信任憑證以繼續進行。

[輸出] 視窗中的 [容器工具] 選項會顯示要採取哪些動作。 第一次下載基礎映像可能需要一些時間,但後續執行速度會比較快。

建置完成之後,瀏覽器會隨即開啟並顯示應用程式的首頁。 在瀏覽器網址列中,您可以看到用於偵錯的 localhost URL 和連接埠號碼。

注意

如果您需要變更連接埠以進行偵錯,您可以在 launchSettings.json 檔案中執行該動作。 請參閱容器啟動設定

容器視窗

您可以使用 [容器] 視窗來檢視電腦上執行中的容器,以及其他可用的映像。

使用 IDE 中的搜尋方塊開啟 [容器] 視窗 (按 Ctrl+Q 以使用它),輸入 container,然後從清單中選擇 [容器] 視窗。

您可以將 [容器] 視窗掛接在方便的位置,例如編輯器下方,方法是將它四處移動,並遵循視窗放置輔助線。

在視窗中,尋找您的容器並逐步執行每個索引標籤,以檢視環境變數、連接埠對應、記錄和檔案系統。

[容器] 視窗的螢幕擷取畫面。

如需詳細資訊,請參閱使用 [容器] 視窗

發行 Docker 映像

一旦應用程式的開發和偵錯循環完成,您就可以建立應用程式的生產映像。

  1. 將組態下拉式清單變更為 [發行] 並建置應用程式。

  2. 方案總管中以滑鼠右鍵按一下專案,並選擇 [發佈]

  3. 在 [發行] 對話方塊中,選取 [Docker Container Registry] 索引標籤。

    [發佈] 對話方塊 – 選擇 Docker 容器登錄的螢幕擷取畫面。

  4. 選擇 [建立新的 Azure Container Registry]

    [發佈] 對話方塊 – 選擇 [建立新的 Azure Container Registry] 的螢幕擷取畫面。

  5. 在 [建立新的 Azure Container Registry] 中填入您想要的值。

    設定 建議的值 描述
    DNS 首碼 全域唯一的名稱 用以唯一識別容器登錄的名稱。
    訂用帳戶 選擇您的訂用帳戶 要使用的 Azure 訂用帳戶。
    資源群組 myResourceGroup 要在其中建立容器登錄的資源群組名稱。 選擇 [新增] 以建立新的資源群組。
    SKU 標準 容器登錄的服務層
    登錄位置 接近您的位置 區域中選擇您附近的 [位置],或選擇可使用您容器登錄的其他服務所接近的位置。

    Visual Studio 的 [建立 Azure Container Registry] 對話方塊的螢幕擷取畫面。

  6. 選取 建立。 [發行] 對話方塊現在會顯示建立的登錄。

    [發佈] 對話方塊的螢幕擷取畫面,其中顯示建立的 Azure Container Registry。

  7. 選擇 [完成] 以完成將容器映像發行至 Azure 中新建立登錄的程序。

    顯示成功發佈的螢幕擷取畫面。

下一步

您現在可以從登錄中,將容器提取至能夠執行 Docker 映像的任何主機,例如 Azure 容器執行個體

其他資源