Dockerize an ASP.NET Core application

预计阅读时间:4分钟

Introduction

此示例演示如何对 ASP.NET Core 应用程序进行 docker 化.

Why build ASP.NET Core?

  • Open-source
  • 在 Windows、MacOS 和 Linux 上跨平台开发和运行 ASP.NET Core 应用程序
  • 非常适合现代基于云的应用程序,例如 Web 应用程序、物联网应用程序和移动后端
  • 旨在为部署到云或在本地运行的应用程序提供优化的开发框架
  • 具有最小开销的模块化组件在构建您的解决方案时保持灵活性

Prerequisites

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

Create a Dockerfile for an ASP.NET Core application

Method 1:

  1. 在您的项目文件夹中创建一个Dockerfile .
  2. 将以下文本添加到 Linux 或Windows 容器Dockerfile中. 下面的标签是多架构的,这意味着它们会根据Docker Desktop for Windows中设置的模式来提取 Windows 或 Linux 容器. 阅读有关切换容器的更多信息.
  3. Dockerfile假定您的应用程序名为aspnetapp . 更改Dockerfile以使用项目的 DLL 文件.
# syntax=docker/dockerfile:1
FROM mcr.microsoft.com/dotnet/sdk:6.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:6.0
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "aspnetapp.dll"]
  1. 为了使您的构建上下文尽可能小,请将.dockerignore文件添加到您的项目文件夹并将以下内容复制到其中.
bin/
obj/

Method 2 (build app outside Docker container):

  1. 在您的项目文件夹中创建一个Dockerfile .
  2. 将以下文本添加到 Linux 或Windows 容器Dockerfile中. 下面的标签是多架构的,这意味着它们会根据Docker Desktop for Windows中设置的模式来提取 Windows 或 Linux 容器. 阅读有关切换容器的更多信息.
  3. Dockerfile假定您的应用程序名为aspnetapp . 更改Dockerfile以使用项目的 DLL 文件. 此方法假定您的项目已经构建并且它从发布文件夹复制构建工件. 请参阅有关Containerize a .Net Core app的 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文件添加到您的项目文件夹中.

Build and run the Docker image

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

View the web page running from a container

  • 转到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

Further reading

dockerize, dockerizing, dotnet, .NET, Core, article, example, platform, installation, containers, images, image, dockerfile, build, asp.net, asp.net核心

by  icopy.site