在 Docker 中开始使用 Aspose.HTML for .NET
Docker 容器
Docker 是一个流行的开源平台,可让您在容器中自动部署和管理应用程序。容器有许多功能和优点,为运行应用程序提供了一个轻量级的隔离环境,并允许它们在不同的操作系统和基础设施上一致运行。
容器就像一台虚拟机。它可以安装、删除、停止、恢复或连接到终端。因此,docker 容器是一个轻量级、自足的可执行软件包,其中包含运行应用程序所需的一切:代码、运行时、系统工具、系统库和设置。
在本文中,我们将探讨如何使用 docker 对 .NET 应用程序进行容器化,并将 Aspose.HTML 功能集成到您的项目中。在这里,您将逐步了解如何在 docker 中运行 Aspose.HTML–如何创建控制台应用程序和设置 Dockerfile。
系统要求
在 docker 中运行 Aspose.HTML 之前,必须在系统中安装 docker。要成功安装 Docker Desktop,应确保系统满足安装 docker 的最低要求。有关如何在 Windows、Mac 或 Linux 上安装 docker 的信息,请点击以下链接:
如何创建支持 Docker 的控制台应用程序
举个例子:我们创建了一个简单的
控制台应用程序 ConsoleApp
,它可以转换 HTML 文档(document.html
)并将其保存为 TIFF 格式。这个应用程序可以在 docker 中构建和运行。要创建一个控制台应用程序项目,请遵循以下几个步骤:
- 打开 Visual Studio(示例中使用的是 Visual Studio 2022),在 “Create a new project” 阶段,选择
Console App C#
。
- 默认保留控制台应用程序项目的目录和参数(如示例所示),或指定自己的目录和参数:
- 从框架菜单中选择 .NET 6.0(长期支持)。
- 为项目添加 docker 支持,并选择目标 Linux 操作系统。
添加 docker 支持后,会创建一个包含默认内容的 Dockerfile。
如何配置 Dockerfile
通过正确配置 Dockerfile,你可以定义构建 docker 映像的步骤,并创建一个包含运行应用程序所需的所有依赖项和配置的容器化环境。
- 下面是默认的 Dockerfile 内容:
1#See https://aka.ms/containerfastmode to understand how Visual Studio uses this Dockerfile to build your images for faster debugging.
2
3FROM mcr.microsoft.com/dotnet/runtime:6.0 AS base
4WORKDIR /app
5
6FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
7WORKDIR /src
8COPY ["ConsoleApp/ConsoleApp.csproj", "ConsoleApp/"]
9RUN dotnet restore "ConsoleApp/ConsoleApp.csproj"
10COPY . .
11WORKDIR "/src/ConsoleApp"
12RUN dotnet build "ConsoleApp.csproj" -c Release -o /app/build
13
14FROM build AS publish
15RUN dotnet publish "ConsoleApp.csproj" -c Release -o /app/publish
16
17FROM base AS final
18WORKDIR /app
19COPY --from=publish /app/publish .
20ENTRYPOINT ["dotnet", "ConsoleApp.dll"]
- 您需要编辑 Dockerfile 并安装 libgdiplus、所需的库和字体。
1#See https://aka.ms/customizecontainer to learn how to customize your debug container and how Visual Studio uses this Dockerfile to build your images for faster debugging.
2
3FROM mcr.microsoft.com/dotnet/runtime:6.0 AS base
4WORKDIR /app
5RUN apt-get update \
6 && apt-get install -y --no-install-recommends libgdiplus libc6-dev \
7 && apt-get clean \
8 && rm -rf /var/lib/apt/lists/*
9RUN sed -i'.bak' 's/$/ contrib/' /etc/apt/sources.list
10RUN apt-get update; apt-get install -y ttf-mscorefonts-installer fontconfig
11
12FROM mcr.microsoft.com/dotnet/sdk:6.0 AS build
13WORKDIR /src
14COPY ["ConsoleApp/ConsoleApp.csproj", "ConsoleApp/"]
15RUN dotnet restore "ConsoleApp/ConsoleApp.csproj"
16COPY . .
17WORKDIR "/src/ConsoleApp"
18RUN dotnet build "ConsoleApp.csproj" -c Release -o /app/build
19
20FROM build AS publish
21RUN dotnet publish "ConsoleApp.csproj" -c Release -o /app/publish /p:UseAppHost=false
22
23FROM base AS final
24WORKDIR /app
25COPY --from=publish /app/publish .
26ENTRYPOINT ["dotnet", "ConsoleApp.dll"]
Dockerfile 是一个文本文件,其中包含用于构建 docker 镜像的一系列指令。它可以分为四个不同的区块: docker base image、docker build image、docker publish image和 docker final image。让我们来了解一下 Dockerfile 中的步骤及其含义:
- docker base image定义了基本镜像,并安装了在容器中处理镜像和字体所需的依赖项。
- FROM 关键字需要一个完全限定的 docker 容器镜像名称。在第一行中,指定的基本映像为
mcr.microsoft.com/dotnet/runtime:6.0
。该基本映像为 .NET 应用程序提供运行时环境。 - WORKDIR 命令会将 docker 中的工作目录设置为
/app
。 - RUN 命令会更新软件包列表,安装必要的软件包 libgdiplus、libc6-dev、ttf-mscorefonts-installer 和 fontconfig,然后清理软件包缓存。
- docker build image包含用于构建 .NET 应用程序的说明。
- FROM 命令指定了
mcr.microsoft.com/dotnet/sdk:6.0
基本镜像。dotnet
段是容器存储库,而sdk
段是 Docker 容器镜像名称。该映像包含 .NET 6.0 SDK,允许您构建 .NET 应用程序。 - WORKDIR 指令将容器内的工作目录设置为
/src
。 - COPY 命令将项目文件 ConsoleApp.csproj 从本地目录
ConsoleApp/
复制到容器的/src/ConsoleApp/
目录。 - RUN 命令将执行
dotnet restore
,以还原项目的 NuGet 软件包。 - COPY 命令会告诉 docker 把电脑上指定的文件夹复制到 docker 容器中的一个文件夹–
/scr/
。 - RUN
dotnet build "ConsoleApp.csproj" -c Release -o /app/build
命令使用Release
配置编译在ConsoleApp.csproj
中指定的 .NET 应用程序,并将编译输出存储在容器内的/app/build
目录中。
- docker publish image声明应用程序将被部署。
FROM build AS publish
这一行是在先前的build
阶段的基础上建立一个名为publish
的新 docker 镜像阶段。这表明publish
阶段将继承build
阶段的所有文件、依赖关系和配置。- RUN 命令执行
dotnet publish
以发布配置为Release
的应用程序,输出目录设置为/app/publish
。
- 当 docker 容器启动时,docker final image会运行应用程序。
- FROM 指令使用
base
阶段作为基础图像。 - WORKDIR 命令会将容器内的当前目录更改为
/app
。 - COPY 命令指示 Docker 将已发布的文件从
publish
阶段复制到final
阶段的当前目录。 - ENTRYPOINT 命令用于运行一个可执行文件,即
ConsoleApp.dll
。
Dockerfile 中的这四个模块共同构建了一个多阶段的 docker 镜像。最初的基础阶段和构建阶段用于安装依赖项、还原软件包和构建应用程序。下一个发布和最后一个区块用于发布应用程序,以便在容器启动时部署和运行。
控制台应用程序示例
在示例中,我们建议使用一个简单的程序,将 HTML 文档转换为 TIFF 图像格式:
1using Aspose.Html;
2using Aspose.Html.Rendering.Image;
3
4namespace ConsoleApp
5{
6 internal class Program
7 {
8 static void Main(string[] args)
9 {
10 using var doc = new HTMLDocument("document.html");
11 using var dev = new ImageDevice(new ImageRenderingOptions(ImageFormat.Tiff), "result.tiff");
12 doc.RenderTo(dev);
13 }
14 }
15}
在 Docker 中配置控制台应用程序并运行 Aspose.HTML
- 要在 docker 中运行 Aspose.HTML,请从 NuGet 安装最新的 Aspose.HTML 版本和 System.Drawing.Common 6.0。
- 编辑 ConsoleApp.csproj 项目 – 添加 InvariantGlobalization =
false
选项:
以下文件是一个 .NET 项目文件,定义了创建可执行应用程序所需的项目设置、依赖关系和附加文件。<InvariantGlobalization>
是一个附加元素,用于禁用项目中的不变全球化行为。设置为 false 时,项目将使用默认的全球化行为。
1<Project Sdk="Microsoft.NET.Sdk">
2
3 <PropertyGroup>
4 <OutputType>Exe</OutputType>
5 <TargetFramework>net6.0</TargetFramework>
6 <ImplicitUsings>enable</ImplicitUsings>
7 <Nullable>enable</Nullable>
8 <DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
9 </PropertyGroup>
10
11 <ItemGroup>
12 <PackageReference Include="Aspose.HTML" Version="23.5.0" />
13 <PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.14.0" />
14 <PackageReference Include="System.Drawing.Common" Version="6.0.0" />
15 </ItemGroup>
16
17 <ItemGroup>
18 <None Update="document.html">
19 <CopyToOutputDirectory>Always</CopyToOutputDirectory>
20 </None>
21 </ItemGroup>
22
23 <ItemGroup>
24 <RuntimeHostConfigurationOption Include="System.Drawing.EnableUnixSupport" Value="true" />
25 </ItemGroup>
26
27 <PropertyGroup>
28 <InvariantGlobalization>false</InvariantGlobalization>
29 </PropertyGroup>
30
31</Project>
- 为转换后的文件设置 “复制到输出目录 “属性:
- 添加所有必要的依赖项和属性后,点击绿色按钮,在 docker 容器中运行 HTML 到 TIFF 的转换。