发布于 2026-01-06 0 阅读
0

Docker 与 ASP.NET

Docker 与 ASP.NET

本文将逐步介绍如何从 ASP.NET 项目创建 Docker 镜像。

先决条件

  • Docker 已安装
  • ASP.NET Core SDK
  • Visual Studio(或 VS Code)

1. 创建一个 ASP.NET Core 项目

创建一个新的 ASP.NET Core 项目(如果还没有创建的话)

dotnet new mvc -n MyProject
cd MyProject
Enter fullscreen mode Exit fullscreen mode

2. 将 ASP.NET Core 应用程序容器化

要将 ASP.NET Core 应用程序容器化,您需要在项目目录中创建一个 Dockerfile 文件。Dockerfile
文件包含构建 Docker 镜像的指令。
在 ASP.NET Core 项目的根目录中创建一个名为“Dockerfile”的新文件,并添加以下内容:

# Use the official ASP.NET Core runtime image as a base
FROM mcr.microsoft.com/dotnet/aspnet:6.0 AS base
WORKDIR /app
EXPOSE 80

# Copy the published output of the ASP.NET Core application into the container
FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
WORKDIR /src
COPY ["MyProject.csproj", "."]
RUN dotnet restore "./MyProject.csproj"
COPY . .
WORKDIR "/src/."
RUN dotnet build "MyProject.csproj" -c Release -o /app/build

FROM build AS publish
RUN dotnet publish "MyProject.csproj" -c Release -o /app/publish

FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "MyProject.dll"]
Enter fullscreen mode Exit fullscreen mode

此 Dockerfile 定义了一个多阶段构建过程:

第一阶段(基础阶段)设置基础镜像,开放 80 端口,并设置工作目录。
第二阶段(构建阶段)恢复依赖项,构建应用程序并发布。
第三阶段(发布阶段)将已发布的输出复制到另一个阶段。
最后阶段(最终阶段)设置运行时环境并指定应用程序的入口点。

3. 构建 Docker 镜像

创建 Dockerfile 后,您可以使用 docker build 命令构建 Docker 镜像。

docker build -t myproject .
Enter fullscreen mode Exit fullscreen mode

此命令使用当前目录(.)中的 Dockerfile 构建一个名为 myproject 的 Docker 镜像。

现在我们的镜像已经准备好托管在 Docker 主机上,并可以下载到任何服务器进行部署和安装其依赖项
,但我们将首先在本地主机上进行测试。

4. 运行 Docker 容器

成功构建 Docker 镜像后,您可以使用以下命令运行 Docker 容器。

docker run -d -p 8080:80 --name myproject-container myproject
Enter fullscreen mode Exit fullscreen mode

此命令基于 myproject 镜像启动一个名为 myproject-container 的 Docker 容器,并将主机上的 8080 端口映射到容器内的 80 端口(-p 8080:80)。

-d 标志以分离模式运行容器,允许其在后台运行。

5. 访问 ASP.NET Core 应用程序

Docker 容器运行后,您可以通过在 Web 浏览器中访问http://localhost:8080来访问 ASP.NET Core 应用程序。如果您在远程服务器上运行 Docker,请将 localhost 替换为服务器的 IP 地址。

文章来源:https://dev.to/hasanelsherbiny/docker-with-aspnet-4c0i