Dockerize一个ASP.NET Core应用程序

预计阅读时间:4分钟

介绍

本示例演示了如何通过dockerize ASP.NET Core应用程序。

为什么要构建ASP.NET Core?

  • 开源的
  • 在Windows,MacOS和Linux上跨平台开发和运行ASP.NET Core应用
  • 非常适合现代基于云的应用程序,例如Web应用程序,IoT应用程序和移动后端
  • ASP.NET Core应用程序可以在.NET Core 或完整的.NET Framework上运行
  • 旨在为部署到云或本地运行的应用程序提供优化的开发框架
  • 模块化组件以最小的开销保留了构建解决方案时的灵活性

先决条件

本示例假定您的计算机上已经有一个ASP.NET Core应用程序。如果您不熟悉ASP.NET,则可以按照一个 简单的教程来初始化项目或克隆我们的ASP.NET Docker Sample

为ASP.NET Core应用程序创建Dockerfile

方法1:

  1. Dockerfile在您的项目文件夹中创建一个。
  2. 将以下文本添加到您Dockerfile的Linux或 Windows容器中。下面的标签是多体系结构的,这意味着它们会根据Docker Desktop for Windows中设置的模式拉入Windows或Linux容器 。阅读有关切换容器的更多信息 。
  3. Dockerfile假定您的应用程序叫做aspnetapp。更改Dockerfile为使用项目的DLL文件。
# syntax=docker/dockerfile:1
FROM mcr.microsoft.com/dotnet/sdk:5.0 AS build-env
WORKDIR /app

# Copy csproj and restore as distinct layers
COPY *.csproj ./
RUN dotnet restore

# Copy everything else and build
COPY ../engine/examples ./
RUN dotnet publish -c Release -o out

# Build runtime image
FROM mcr.microsoft.com/dotnet/aspnet:3.1
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
  1. 要使构建上下文尽可能小 ,请在项目文件夹中添加一个.dockerignore 文件,然后将以下内容复制到其中。
bin/
obj/

方法2(在Docker容器外部构建应用):

  1. Dockerfile在您的项目文件夹中创建一个。
  2. 将以下文本添加到您Dockerfile的Linux或 Windows容器中。下面的标签是多体系结构的,这意味着它们会根据Docker Desktop for Windows中设置的模式拉入Windows或Linux容器 。阅读有关切换容器的更多信息 。
  3. Dockerfile假定您的应用程序叫做aspnetapp。更改Dockerfile为使用项目的DLL文件。此方法假定您的项目已经构建,并且从publish文件夹复制了构建工件。请参阅有关对.Net Core应用程序进行容器化的Microsoft文档。

    docker build这里的步骤将比方法1快得多,因为所有工件都在docker build步骤外部构建,并且与构建基础图像相比,基础图像的大小要小得多。

    对于Jenkins,Azure DevOps,GitLab CI等CI工具,此方法是首选方法,因为如果Docker不是唯一使用的部署模型,则可以在多个部署模型中使用相同的工件。此外,您将能够运行单元测试并发布代码覆盖率报告,或在CI所构建的工件上使用自定义插件。

      # syntax=docker/dockerfile:1
      FROM mcr.microsoft.com/dotnet/aspnet:5.0
      COPY bin/Release/netcoreapp3.1/publish/ App/
      WORKDIR /App
      ENTRYPOINT ["dotnet", "aspnetapp.dll"]
    
  4. 要使构建上下文尽可能小 ,请在项目文件夹中添加一个.dockerignore 文件

构建并运行Docker映像

  1. 打开命令提示符,然后导航到您的项目文件夹。
  2. 使用以下命令来构建和运行您的Docker映像:
$ docker build -t aspnetapp .
$ docker run -d -p 8080:80 --name myapp aspnetapp

查看从容器运行的网页

  • 转到localhost:8080在Web浏览器中访问您的应用程序。
  • 如果您使用的是Nano Windows容器 ,但尚未更新至Windows Creator更新,则存在一个错误会影响Windows 10如何 通过“ NAT” (网络地址转换)与容器进行对话。您必须直接点击容器的IP。您可以通过以下步骤获取容器的IP地址:
    1. 跑步 docker inspect -f "{{ .NetworkSettings.Networks.nat.IPAddress }}" myapp
    2. 复制容器IP地址并粘贴到浏览器中。(例如,172.16.240.197

进一步阅读

dockerizedockerizingdotnet.NETCore文章示例平台安装容器图像图像dockerfile构建asp.netasp.net核心