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://127.0.0.1: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://127.0.0.1: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)来帮助管理应用程序和数据库的多个容器。

广告