如何在 Docker 中運行 Aspose.Words
Aspose.Words是一種高級Word文檔處理API,用于執行各種文檔管理和操作任務。API支持生成,修改,轉換,呈現和打印文檔,而無需在跨平臺應用程序中直接使用Microsoft Word。
Aspose API支持流行文件格式處理,并允許將各類文檔導出或轉換為固定布局文件格式和最常用的圖像/多媒體格式。
如果您的目標是微服務,或者您的堆棧中的主要技術不是 .NET、C++ 或 Java,但您需要 Aspose.Words 功能,或者您已經在堆棧中使用 Docker,那么您可能有興趣使用 Aspose .Docker 容器中的單詞。
微服務與容器化相結合使得輕松組合技術成為可能。Docker 允許您輕松地將 Aspose.Words 功能集成到您的應用程序中,無論您的開發堆棧中采用什么技術。
Aspose技術交流群(761297826)
先決條件
-
Docker 必須安裝在您的系統上。有關如何在 Windows 或 Mac 上安裝 Docker 的信息,請參閱“另請參閱”部分中的鏈接。
-
下面提供的示例中使用了 Visual Studio 2017、.NET Core 2.2 SDK。
你好世界應用程序
在此示例中,您將創建一個簡單的 Hello World 控制臺應用程序,用于生成“Hello World!” 文檔并將其保存為所有支持的保存格式。然后可以在 Docker 中構建并運行該應用程序。
創建控制臺應用程序
要創建 Hello World 程序,請按照以下步驟操作:
-
安裝 Docker 后,請確保它使用 Linux 容器(默認)。如有必要,請從 Docker 桌面菜單中選擇切換到 Linux 容器選項。
-
在 Visual Studio 中,創建一個 .NET Core 控制臺應用程序。
-
從 NuGet 安裝最新的 Aspose.Words 版本。SkiaSharp 將作為 Aspose.Words 的依賴項安裝。
-
由于應用程序將在 Linux 上運行,因此必須安裝適當的本機 Linux 資產。從 Debian 基礎映像開始并安裝 SkiaSharp.NativeAssets.Linux。
-
添加所有必需的依賴項后,編寫一個簡單的程序來創建“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); } } } } } }
點擊復制
“TestOut”文件夾被指定為用于保存輸出文檔的輸出文件夾。當在Docker中運行應用程序時,主機上的一個文件夾將被掛載到容器中的這個文件夾中。這將使您能夠輕松查看 Docker 容器中 Aspose.Words 生成的輸出。
配置 Dockerfile
下一步是創建和配置 Dockerfile。
-
創建 Dockerfile 并將其放置在應用程序的解決方案文件旁邊。保留此文件名,不帶擴展名(默認)。
-
在 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"]
點擊復制
上面是一個簡單的Dockerfile,其中包含以下指令:
-
要使用的 SDK 鏡像。這是 .NET Core SDK 2.2 映像。Docker 將在構建運行時下載它。SDK的版本被指定為標簽。
-
工作目錄,在下一行中指定。
-
安裝 libfontconfig1 的命令在容器中運行。這是 SkiaSharp 所要求的。
-
該命令將所有內容復制到容器、發布應用程序并指定入口點。
在 Docker 中構建并運行應用程序
現在可以在 Docker 中構建并運行該應用程序。打開您最喜歡的命令提示符,將目錄更改為應用程序所在的文件夾(放置解決方案文件和 Dockerfile 的文件夾)并運行以下命令:
docker build -t awtest .
點擊復制
第一次執行該命令可能需要更長的時間,因為 Docker 需要下載所需的鏡像。上一個命令完成后,運行以下命令:
docker run --mount type=bind,source=C:\Temp,target=/TestOut --rm awtest from Docker
點擊復制
請注意掛載參數,因為如前所述,主機上的文件夾被掛載到容器的文件夾中,以便輕松查看應用程序執行的結果。Linux 中的路徑區分大小寫。
支持 Aspose.Words 的圖像
Aspose.Words 可用于 .NET Framework 和 .NET Core。.NET Core 映像的大小比 .NET Framework 映像小得多,這使得 .NET Core 成為創建微服務和在容器中使用的更好選擇。可以將應用程序部署到 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 可以運行的圖像如下:
-
Debian 9 and 10
-
Ubuntu 18.04 and 19.04
-
Alpine 3.9
由于缺少一些本機依賴項,SkiaSharp 無法在 Windows Nano Server 上運行,。該問題將在 SkiaSharp 1.68.1.1 版本中得到解決。如果您需要在 Windows 容器中運行 Aspose.Words,請將 .NET Framework 基礎映像與 .NET Framework 版本的 Aspose.Words 一起使用,該版本不依賴于 SkiaSharp。
SkiaSharp 是原生 Skia 庫的包裝器。SkiaSharp NuGet 包中提供了以下運行時:
-
osx
-
tizen-armel
-
tizen-x86
-
win10-arm
-
win10-x64
-
win10-x86
-
win-x64
-
win-x86
要在 Linux 中運行它,您應該使用其他 NuGet 包以及相應的本機資源,例如 Skia 庫的本機構建,如下所示:
-
SkiaSharp.NativeAssets.Linux – 為基于 x64 Debian 的 Linux 發行版提供本機 Skia 構建。
-
SkiaSharp.NativeAssets.Linux.NoDependency – 該軟件包旨在用于不具有 libfontconfig 依賴項的 Linux 發行版。在 RHEL 7 (x64) 上測試。
-
Goelze.SkiaSharp.NativeAssets.AlpineLinux – 為 x64 Alpine Linux 3.9 提供原生 Skia 構建。
-
Jellyfin.SkiaSharp.NativeAssets.LinuxArm – 為基于arm32和arm64 Debian的Linux發行版提供本機Skia構建。
更多示例
-
在上面的示例中,應用程序在 SDK 映像中運行。SDK 映像比運行時映像重。下面的示例演示了如何修改 Docker 文件,以便使用 SDK 映像來構建應用程序,以及運行時映像來運行它:
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"]
點擊復制
-
要在 Ubuntu 18.04 中運行該應用程序,Dockerfile 幾乎保持不變(僅更改了標簽):
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"]
點擊復制
-
要在 Alpine Linux 中運行該應用程序,需要添加 SkiaSharp 本機資產并使用以下 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"]
點擊復制
-
要在 RHEL 7 中運行該應用程序,需要添加 SkiaSharp 本機資產并使用以下 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"]
點擊復制
也可以查看
-
-
-
-
選項
-
安裝
-
的其他信息
-
使用其他 NuGet 包: 、 、 、
-
如需下載產品Aspose.Words ,請點擊產品名進入下載頁面