如何创建 .NET Web API 的 Docker 映像

Docker 的主要优势之一是它允许您运行软件项目,而无需设置复杂的开发环境。

本指南将向您展示如何创建 .NET 5 Web API 的 Docker 映像。然后,您可以使用该映像从任何安装了 Docker 的 PC 运行后端代码,并与前端 Web 项目或移动应用程序中的 API 进行交互。

创建 .NET 5 Web API

Docker 和 .NET 5 都是开源和跨平台的,因此无论您使用的是 macOS、Windows 还是 Linux,都可以遵循本指南。

使用 dotnet CLI 通过以下命令创建 ASP.NET Web API 项目:

 dotnet new webapi -o aspdockerapi

上面的命令创建了一个名为aspdockerapi的项目,并将它放在一个同名文件夹中。此外,该应用程序使用一些示例天气预报数据构建了一个 API 控制器。

注意:如果您的 PC 上没有安装 .NET 5,您可以从下面的链接下载。

下载适用于 Windows、macOS 和 Linux 的 .NET 5

创建项目后,您可以使用以下命令进入项目的根文件夹。

 cd aspdockerapi

您可以使用以下命令运行和提供 Web API。

 dotnet run

默认情况下,应用程序将在端口 5001 上提供服务。您可以在浏览器中通过以下 URL 查看应用程序的示例数据: https://localhost:5001/weatherforecast ,API 数据应如下所示。

了解更多:什么是 API?

创建 Docker 镜像说明

要创建 Docker 映像,您需要向 Docker 引擎提供有关如何构建它的一些说明。这些指令应该放在一个名为Dockerfile的文件中。请注意,该文件没有扩展名。

使用以下命令在您的应用程序项目根文件夹中创建Dockerfile

 touch Dockerfile

创建Dockerfile 后,您的项目文件夹结构应类似于以下内容:

现在,将下面的代码复制并粘贴到您的Dockerfile 中

 FROM mcr.microsoft.com/dotnet/aspnet:5.0-focal AS base
WORKDIR /app
EXPOSE 80
FROM mcr.microsoft.com/dotnet/sdk:5.0-focal AS build
WORKDIR /src
COPY ["aspdockerapi.csproj", "./"]
RUN dotnet restore "./aspdockerapi.csproj"
COPY . .
WORKDIR "/src/."
RUN dotnet build "aspdockerapi.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "aspdockerapi.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "aspdockerapi.dll"]

注意:在上面的 Dockerfile 中,项目和 dll 名称分别是aspdockerapi.csprojaspdockerapi.dll ,如果您的项目名称不同,请确保使用正确的名称更新您的 Dockerfile。

了解 Dockerfile 说明

Dockerfile主要由 Dockerfile 关键字组成,按照惯例是大写字母单词。关键字指定在 Docker 镜像的每一层中执行的指令。以下是上述 Dockerfile 使用的主要 Docker 关键字。

1.发件人

FROM关键字指定我们希望在其上构建镜像的基础镜像。在上面的 Dockerfile 中,初始基础镜像是来自 Microsoft 的 .NET 5 镜像。 .NET 5 基础映像包含运行应用程序所需的组件。

2. 工作目录

WORKDIR设置图像内的工作目录或上下文。在此示例中,使用以下语句WORKDIR /app/app目录指定为默认根工作目录。

3. 复制

COPY关键字只是从一个文件夹复制内容并将其放入另一个文件夹。在这个例子中,它最初用于复制主项目文件,即aspdockerapicsproj进入图像工作目录。

4. 运行

RUN关键字用于在 Docker 映像中运行特定的 Linux 命令。在上面的Dockerfile中RUN命令用于恢复依赖、构建ASP.NET项目和发布项目。

5.命令

CMD关键字有点类似于上面讨论的RUN关键字。它也用于运行 Linux 命令,但与运行用于构建映像的命令的RUN关键字不同, CMD关键字用于在容器实例中启动映像时运行 Linux 命令。

6.曝光

EXPOSE关键字用于将 Docker 镜像内部的端口暴露给外界。在这种情况下,镜像暴露了端口 80,用于在运行 Docker 容器时暴露 API。

构建 Docker 镜像

要基于Dockerfile构建 Docker 镜像只需在项目的根文件夹中运行以下命令,即Dockerfile所在的位置。

 docker build -t dockerwebapi -f Dockerfile .

上面的命令使用名称dockerwebapi标记 Docker 映像,并指定构建此映像的说明位于Dockerfile 中

镜像构建完成后,您可以使用以下命令检查它是否被列为本地 Docker 镜像:

 docker images

上面命令的输出应该类似于下面的输出,在这种情况下,图像 ( dockerwebapi ) 出现在第一行。

如果你的 PC 上没有安装 Docker, 这里是如何在 Ubuntu Linux 上安装 docker ,否则使用下面的链接下载和安装 Docker。

下载Docker下载安装指南

运行 Docker 镜像

要运行新创建的 Docker 映像,请使用以下命令。 -ti选项指定映像应以交互终端模式运行,– rm指定容器应在退出后立即删除。

 docker run -ti --rm -p 8080:80 dockerwebapi

此外,该命令指定 Docker 容器应在 HTTP 端口 8080 上运行,该端口映射到容器内的端口 80。

在浏览器中访问 URL: http://localhost:8080/WeatherForecast ,您会发现正在运行的 Docker 实例正在提供 API 数据。

为什么要使用 Docker?

本指南向您展示了如何创建 .NET 5 Web API 的 Docker 映像。

使用 Docker,您可以自动化部署应用程序的方式,简化软件开发环境的设置,并简化与其他软件工程师的协作。

Docker 还提供了一些优于其他虚拟化技术的优势,这就是为什么您应该考虑在您的软件工程项目中使用它。