ASP.NET Core 的 Docker 映像Docker images for ASP.NET Core

在本教程中,你将了解:

  • 了解 Microsoft.NET 核心 Docker 映像
  • 下载 ASP.NET Core 示例应用
  • 本地运行示例应用
  • 在 Linux 容器中运行示例应用
  • 在 Windows 容器中运行示例应用
  • 手动生成和部署

在本教程中,你下载 ASP.NET Core 示例应用并在 Docker 容器中运行它。此示例适用于 Linux 和 Windows 容器。

示例 Dockerfile 使用 在不同的容器中生成和运行。生成和运行容器是由 Microsoft 从 Docker 中心提供的映像中创建的:

此示例将此映像用于生成应用。此映像包含带有命令行工具 (CLI) 的 .NET Core SDK。此映像对本地开发、调试和单元测试进行了优化。为开发和编译而安装的工具使其成为一个相对较大的映像。

  • dotnet/core/aspnet

此示例将此映像用于运行应用。此映像包含 ASP.NET Core 运行时和库,并针对在生产中运行应用进行了优化。此映像专为部署和应用启动的速度而设计,相对较小,因此优化了从 Docker 注册表到 Docker 主机的网络性能。仅将运行应用所需的二进制文件和内容复制到容器。已准备运行内容,以此实现从 Docker run 到应用启动的最快时间。Docker 模型中不需要动态代码编译。

先决条件Prerequisites

下载示例应用Download the sample app

  • 通过克隆 下载示例:
  • 导航到 dotnet-docker/samples/aspnetapp/aspnetapp 下的项目文件夹。

  • 运行以下命令以本地生成并运行应用:

  1. dotnet run
  • 在浏览器中转到 http://localhost:5000 以测试应用。

  • 在命令提示符处按 Ctrl+C 以停止应用。

在 Linux 容器中运行Run in a Linux container

  • 运行以下命令以在 Docker 中生成并运行示例:

  1. docker build -t aspnetapp .
  2. docker run -it --rm -p 5000:80 --name aspnetcore_sample aspnetapp

build 命令参数:

  • 将映像命名为 aspnetapp。
  • 在当前文件夹(末尾的句点)中查找 Dockerfile。
    运行命令参数:

  • 分配伪 TTY,即使未附加也使其保持打开状态。(与 —interactive —tty 的效果相同。)

  • 容器在退出时自动删除。
  • 将本地计算机上的端口 5000 映射到容器中的端口 80。
  • 将容器命名为 aspnetcore_sample。
  • 指定 aspnetapp 映像。

在 Windows 容器中运行Run in a Windows container

  • 在 Docker 客户端中,切换到 Windows 容器。

导航到 dotnet-docker/samples/aspnetapp 下的 docker 文件文件夹。

  • 运行以下命令以在 Docker 中生成并运行示例:
  1. docker build -t aspnetapp .
  2. docker run -it --rm --name aspnetcore_sample aspnetapp
  • 对于 Windows 容器,你需要容器的 IP 地址(浏览到 http://localhost:5000 不起作用):

    • 打开另一个命令提示符。

    • 运行 docker ps 以查看正在运行的容器。验证其中是否包含“aspnetcore_sample”容器。

    • 运行 docker exec aspnetcore_sample ipconfig 以显示容器的 IP 地址。该命令的输出如以下示例所示:

  • 将容器 IPv4 地址(例如,172.29.245.43)复制并粘贴到浏览器地址栏以测试应用。
  • 导航到 dotnet-docker/samples/aspnetapp/aspnetapp 下的项目文件夹。

  • 运行 命令:

  1. dotnet publish -c Release -o published

命令参数:

  • 在发布模式(默认为调试模式)下生成应用程序。
  • 在“已发布”文件夹中创建文件 。

    • 运行该应用程序。
  • Windows:

  1. dotnet published\aspnetapp.dll
  • Linux:
  1. dotnet published/aspnetapp.dll

要在 Docker 容器中使用手动发布的应用程序,请创建新的 Dockerfile,并使用 docker build . 命令构建容器。

下面是先前运行的 命令使用的 Dockerfile 。它以本部分中所用的方式使用 dotnet publish 进行生成和部署。

  1. FROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS build
  2. WORKDIR /app
  3. # copy csproj and restore as distinct layers
  4. COPY *.sln .
  5. COPY aspnetapp/*.csproj ./aspnetapp/
  6. RUN dotnet restore
  7. # copy everything else and build app
  8. COPY aspnetapp/. ./aspnetapp/
  9. WORKDIR /app/aspnetapp
  10. RUN dotnet publish -c Release -o out
  11. FROM mcr.microsoft.com/dotnet/core/aspnet:2.2 AS runtime
  12. WORKDIR /app
  13. COPY --from=build /app/aspnetapp/out ./
  14. ENTRYPOINT ["dotnet", "aspnetapp.dll"]
  1. FROM mcr.microsoft.com/dotnet/core/aspnet:3.0 AS runtime
  2. COPY published/aspnetapp.dll ./
  3. ENTRYPOINT ["dotnet", "aspnetapp.dll"]

下面是先前运行的 docker build 命令使用的 Dockerfile 。它以本部分中所用的方式使用 dotnet publish 进行生成和部署。

  1. FROM mcr.microsoft.com/dotnet/core/sdk:3.0 AS build
  2. WORKDIR /app
  3. # copy csproj and restore as distinct layers
  4. COPY *.sln .
  5. COPY aspnetapp/*.csproj ./aspnetapp/
  6. RUN dotnet restore
  7. # copy everything else and build app
  8. COPY aspnetapp/. ./aspnetapp/
  9. WORKDIR /app/aspnetapp
  10. RUN dotnet publish -c Release -o out
  11. FROM mcr.microsoft.com/dotnet/core/aspnet:3.0 AS runtime
  12. WORKDIR /app
  13. ENTRYPOINT ["dotnet", "aspnetapp.dll"]

其他资源Additional resources

后续步骤Next steps

包含示例应用的 Git 存储库还包括文档。有关存储库中可用资源的概述,请参阅。特别是,了解如何实现 HTTPS:

使用 Docker over HTTPS 开发 ASP.NET Core 应用程序