如何在 Docker 中運(yùn)行 Aspose.Words
Aspose.Words是一種高級(jí)Word文檔處理API,用于執(zhí)行各種文檔管理和操作任務(wù)。API支持生成,修改,轉(zhuǎn)換,呈現(xiàn)和打印文檔,而無需在跨平臺(tái)應(yīng)用程序中直接使用Microsoft Word。
Aspose API支持流行文件格式處理,并允許將各類文檔導(dǎo)出或轉(zhuǎn)換為固定布局文件格式和最常用的圖像/多媒體格式。
如果您的目標(biāo)是微服務(wù),或者您的堆棧中的主要技術(shù)不是 .NET、C++ 或 Java,但您需要 Aspose.Words 功能,或者您已經(jīng)在堆棧中使用 Docker,那么您可能有興趣使用 Aspose .Docker 容器中的單詞。
微服務(wù)與容器化相結(jié)合使得輕松組合技術(shù)成為可能。Docker 允許您輕松地將 Aspose.Words 功能集成到您的應(yīng)用程序中,無論您的開發(fā)堆棧中采用什么技術(shù)。
Aspose技術(shù)交流群(761297826)
先決條件
-
Docker 必須安裝在您的系統(tǒng)上。有關(guān)如何在 Windows 或 Mac 上安裝 Docker 的信息,請(qǐng)參閱“另請(qǐng)參閱”部分中的鏈接。
-
下面提供的示例中使用了 Visual Studio 2017、.NET Core 2.2 SDK。
你好世界應(yīng)用程序
在此示例中,您將創(chuàng)建一個(gè)簡(jiǎn)單的 Hello World 控制臺(tái)應(yīng)用程序,用于生成“Hello World!” 文檔并將其保存為所有支持的保存格式。然后可以在 Docker 中構(gòu)建并運(yùn)行該應(yīng)用程序。
創(chuàng)建控制臺(tái)應(yīng)用程序
要?jiǎng)?chuàng)建 Hello World 程序,請(qǐng)按照以下步驟操作:
-
安裝 Docker 后,請(qǐng)確保它使用 Linux 容器(默認(rèn))。如有必要,請(qǐng)從 Docker 桌面菜單中選擇切換到 Linux 容器選項(xiàng)。
-
在 Visual Studio 中,創(chuàng)建一個(gè) .NET Core 控制臺(tái)應(yīng)用程序。
-
從 NuGet 安裝最新的 Aspose.Words 版本。SkiaSharp 將作為 Aspose.Words 的依賴項(xiàng)安裝。
-
由于應(yīng)用程序?qū)⒃?Linux 上運(yùn)行,因此必須安裝適當(dāng)?shù)谋緳C(jī) Linux 資產(chǎn)。從 Debian 基礎(chǔ)映像開始并安裝 SkiaSharp.NativeAssets.Linux。
-
添加所有必需的依賴項(xiàng)后,編寫一個(gè)簡(jiǎn)單的程序來創(chuàng)建“Hello World!” 文檔并將其保存為所有支持的保存格式:
using Aspose.Words; using System; namespace Aspose.Words.Docker.Sample { class Program { static void Main(string[] args) { // Create document and save it in all available formats. Document doc = new Document(); DocumentBuilder builder = new DocumentBuilder(doc); builder.Writeln("Hello from Aspose.Words!!!"); foreach (SaveFormat sf in Enum.GetValues(typeof(SaveFormat))) { if (sf != SaveFormat.Unknown) { try { // The folder specified will be mounted as a volume when run the application in Docker image. doc.Save(string.Format("/TestOut/out{0}", FileFormatUtil.SaveFormatToExtension(sf)), sf); Console.WriteLine("Saving {0}\t\t[OK]", sf); } catch { Console.WriteLine("Saving {0}\t\t[FAILED]", sf); } } } } } }
點(diǎn)擊復(fù)制
“TestOut”文件夾被指定為用于保存輸出文檔的輸出文件夾。當(dāng)在Docker中運(yùn)行應(yīng)用程序時(shí),主機(jī)上的一個(gè)文件夾將被掛載到容器中的這個(gè)文件夾中。這將使您能夠輕松查看 Docker 容器中 Aspose.Words 生成的輸出。
配置 Dockerfile
下一步是創(chuàng)建和配置 Dockerfile。
-
創(chuàng)建 Dockerfile 并將其放置在應(yīng)用程序的解決方案文件旁邊。保留此文件名,不帶擴(kuò)展名(默認(rèn))。
-
在 Dockerfile 中,指定:
FROM mcr.microsoft.com/dotnet/core/sdk:2.2 WORKDIR /app RUN apt-get update && apt-get install -y libfontconfig1 COPY . ./ RUN dotnet publish -c Release -o out ENTRYPOINT ["dotnet", "Aspse.Words.Docker.Sample/out/Aspse.Words.Docker.Sample.dll"]
點(diǎn)擊復(fù)制
上面是一個(gè)簡(jiǎn)單的Dockerfile,其中包含以下指令:
-
要使用的 SDK 鏡像。這是 .NET Core SDK 2.2 映像。Docker 將在構(gòu)建運(yùn)行時(shí)下載它。SDK的版本被指定為標(biāo)簽。
-
工作目錄,在下一行中指定。
-
安裝 libfontconfig1 的命令在容器中運(yùn)行。這是 SkiaSharp 所要求的。
-
該命令將所有內(nèi)容復(fù)制到容器、發(fā)布應(yīng)用程序并指定入口點(diǎn)。
在 Docker 中構(gòu)建并運(yùn)行應(yīng)用程序
現(xiàn)在可以在 Docker 中構(gòu)建并運(yùn)行該應(yīng)用程序。打開您最喜歡的命令提示符,將目錄更改為應(yīng)用程序所在的文件夾(放置解決方案文件和 Dockerfile 的文件夾)并運(yùn)行以下命令:
docker build -t awtest .
點(diǎn)擊復(fù)制
第一次執(zhí)行該命令可能需要更長的時(shí)間,因?yàn)?Docker 需要下載所需的鏡像。上一個(gè)命令完成后,運(yùn)行以下命令:
docker run --mount type=bind,source=C:\Temp,target=/TestOut --rm awtest from Docker
點(diǎn)擊復(fù)制
請(qǐng)注意掛載參數(shù),因?yàn)槿缜八?,主機(jī)上的文件夾被掛載到容器的文件夾中,以便輕松查看應(yīng)用程序執(zhí)行的結(jié)果。Linux 中的路徑區(qū)分大小寫。
支持 Aspose.Words 的圖像
Aspose.Words 可用于 .NET Framework 和 .NET Core。.NET Core 映像的大小比 .NET Framework 映像小得多,這使得 .NET Core 成為創(chuàng)建微服務(wù)和在容器中使用的更好選擇??梢詫?yīng)用程序部署到 Linux Docker 容器(用于跨平臺(tái)部署),它比 Windows 容器更輕。
.NET Core SDK 的官方映像提供用于:
-
Debian 9 and 10
-
Ubuntu 18.04 and 19.04
-
Alpine 3.7 and 3.9
-
Windows Nano Server
為了處理圖形,Aspose.Words for .NET Standard 依賴于 SkiaSharp。這限制了 Aspose.Words 可以運(yùn)行的圖像如下:
-
Debian 9 and 10
-
Ubuntu 18.04 and 19.04
-
Alpine 3.9
由于缺少一些本機(jī)依賴項(xiàng),SkiaSharp 無法在 Windows Nano Server 上運(yùn)行, 這是 SkiaSharp 中的一個(gè)已知問題。該問題將在 SkiaSharp 1.68.1.1 版本中得到解決。如果您需要在 Windows 容器中運(yùn)行 Aspose.Words,請(qǐng)將 .NET Framework 基礎(chǔ)映像與 .NET Framework 版本的 Aspose.Words 一起使用,該版本不依賴于 SkiaSharp。
SkiaSharp 是原生 Skia 庫的包裝器。SkiaSharp NuGet 包中提供了以下運(yùn)行時(shí):
-
osx
-
tizen-armel
-
tizen-x86
-
win10-arm
-
win10-x64
-
win10-x86
-
win-x64
-
win-x86
要在 Linux 中運(yùn)行它,您應(yīng)該使用其他 NuGet 包以及相應(yīng)的本機(jī)資源,例如 Skia 庫的本機(jī)構(gòu)建,如下所示:
-
SkiaSharp.NativeAssets.Linux – 為基于 x64 Debian 的 Linux 發(fā)行版提供本機(jī) Skia 構(gòu)建。
-
SkiaSharp.NativeAssets.Linux.NoDependency – 該軟件包旨在用于不具有 libfontconfig 依賴項(xiàng)的 Linux 發(fā)行版。在 RHEL 7 (x64) 上測(cè)試。
-
Goelze.SkiaSharp.NativeAssets.AlpineLinux – 為 x64 Alpine Linux 3.9 提供原生 Skia 構(gòu)建。
-
Jellyfin.SkiaSharp.NativeAssets.LinuxArm – 為基于arm32和arm64 Debian的Linux發(fā)行版提供本機(jī)Skia構(gòu)建。
更多示例
-
在上面的示例中,應(yīng)用程序在 SDK 映像中運(yùn)行。SDK 映像比運(yùn)行時(shí)映像重。下面的示例演示了如何修改 Docker 文件,以便使用 SDK 映像來構(gòu)建應(yīng)用程序,以及運(yùn)行時(shí)映像來運(yùn)行它:
FROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS build WORKDIR /app \# copy csproj and restore as distinct layers COPY Aspose.Words.Docker.Sample/*.csproj ./Aspose.Words.Docker.Sample/ WORKDIR /app/Aspose.Words.Docker.Sample RUN dotnet restore \# copy and publish app and libraries WORKDIR /app/ COPY Aspose.Words.Docker.Sample/. ./Aspose.Words.Docker.Sample/ WORKDIR /app/Aspose.Words.Docker.Sample RUN dotnet publish -c Release -o out \# copy to runtime environment FROM mcr.microsoft.com/dotnet/core/runtime:2.2 AS runtime WORKDIR /app \# libfontconfig1 is required to properly work with fonts in Linux. RUN apt-get update && apt-get install -y libfontconfig1 RUN apt install libharfbuzz-icu0 COPY --from=build /app/Aspose.Words.Docker.Sample/out ./ ENTRYPOINT ["dotnet", "Aspose.Words.Docker.Sample.dll"]
點(diǎn)擊復(fù)制
-
要在 Ubuntu 18.04 中運(yùn)行該應(yīng)用程序,Dockerfile 幾乎保持不變(僅更改了標(biāo)簽):
FROM mcr.microsoft.com/dotnet/core/sdk:2.2-bionic AS build WORKDIR /app \# copy csproj and restore as distinct layers COPY Aspose.Words.Docker.Sample/*.csproj ./Aspose.Words.Docker.Sample/ WORKDIR /app/Aspose.Words.Docker.Sample RUN dotnet restore \# copy and publish app and libraries WORKDIR /app/ COPY Aspose.Words.Docker.Sample/. ./Aspose.Words.Docker.Sample/ WORKDIR /app/Aspose.Words.Docker.Sample RUN dotnet publish -c Release -o out \# copy to runtime environment FROM mcr.microsoft.com/dotnet/core/runtime:2.2-bionic AS runtime WORKDIR /app \# libfontconfig1 is required to properly work with fonts in Linux. RUN apt-get update && apt-get install -y libfontconfig1 RUN apt install libharfbuzz-icu0 COPY --from=build /app/Aspose.Words.Docker.Sample/out ./ ENTRYPOINT ["dotnet", "Aspose.Words.Docker.Sample.dll"]
點(diǎn)擊復(fù)制
-
要在 Alpine Linux 中運(yùn)行該應(yīng)用程序,需要添加 SkiaSharp 本機(jī)資產(chǎn)并使用以下 Dockerfile:
FROM mcr.microsoft.com/dotnet/core/sdk:2.2-alpine3.9 AS build WORKDIR /app \# copy csproj and restore as distinct layers COPY Aspose.Words.Docker.Sample/*.csproj ./Aspose.Words.Docker.Sample/ WORKDIR /app/Aspose.Words.Docker.Sample RUN dotnet restore \# copy and publish app and libraries WORKDIR /app/ COPY Aspose.Words.Docker.Sample/. ./Aspose.Words.Docker.Sample/ WORKDIR /app/Aspose.Words.Docker.Sample RUN dotnet publish -c Release -o out \# copy to runtime environment FROM mcr.microsoft.com/dotnet/core/runtime:2.2-alpine3.9 AS runtime WORKDIR /app \# fontconfig is required to properly work with fonts in Linux. RUN apk update && apk upgrade && apk add fontconfig && apk add harfbuzz COPY --from=build /app/Aspose.Words.Docker.Sample/out ./ ENTRYPOINT ["dotnet", "Aspose.Words.Docker.Sample.dll"]
點(diǎn)擊復(fù)制
-
要在 RHEL 7 中運(yùn)行該應(yīng)用程序,需要添加 SkiaSharp 本機(jī)資產(chǎn)并使用以下 Dockerfile:
FROM mcr.microsoft.com/dotnet/core/sdk:2.1 AS build WORKDIR /app \# copy csproj and restore as distinct layers COPY Aspose.Words.Docker.Sample/*.csproj ./Aspose.Words.Docker.Sample/ WORKDIR /app/Aspose.Words.Docker.Sample RUN dotnet restore \# copy and publish app and libraries WORKDIR /app/ COPY Aspose.Words.Docker.Sample/. ./Aspose.Words.Docker.Sample/ WORKDIR /app/Aspose.Words.Docker.Sample RUN dotnet publish -c Release -o out \# copy to runtime environment FROM kkamberta/dotnet-21-rhel7 AS runtime WORKDIR /app COPY --from=build /app/Aspose.Words.Docker.Sample/out ./ ENTRYPOINT ["/opt/rh/rh-dotnet21/root/usr/bin/dotnet", "Aspose.Words.Docker.Sample.dll"]
點(diǎn)擊復(fù)制
也可以查看
-
切換到 Linux 容器 選項(xiàng)
-
使用其他 NuGet 包: SkiaSharp.NativeAssets.Linux、 SkiaSharp.NativeAssets.Linux.NoDependencies、 Goelze.SkiaSharp.NativeAssets.AlpineLinux、 Jellyfin.SkiaSharp.NativeAssets.LinuxArm
如需下載產(chǎn)品Aspose.Words ,請(qǐng)點(diǎn)擊產(chǎn)品名進(jìn)入下載頁面