快速入門: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 Desktop
- 已安裝網頁程式開發、Azure Tools 工作負載及(或) .NET Core 跨平台開發 工作負載的 Visual Studio 2019
- 用於使用 .NET Core 進行開發的 .NET Core 開發工具
- 發佈至 Azure Container Registry (Azure 訂用帳戶)。 註冊免費試用版。
安裝和設定
針對 Docker 安裝,請先檢閱 Docker Desktop for Windows: What to know before you install (英文) 中的資訊。 接下來,安裝 Docker Desktop。
將專案新增至 Docker 容器
使用 ASP.NET Core Web 應用程式範本建立新專案,或如果您想要使用 .NET Framework 而非 .NET Core,請選擇 [ASP.NET Web 應用程式 (.NET Framework)]。
在 [建立新的 Web 應用程式] 畫面上,確定已選取 [啟用 Docker 支援] 核取方塊。
螢幕擷取畫面會顯示 .NET Core;如果您使用 .NET Framework,看起來會有些不同。
選取您想要的容器類型 (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"]
上述的 Dockerfile 以 dotnet/core/aspnet 映像為基礎,其中包含藉由建置專案並將其新增至容器來修改基底映像的指示。 如果您使用 .NET Framework,基礎映像將會不同。
核取新專案對話方塊的 [設定 HTTPS] 核取方塊時,Dockerfile 會提供兩個連接埠。 其中一個連接埠用於 HTTP 流量,另一個連接埠則用於 HTTPS。 如果未核取該核取方塊,則會為 HTTP 流量提供單一連接埠 (80)。
偵錯
從工具列的偵錯下拉式清單中選取 [Docker],然後開始對應用程式進行偵錯。 您可能會看到提示信任憑證的訊息,請選擇信任憑證以繼續進行。
[輸出] 視窗中的 [容器工具] 選項會顯示要採取哪些動作。 第一次下載基礎映像可能需要一些時間,但後續執行速度會快得多。
注意
如果您需要變更連接埠以進行偵錯,您可以在 launchSettings.json 檔案中執行該動作。 請參閱容器啟動設定。
容器視窗
如果您有 Visual Studio 2019 版本 16.4 或更新版本,您可以使用 [容器] 視窗來檢視電腦上執行中的容器,以及可用的映像。
使用 IDE 中的搜尋方塊開啟 [容器] 視窗 (按 Ctrl+Q 以使用它),輸入 container
,然後從清單中選擇 [容器] 視窗。
您可以將 [容器] 視窗掛接在方便的位置,例如編輯器下方,方法是將它四處移動,並遵循視窗放置輔助線。
在視窗中,尋找您的容器並逐步執行每個索引標籤,以檢視環境變數、連接埠對應、記錄和檔案系統。
如需詳細資訊,請參閱使用 [容器] 視窗。
發行 Docker 映像
一旦應用程式的開發和偵錯循環完成,您就可以建立應用程式的生產映像。
將組態下拉式清單變更為 [發行] 並建置應用程式。
在方案總管中以滑鼠右鍵按一下專案,並選擇 [發佈]。
在 [發行] 對話方塊中,選取 [Docker Container Registry] 索引標籤。
選擇 [建立新的 Azure Container Registry]。
在 [建立新的 Azure Container Registry] 中填入您想要的值。
設定 建議的值 描述 DNS 首碼 全域唯一的名稱 用以唯一識別容器登錄的名稱。 訂用帳戶 選擇您的訂用帳戶 要使用的 Azure 訂用帳戶。 資源群組 myResourceGroup 要在其中建立容器登錄的資源群組名稱。 選擇 [新增] 以建立新的資源群組。 SKU 標準 容器登錄的服務層 登錄位置 接近您的位置 在區域中選擇您附近的 [位置],或選擇將會使用容器登錄的其他服務所接近的位置。 按一下 [建立]。 [發行] 對話方塊現在會顯示建立的登錄。
選擇 [完成] 以完成將容器映像發行至 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 Desktop
- 已安裝網頁程式開發、Azure Tools 工作負載及/或 .NET 桌面開發工作負載的 Visual Studio 2022
- 發佈至 Azure Container Registry (Azure 訂用帳戶)。 註冊免費試用版。
安裝和設定
針對 Docker 安裝,請先檢閱 Docker Desktop for Windows: What to know before you install (英文) 中的資訊。 接下來,安裝 Docker Desktop。
將專案新增至 Docker 容器
在建立 Visual Studio 專案之前,請確定 Docker Desktop 正在執行您想要在 Visual Studio 專案中使用的容器類型 (Windows 或 Linux)。
若要變更 Docker Desktop 使用的容器類型,請以滑鼠右鍵按一下 [工作列] 中的 Docker 圖示 (鯨),並選擇 [切換到 Linux 容器] 或 [切換到 Windows 容器]。
警告
如果您在建立 Visual Studio 專案之後切換容器類型,Docker 映像檔案可能無法載入。
使用 ASP.NET Core Web 應用程式範本建立新專案,或如果您想要使用 .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.
#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"]
上述的 Dockerfile 以 Microsoft 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 映像
一旦應用程式的開發和偵錯循環完成,您就可以建立應用程式的生產映像。
將組態下拉式清單變更為 [發行] 並建置應用程式。
在方案總管中以滑鼠右鍵按一下專案,並選擇 [發佈]。
在 [發行] 對話方塊中,選取 [Docker Container Registry] 索引標籤。
選擇 [建立新的 Azure Container Registry]。
在 [建立新的 Azure Container Registry] 中填入您想要的值。
設定 建議的值 描述 DNS 首碼 全域唯一的名稱 用以唯一識別容器登錄的名稱。 訂用帳戶 選擇您的訂用帳戶 要使用的 Azure 訂用帳戶。 資源群組 myResourceGroup 要在其中建立容器登錄的資源群組名稱。 選擇 [新增] 以建立新的資源群組。 SKU 標準 容器登錄的服務層 登錄位置 接近您的位置 在區域中選擇您附近的 [位置],或選擇可使用您容器登錄的其他服務所接近的位置。 選取 建立。 [發行] 對話方塊現在會顯示建立的登錄。
選擇 [完成] 以完成將容器映像發行至 Azure 中新建立登錄的程序。
下一步
您現在可以從登錄中,將容器提取至能夠執行 Docker 映像的任何主機,例如 Azure 容器執行個體。