Docker – 設定 ASP.Net



ASP.NET 是微軟開發的一個免費的開源 Web 應用程式框架,它有助於使用 C#F# 等語言構建強大、可擴充套件的 Web 應用程式。傳統上部署 ASP.NET 應用程式有時會因為目標環境中的多種配置而變得繁瑣,這些配置旨在確保所有依賴項都得到正確處理。

這就是 Docker 發揮作用的地方。Docker 是一個容器化平臺,它將應用程式及其所有依賴項打包到一個稱為容器的輕量級、可移植單元中。

在本章中,讓我們討論如何將 ASP.NET 應用程式容器化。我們將從瞭解這樣做的前提條件開始。

將 ASP.NET 容器化的前提條件

首先,您應該確保擁有以下工具和知識:

  • .NET SDK 8 或更高版本 - 最新 .NET SDK 可從此連結下載:下載適用於 Windows 的 .NET
  • Docker Desktop - 用於操作容器的使用者友好介面。您可以根據您的作業系統從此處下載並安裝 Docker Desktop:Docker Desktop
  • 文字編輯器或 IDE - 您將需要一個文字編輯器或 IDE,例如 Visual Studio Code 或專用的 .NET 整合開發環境來建立和編輯您的 ASP.NET 專案。
  • Git 客戶端(可選) - 如果您還想在專案中使用 Git 進行原始碼控制,則安裝 Git 客戶端,例如 Git Bash。

設定 ASP.NET Core 專案

您可以透過兩種主要方式設定 ASP.NET Core 專案:

  • 使用 IDE - 大多數 .NET 的 IDE(如 Visual Studio 和 Visual Studio Code)都提供內建功能來建立 ASP.NET Core 專案。您只需點選 IDE 中的“建立新專案”選項,然後選擇“ASP.NET Core Web 應用程式”作為專案模板,並自定義您的專案名稱和位置。
  • 使用 .NET CLI - 您也可以使用終端或命令提示符。導航到專案所需目錄。然後,執行以下命令,將 <ProjectName> 替換為您所需的名稱:
$ dotnet new webapp -n <ProjectName>
Docker setting ASP.Net 1

專案結構和依賴項

接下來,您可以使用以下命令為您的專案初始化 docker。

$ docker init
Docker setting ASP.Net 2

執行上述命令後,您的 ASP.NET Core 專案結構應如下所示:

my-project/

├── Dockerfile

├── .dockerignore

├── docker-compose.yml  (optional)

├── my-project.csproj

├── Properties

│   └── launchSettings.json

├── Program.cs

├── appsettings.Development.json

├── appsettings.json

├── obj/  (Intermediate compilation output)

├── Pages/  (Razor Pages)

├── wwwroot/  (Static files)

│   ├── css

│   ├── images

│   ├── js

│   └── lib

└── ... (other project-specific folders)

目錄說明

  • Dockerfile - 定義 Docker 映象的構建指令。
  • .dockerignore - 指定要從 Docker 映象中排除的檔案和目錄。
  • docker-compose.yml - (可選)定義和執行多容器 Docker 應用程式。
  • my-project.csproj - 包含專案元資料和依賴項的專案檔案。
  • Properties - 包含配置檔案,例如啟動設定。
  • Program.cs - 應用程式的入口點。
  • appsettings.json - 應用程式的配置設定。
  • obj - 包含中間編譯輸出,通常在版本控制中被忽略。
  • Pages - 包含應用程式的 Razor 頁面。
  • wwwroot - 包含靜態檔案,如 CSS、JavaScript 和影像。

注意 - ...佔位符表示您可能根據專案的需要建立的其他自定義資料夾,例如Controllers、Models、Views、Data、Tests 等。

在本地執行 ASP.NET 專案

要在本地執行專案:

  • 導航到專案目錄 - 啟動您的終端或命令提示符並導航到 ASP.NET Core 專案的根目錄。
  • 構建專案 - 然後執行以下命令來構建您的專案:
$ dotnet build
Docker setting ASP.Net 3

dotnet build 命令將編譯專案的程式碼並建立必要的輸出檔案。

如果構建成功,您可以執行以下命令來執行您的應用程式:

$ dotnet run
Docker setting ASP.Net 4

