使用 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 或 Podman Desktop 。
- Visual Studio 或 Podman 支援的 Visual Studio 2026,已安裝 ASP.NET 和 Web 開發、 Azure 開發 工作負載和/或 .NET 桌面開發 工作負載。
- 若要發佈至 Azure Container Registry,Azure 訂用帳戶。 註冊免費試用。
先決條件
- Docker Desktop。
- Visual Studio 已安裝 ASP.NET 和 Web 開發、 Azure 開發 工作負載和/或 .NET 桌面開發 工作負載。
- 若要發佈至 Azure Container Registry,Azure 訂用帳戶。 註冊免費試用。
安裝和設定
針對 Docker 安裝,請先檢閱 適用於 Windows 的 Docker Desktop:安裝之前要知道的資訊。 接下來,安裝 Docker Desktop。
安裝和設定
針對 Docker 安裝,請先檢閱 適用於 Windows 的 Docker Desktop:安裝之前要知道的資訊。 接下來,安裝 Docker Desktop。
若要使用 Podman 作為儲存器平台,請下載 Podman Desktop for Windows,然後遵循 Podman for Windows 中的教學課程來起始設定並啟動 Podman 機器。
將專案新增至容器
建立 Visual Studio 專案之前,請確定 Docker Desktop 正在執行您想要在 Visual Studio 專案中使用的容器類型(Windows 或 Linux)。
若要變更 Docker Desktop 所使用的容器類型,請以滑鼠右鍵按兩下任務列中的 Docker 圖示 (whale),然後選擇 [ 切換至 Linux 容器 ] 或 [ 切換至 Windows 容器]。
警告
如果您在建立 Visual Studio 項目之後切換容器類型,Docker 映像檔可能無法載入。
使用 ASP.NET Core Web App 範本建立新專案。
在 [建立新的 Web 應用程式 ] 畫面上,確定已選取 [ 啟用容器支援 ] 核取方塊。
此螢幕快照顯示 .NET 8.0 的最新版本。
選取您想要的容器類型(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 和埠號碼以進行偵錯。
容器視窗
您可以使用 [ 容器] 視窗來檢視電腦上執行中的容器,以及其他可用的映像。
使用 IDE 中的搜尋方塊開啟 [容器 ] 視窗(按 Ctrl+Q 以使用它),輸入 container,然後從清單中選擇 [容器] 視窗。
您可以將 [容器] 視窗掛接在方便的位置,例如編輯器下方,方法是將它四處移動,並遵循視窗放置指南。
在視窗中,尋找您的容器,並逐一查看每個標籤,以查看環境變數、埠映射、日誌和文件系統。
如需詳細資訊,請參閱 使用 [容器] 視窗。
發佈 Docker 映像
完成應用程式的開發和偵錯周期之後,您就可以建立應用程式的生產映像。
將組態下拉式清單變更為 [發行 ] 並建置應用程式。
按一下右鍵在 [方案總管] 中的您的專案,然後選擇 [發行] 。
在 [ 發佈] 對話框中,選取 [Docker Container Registry ] 索引標籤。
選擇 [建立新的 Azure Container Registry]。
在 建立新的 Azure Container Registry 中填入您所需的值。
設定 建議的值 描述 DNS 前置詞 全域唯一名稱 能唯一識別容器註冊表的名稱。 訂閱 選擇您的訂用帳戶 要使用的 Azure 訂用帳戶。 資源群組 我的資源群組 要在其中建立容器登錄的資源群組名稱。 選擇 [ 新增 ] 以建立新的資源群組。 SKU (英文) 標準 容器登錄的服務層級 登錄位置 離您較近的位置 選擇一個靠近您或其他可以使用您的容器登錄服務的區域位置。
選取 建立。 [ 發佈] 對話框現在會顯示已建立的登錄。
選擇 完成 以完成將容器映像發佈至 Azure 中新建立的註冊表。
後續步驟
您現在可以將容器從登錄提取到任何能夠執行 Docker 映像的主機,例如 Azure 容器實例。
將專案新增至容器
建立 Visual Studio 專案之前,請確定 Docker Desktop 正在執行您想要在 Visual Studio 專案中使用的容器類型(Windows 或 Linux)。
若要變更 Docker Desktop 所使用的容器類型,請以滑鼠右鍵按兩下任務列中的 Docker 圖示 (whale),然後選擇 [ 切換至 Linux 容器 ] 或 [ 切換至 Windows 容器]。
警告
如果您在建立 Visual Studio 項目之後切換容器類型,Docker 映像檔可能無法載入。
使用 ASP.NET Core Web App 範本建立新專案。
在 [建立新的 Web 應用程式 ] 畫面上,確定已選取 [ 啟用容器支援 ] 核取方塊。
此螢幕快照顯示 .NET 8.0 的最新版本。
選取您想要的容器類型(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 和埠號碼以進行偵錯。
容器視窗
您可以使用 [ 容器] 視窗來檢視電腦上執行中的容器,以及其他可用的映像。
使用 IDE 中的搜尋方塊開啟 [容器 ] 視窗(按 Ctrl+Q 以使用它),輸入 container,然後從清單中選擇 [容器] 視窗。
您可以將 [容器] 視窗掛接在方便的位置,例如編輯器下方,方法是將它四處移動,並遵循視窗放置指南。
在視窗中,尋找您的容器,並逐一查看每個標籤,以查看環境變數、埠映射、日誌和文件系統。
如需詳細資訊,請參閱 使用 [容器] 視窗。
發佈 Docker 映像
完成應用程式的開發和偵錯周期之後,您就可以建立應用程式的生產映像。
將組態下拉式清單變更為 [發行 ] 並建置應用程式。
按一下右鍵在 [方案總管] 中的您的專案,然後選擇 [發行] 。
在 [ 發佈] 對話框中,選取 [Docker Container Registry ] 索引標籤。
選擇 [建立新的 Azure Container Registry]。
在 建立新的 Azure Container Registry 中填入您所需的值。
設定 建議的值 描述 DNS 前置詞 全域唯一名稱 能唯一識別容器註冊表的名稱。 訂閱 選擇您的訂用帳戶 要使用的 Azure 訂用帳戶。 資源群組 我的資源群組 要在其中建立容器登錄的資源群組名稱。 選擇 [ 新增 ] 以建立新的資源群組。 SKU (英文) 標準 容器登錄的服務層級 登錄位置 離您較近的位置 選擇一個靠近您或其他可以使用您的容器登錄服務的區域位置。
選取 建立。 [ 發佈] 對話框現在會顯示已建立的登錄。
選擇 完成 以完成將容器映像發佈至 Azure 中新建立的註冊表。
後續步驟
您現在可以將容器從登錄提取到任何能夠執行 Docker 映像的主機,例如 Azure 容器實例。
其他資源
- 使用 Visual Studio 進行容器開發
- 使用 Docker Compose 建立多容器應用程式
- 針對 Visual Studio 開發使用 Docker 進行疑難解答
- Visual Studio Container Tools GitHub 存放庫