如何在 Docker 中運(yùn)行 Aspose.Words
Aspose.Words是一種高級Word文檔處理API,用于執(zhí)行各種文檔管理和操作任務(wù)。API支持生成,修改,轉(zhuǎn)換,呈現(xiàn)和打印文檔,而無需在跨平臺應(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 的信息,請參閱“另請參閱”部分中的鏈接。
-
下面提供的示例中使用了 Visual Studio 2017、.NET Core 2.2 SDK。
你好世界應(yīng)用程序
在此示例中,您將創(chuàng)建一個簡單的 Hello World 控制臺應(yīng)用程序,用于生成“Hello World!” 文檔并將其保存為所有支持的保存格式。然后可以在 Docker 中構(gòu)建并運(yùn)行該應(yīng)用程序。
創(chuàng)建控制臺應(yīng)用程序
要創(chuàng)建 Hello World 程序,請按照以下步驟操作:
-
安裝 Docker 后,請確保它使用 Linux 容器(默認(rèn))。如有必要,請從 Docker 桌面菜單中選擇切換到 Linux 容器選項(xiàng)。
-
在 Visual Studio 中,創(chuàng)建一個 .NET Core 控制臺應(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)后,編寫一個簡單的程序來創(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)用程序時,主機(jī)上的一個文件夾將被掛載到容器中的這個文件夾中。這將使您能夠輕松查看 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ù)制
上面是一個簡單的Dockerfile,其中包含以下指令:
-
要使用的 SDK 鏡像。這是 .NET Core SDK 2.2 映像。Docker 將在構(gòu)建運(yùn)行時下載它。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í)行該命令可能需要更長的時間,因?yàn)?Docker 需要下載所需的鏡像。上一個命令完成后,運(yùn)行以下命令:
docker run --mount type=bind,source=C:\Temp,target=/TestOut --rm awtest from Docker
點(diǎn)擊復(fù)制
請注意掛載參數(shù),因?yàn)槿缜八觯鳈C(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 容器(用于跨平臺部署),它比 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 1.68.1.1 版本中得到解決。如果您需要在 Windows 容器中運(yùn)行 Aspose.Words,請將 .NET Framework 基礎(chǔ)映像與 .NET Framework 版本的 Aspose.Words 一起使用,該版本不依賴于 SkiaSharp。
SkiaSharp 是原生 Skia 庫的包裝器。SkiaSharp NuGet 包中提供了以下運(yùn)行時:
-
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) 上測試。
-
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)行時映像重。下面的示例演示了如何修改 Docker 文件,以便使用 SDK 映像來構(gòu)建應(yīng)用程序,以及運(yùn)行時映像來運(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ù)制
也可以查看
-
-
-
-
選項(xiàng)
-
安裝
-
的其他信息
-
使用其他 NuGet 包: 、 、 、
-
如需下載產(chǎn)品Aspose.Words ,請點(diǎn)擊產(chǎn)品名進(jìn)入下載頁面