Docker - 设置 ASP.Net
Docker - 设置 ASP.NET Core
Section titled “Docker - 设置 ASP.NET Core”ASP.NET Core 是 Microsoft 的现代、跨平台、开源的构建 Web 应用程序的框架。Docker 提供了一种极好的方式,用于在不同环境中一致地打包和部署 ASP.NET Core 应用程序。
本章重点介绍如何使用官方 Microsoft Docker 镜像将一个基本的 ASP.NET Core 应用程序 容器化(containerize)。
- 已安装 Docker(Windows/Mac 上安装 Docker Desktop,或 Linux 上安装 Docker Engine)。
- 本地已安装 .NET SDK(用于创建初始项目,如果只使用 Docker 构建则非必需)。
创建一个示例 ASP.NET Core 应用
Section titled “创建一个示例 ASP.NET Core 应用”步骤 1:使用 .NET CLI 创建一个新的 ASP.NET Core Web 应用程序。
# 创建一个新目录并进入该目录mkdir my-aspnet-appcd my-aspnet-app
# 创建一个新的最小 Web API 项目(或使用 'webapp' 创建 Razor Pages/MVC 项目)dotnet new webapi这会创建一个基本的项目结构,包括 .csproj、Program.cs 等文件。
创建 Dockerfile
Section titled “创建 Dockerfile”步骤 2:在 my-aspnet-app 目录中创建一个名为 Dockerfile 的文件。.NET 应用程序的常见模式是 多阶段构建(multi-stage build),它可以优化最终镜像的大小。
# 使用官方的 .NET SDK 镜像来构建应用程序# 选择与你的项目目标框架匹配的特定版本FROM mcr.microsoft.com/dotnet/sdk:7.0 AS build-envWORKDIR /app
# 复制 csproj 并 restore,作为不同的层来利用 Docker 缓存COPY *.csproj .RUN dotnet restore
# 复制应用程序的其余代码COPY . .
# 发布应用程序# 使用 Release 配置并输出到 /app/outRUN dotnet publish -c Release -o out --no-restore
# 构建运行时镜像# 使用官方的 ASP.NET Core 运行时镜像,它比 SDK 镜像小FROM mcr.microsoft.com/dotnet/aspnet:7.0WORKDIR /app
# 从构建阶段复制发布的输出COPY --from=build-env /app/out .
# 暴露应用程序监听的端口(容器中的 Kestrel 默认是 80)EXPOSE 80
# 定义容器的入口点# 将 'MyWebApp.dll' 替换为你应用程序 DLL 文件的实际名称ENTRYPOINT ["dotnet", "my-aspnet-app.dll"]重要提示: 将 ENTRYPOINT 指令中的 my-aspnet-app.dll 替换为你项目生成的 DLL 文件的实际名称(通常在发布后位于 bin/Release/netX.X/ 文件夹中,并与你的 .csproj 文件名匹配)。
多阶段构建的解释:
- 阶段 1 (
build-env): 使用较大的.NET SDK镜像,其中包含构建和发布应用程序所需的工具。它会 restore 依赖项,复制代码,并将 Release 构建发布到/app/out目录。 - 阶段 2(最终阶段): 从小得多的
ASP.NET Runtime镜像开始,它只包含 运行 应用程序所需的依赖项。它 仅 从build-env阶段复制发布的应用程序 artifact(COPY --from=build-env ...)。这会显著减小最终镜像的大小。 ENTRYPOINT:配置容器使用dotnet YourApp.dll运行应用程序。
构建 Docker 镜像
Section titled “构建 Docker 镜像”步骤 3:使用 docker build 构建镜像。确保你位于 my-aspnet-app 目录中。
docker build -t my-aspnet-app:1.0 .步骤 4:从你刚刚构建的镜像运行容器,将主机端口 映射(mapping) 到容器暴露的端口(80)。
# 运行容器,将主机端口 5000 映射到容器端口 80docker run -d -p 5000:80 --name my-running-app my-aspnet-app:1.0步骤 5:测试应用程序。打开你的浏览器并访问 http://localhost:5000。如果你使用了 webapi 模板,尝试访问 http://localhost:5000/weatherforecast。
你现在已经成功使用 Docker 将一个 ASP.NET Core 应用程序 容器化 并运行起来了。