共用方式為


快速入門:Visual Studio 中的容器工具

使用 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 安裝,請先檢閱 適用於 Windows 的 Docker Desktop:安裝之前要知道的資訊。 接下來,安裝 Docker Desktop

安裝和設定

針對 Docker 安裝,請先檢閱 適用於 Windows 的 Docker Desktop:安裝之前要知道的資訊。 接下來,安裝 Docker Desktop

若要使用 Podman 作為儲存器平台,請下載 Podman Desktop for Windows,然後遵循 Podman for Windows 中的教學課程來起始設定並啟動 Podman 機器。

將專案新增至容器

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

    若要變更 Docker Desktop 所使用的容器類型,請以滑鼠右鍵按兩下任務列中的 Docker 圖示 (whale),然後選擇 [ 切換至 Linux 容器 ] 或 [ 切換至 Windows 容器]。

    警告

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

  2. 使用 ASP.NET Core Web App 範本建立新專案。

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

    啟用容器支援核取方塊的螢幕擷取畫面。

    此螢幕快照顯示 .NET 8.0 的最新版本。

  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.

# This stage is used when running from VS in fast mode (Default for Debug configuration)
FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
USER $APP_UID
WORKDIR /app
EXPOSE 8080
EXPOSE 8081

# This stage is used to build the service project
FROM mcr.microsoft.com/dotnet/sdk:8.0 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 聯合容器目錄 .NET 8 映像為基礎,並包含藉由建置名為 MyWebApp 的專案並將其新增至容器來修改基底映像的指示。 如果您使用 .NET Framework,基底映射會有所不同。

核取 [新專案] 對話框的 [ 設定 HTTPS] 複選框時, Dockerfile 會公開兩個埠。 一個埠用於 HTTP 流量;另一個埠用於 HTTPS。 如果未核取核取方塊,則會針對 HTTP 流量公開單一連接埠 (80 或 8080)。

以 .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 AS base
USER app
WORKDIR /app
EXPOSE 8080
EXPOSE 8081

.NET 8 和更新版本的預設範本會使用環境變數 APP_UID 作為一般使用者的身分識別。

除錯

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

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

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

注意

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

容器視窗

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

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

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

在視窗中,尋找您的容器,並逐一查看每個標籤,以查看環境變數、埠映射、日誌和文件系統。

[容器] 視窗的螢幕快照。

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

發佈 Docker 映像

完成應用程式的開發和偵錯周期之後,您就可以建立應用程式的生產映像。

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

  2. 按一下右鍵在 [方案總管] 中的您的專案,然後選擇 [發行]

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

    [發佈] 對話框的螢幕快照 - 選擇 [Docker Container Registry]。

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

    [發佈] 對話框的螢幕快照 - 選擇 [建立新的 Azure Container Registry]。

  5. 建立新的 Azure Container Registry 中填入您所需的值。

    設定 建議的值 描述
    DNS 前置詞 全域唯一名稱 能唯一識別容器註冊表的名稱。
    訂閱 選擇您的訂用帳戶 要使用的 Azure 訂用帳戶。
    資源群組 我的資源群組 要在其中建立容器登錄的資源群組名稱。 選擇 [ 新增 ] 以建立新的資源群組。
    SKU (英文) 標準 容器登錄的服務層級
    登錄位置 離您較近的位置 選擇一個靠近您或其他可以使用您的容器登錄服務的區域位置。

    Visual Studio 建立 Azure Container Registry 對話框的螢幕快照。

  6. 選取 建立。 [ 發佈] 對話框現在會顯示已建立的登錄。

    [發佈] 對話框的螢幕快照,其中顯示已建立的 Azure Container Registry。

  7. 選擇 完成 以完成將容器映像發佈至 Azure 中新建立的註冊表。

    顯示成功發佈的螢幕快照。

後續步驟

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

將專案新增至容器

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

    若要變更 Docker Desktop 所使用的容器類型,請以滑鼠右鍵按兩下任務列中的 Docker 圖示 (whale),然後選擇 [ 切換至 Linux 容器 ] 或 [ 切換至 Windows 容器]。

    警告

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

  2. 使用 ASP.NET Core Web App 範本建立新專案。

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

    啟用容器支援核取方塊的螢幕擷取畫面。

    此螢幕快照顯示 .NET 8.0 的最新版本。

  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.

# This stage is used when running from VS in fast mode (Default for Debug configuration)
FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS base
USER $APP_UID
WORKDIR /app
EXPOSE 8080
EXPOSE 8081

# This stage is used to build the service project
FROM mcr.microsoft.com/dotnet/sdk:8.0 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 聯合容器目錄 .NET 8 映像為基礎,並包含藉由建置名為 MyWebApp 的專案並將其新增至容器來修改基底映像的指示。

核取 [新專案] 對話框的 [ 設定 HTTPS] 複選框時, Dockerfile 會公開兩個埠。 一個埠用於 HTTP 流量;另一個埠用於 HTTPS。 如果未核取核取方塊,則會針對 HTTP 流量公開單一連接埠 (80 或 8080)。

以 .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 AS base
USER app
WORKDIR /app
EXPOSE 8080
EXPOSE 8081

預設範本會使用環境變數 APP_UID 作為一般使用者的身分識別。

除錯

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

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

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

注意

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

容器視窗

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

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

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

在視窗中,尋找您的容器,並逐一查看每個標籤,以查看環境變數、埠映射、日誌和文件系統。

[容器] 視窗的螢幕快照。

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

發佈 Docker 映像

完成應用程式的開發和偵錯周期之後,您就可以建立應用程式的生產映像。

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

  2. 按一下右鍵在 [方案總管] 中的您的專案,然後選擇 [發行]

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

    [發佈] 對話框的螢幕快照 - 選擇 [Docker Container Registry]。

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

    [發佈] 對話框的螢幕快照 - 選擇 [建立新的 Azure Container Registry]。

  5. 建立新的 Azure Container Registry 中填入您所需的值。

    設定 建議的值 描述
    DNS 前置詞 全域唯一名稱 能唯一識別容器註冊表的名稱。
    訂閱 選擇您的訂用帳戶 要使用的 Azure 訂用帳戶。
    資源群組 我的資源群組 要在其中建立容器登錄的資源群組名稱。 選擇 [ 新增 ] 以建立新的資源群組。
    SKU (英文) 標準 容器登錄的服務層級
    登錄位置 離您較近的位置 選擇一個靠近您或其他可以使用您的容器登錄服務的區域位置。

    Visual Studio 建立 Azure Container Registry 對話框的螢幕快照。

  6. 選取 建立。 [ 發佈] 對話框現在會顯示已建立的登錄。

    [發佈] 對話框的螢幕快照,其中顯示已建立的 Azure Container Registry。

  7. 選擇 完成 以完成將容器映像發佈至 Azure 中新建立的註冊表。

    顯示成功發佈的螢幕快照。

後續步驟

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

其他資源