這將啟動 ASP.NET 應用程式。您可以透過點選預設開發 URL(通常為https://:5133)來啟動 Web 瀏覽器視窗。

Docker setting ASP.Net 5

驗證您的 ASP.NET Core 專案在本地執行後,您可以繼續下一步,建立 Dockerfile 來將其 Docker 化。

建立 Dockerfile

使用 Dockerfile,您將能夠定義指令來構建我們應用程式的 ASP.NET Docker 映象。

基本的 Dockerfile 結構

這是一個 ASP.NET Core 應用程式的基本 Dockerfile。您可以將此程式碼複製到專案根目錄中的 Dockerfile 中。

# Use the official ASP.NET Core SDK image as the base

FROM mcr.microsoft.com/dotnet/sdk:8.0-alpine AS build

# Set the working directory in the container

WORKDIR /app

# Copy csproj and restore assets

COPY *.csproj ./

RUN dotnet restore

# Copy everything else and build

COPY . .

RUN dotnet publish -c Release -o /app/publish

# Use the official ASP.NET Core runtime image as the base

FROM mcr.microsoft.com/dotnet/aspnet:8.0-alpine

# Copy the published output from the build stage

WORKDIR /app

COPY --from=build /app/publish .

# Expose port 80

EXPOSE 80

# Set the command to run the application

ENTRYPOINT ["dotnet", "my-app.dll"]

Dockerfile 說明

  • FROM mcr.microsoft.com/dotnet/sdk:8.0-alpine AS build - 使用此指令,您可以指定構建的基礎映象。我們將使用帶有 Alpine Linux 的 .NET SDK 映象,因為它具有較小的映象大小。指令的AS build部分為此階段命名。
  • WORKDIR /app - 這將設定容器內的工作目錄。
  • COPY *.csproj ./ - 此指令將專案檔案複製到工作目錄。
  • RUN dotnet restore - 它恢復專案的依賴項。
  • COPY . . - 將整個專案複製到容器。
  • RUN dotnet publish -c Release -o /app/publish - 這將在釋出模式下將應用程式釋出到/app/publish目錄。
  • FROM mcr.microsoft.com/dotnet/aspnet:8.0-alpine - 此指令將指定執行時階段的基礎映象。我們將使用帶有 Alpine Linux 的 .NET 執行時映象。
  • COPY --from=build /app/publish . - 將釋出的輸出從構建階段複製到當前階段。
  • WORKDIR /app - 設定容器內的工作目錄。
  • EXPOSE 80 - 公開埠 80 用於 HTTP 流量。
  • ENTRYPOINT ["dotnet", "my-app.dll"] - 指定容器啟動時要執行的命令。您可以將my-app.dll替換為應用程式程式集的實際名稱。

接下來,讓我們看看如何構建 ASP.NET Docker 映象。

構建 ASP.NET Docker 映象

現在您已在專案目錄中定義了 Dockerfile,您可以使用以下docker build命令來構建 Docker 映象。

$ docker build -t my-aspnet-app .
  • docker build - 這是構建 Docker 映象的命令。
  • -t my-aspnet-app - 此標誌可用於為映象指定標籤。您可以將 my-aspnet-app 替換為您所需的映象名稱和標籤(例如,my-app:v1)。
  • . - 這指的是 Dockerfile 所在的當前目錄。
Docker setting ASP.Net 6

要驗證構建是否成功,您可以使用docker images命令列出系統上所有可用的 Docker 映象。

$ docker images
Docker setting ASP.Net 7

接下來,讓我們嘗試執行與此 ASP.NET Docker 映象關聯的 Docker 容器。

執行 ASP.NET Docker 容器

現在您已經構建了一個 Docker 映象,讓我們將其作為容器執行。啟動您的終端並執行以下命令以啟動容器。

$ docker run -d -p 5133:5133 my-aspnet-app
  • docker run - 此命令從現有映象啟動一個新容器。
  • -d - 此標誌在分離模式下執行容器,這意味著它在後臺執行而無需附加終端。
  • -p 8000:80 - 此標誌將容器內部的埠 80(您的 ASP.NET 應用程式通常在此埠偵聽)對映到主機上的埠 8000。這允許您透過瀏覽器訪問應用程式。
  • my-aspnet-app - 將其替換為上一步中建立的 Docker 映象的實際名稱和標籤。

您可以使用以下命令檢視主機上正在執行的容器。

$ docker container ls

如果您看到您的容器正在執行,您可以訪問瀏覽器上的 https://:5133。

Docker setting ASP.Net 8

結論

您現在已經使用這些步驟成功地使用 Docker 容器化了您的 ASP.NET Core 應用程式。您已經學習瞭如何建立 Dockerfile、構建映象以及如何從映象中執行應用程式作為容器。這為應用程式提供了一致性、隔離性和可擴充套件性;因此,它將更容易在不同的環境中部署和管理。

在 Docker 中設定 ASP.NET 的常見問題

1. 如何為我的 ASP.NET 應用程式建立 Docker 映象?

為此,您需要一個 Dockerfile 來 Docker 化您的 ASP.NET 應用程式。Dockerfile 定義了一個 Microsoft dotnet 基礎映象,然後它包含 Docker 用於複製應用程式所需的所有檔案及其依賴項的命令,最後,它還包含應用程式在其下執行的命令,例如 dotnet run。使用 docker build 構建映象,然後使用 docker run 執行它,公開您的 ASP.NET 應用程式正在偵聽的埠。

2. 如何在 Docker 化的 ASP.NET 應用程式中管理配置設定?

您可以使用環境變數來控制 ASP.NET 應用程式中的配置設定。使用 ENV 引數在您的 Dockerfile 中設定它們,或者使用 docker run 的 -e 選項在執行時傳遞它們。透過使用 IConfiguration 等配置提供程式,可以在您的 ASP.NET 程式碼中訪問這些變數。

3. 如何將 Docker 化的 ASP.NET 應用程式與資料庫整合?

要將您的 ASP.NET 應用程式連線到資料庫,請在單獨的容器中執行資料庫——例如,MySQL 或 SQL Server——並在您的應用程式中使用資料庫的正確驅動程式。

確保容器之間有足夠的網路連線。在您的 ASP.NET 應用程式程式碼中配置連線字串以連線到資料庫。考慮使用容器編排平臺(例如 Kubernetes)來幫助管理應用程式和資料庫的多個容器。

廣告