如何在 Docker 中運行 Aspose.Words
微服務、容器化能讓技術結合。Docker 可以讓你將 Aspose.Words 的功能輕鬆整合到你的應用程式中,無論在開發堆疊中的技術是什麼。
如果你是針對微服務,或是堆疊中的主要技術不是 .NET、C++ 或 Java,但你需要 Aspose.Words 功能,或是你已經在堆疊中使用 Docker,那麼你可能對在 Docker 容器中利用 Aspose.Words 有興趣。
先決條件
-
Docker 必須在你的系統上安裝。 在如何將 Docker 安裝到 Windows 或 Mac的資訊請參閱另見部分中的連結。
-
此外,請注意示例中使用的 Visual Studio 2017,.NET Core 2.2 SDK。
Hello World 應用程式
在這個例子中,你會創造一個簡單的Hello World主控台應用程式,它會建立一份Hello World!文件並儲存於所有支援的儲存格式中。 應用程式可於 Docker 中建造並運行。
建立コンソールアプリケーション
要創建『Hello World』的程式,請按照下列步驟:
- 一旦 Docker 安裝,請確保它使用 Linux 容器(預設)。 若有需要,請從『 Docker』桌面菜單中選擇『切換至 Linux 容器』選項。
- 在Visual Studio中,建立 a 。 网易 核心控制台應用程式 。
- 從 NuGet 安裝最新 Aspose.Words 版本。 SkiaSharp 將會被建立為 Aspose.Words 的依賴項。
- 由於該應用程式將在 Linux 上執行,必須安裝適當的原生 Linux 資產。 從 Debian 基底圖像開始,然後安裝
SkiaSharp.NativeAssets.Linux
。 - 當所有所需的依賴項被加進去後,寫一篇簡單的程式來建立一個你好世界!的文件並將其儲存於所有支援的儲存格式中:
注意TestOut資料夹被指定為儲存輸出文件的輸出 폴더。 當在 Docker 運行應用程式時,主機機器上某個資料夾會連到容器中的這個資料夹。 這將讓您輕鬆地查看由 Aspose.Words 在 Docker 容器中生成的輸出。
配置 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", "Aspose.Words.Docker.Sample/out/Aspose.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
支援 Aspose.Words 的圖像
Aspose.Words 適用於 .NET Framework 和 .NET Core。 .NET Core 圖像比 .NET Framework 圖像小得多,這使得 .NET Core 是建立微服務和用於容器時更好的選擇。 有可能在 Linux Docker 容器中部署應用程式(為跨平台部署),這些容器比 Windows 容器要輕。
.NET Core SDK 的官方圖像提供給:
“- Debian 9 和 10” “- Ubuntu 18.04 和 19.04” – Alpine 3.7 和 3.9 “- Windows 納諾 Server”
要使用圖形,Aspose.Words for .NET Standard 依賴於 SkiaSharp。 這限制了 Aspose.Words 能跑的圖像到以下:
- Debian 9 和 10 “- Ubuntu 18.04 和 19.04”
- Alpine 3.9
SkiaSharp 在 Windows Nano Server 上不工作,因為一些本機依賴項缺失. which is a known issue in SkiaSharp 這個問題將在 SkiaSharp 的 1.68.1.1 版本中解決。 如果您需要在 Aspose.Words 容器中運行 Windows,請使用 .NET Framework 基底圖像和 Aspose.Words 的 .NET Framework 版本,該版本不依賴於 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 的原生Skia編譯,基於 Linux 分發。
- SkiaSharp.NativeAssets.Linux.NoDependencies – 此套件旨在用於未具備libfontconfig依賴性的Linux發行版。 於 RHEL 7 (x64) 測試。
- Goelze.SkiaSharp.NativeAssets.AlpineLinux 提供對 x64 的本機 Skia 建置,Alpine Linux 3.9。 “- Jellyfin.SkiaSharp.NativeAssets.LinuxArm 提供 arm32 和 arm64 的本機 Skia 建置 Debian 基於 Linux 分發。”
更多例子
- 在上述範例中,應用程式是在一個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"]
見也
- Install Docker Desktop on Windows
- Install Docker Desktop on Mac
- Visual Studio 2017, .NET Core 2.2 SDK
- Switch to Linux containers 選項
- 安裝 SkiaSharp.NativeAssets.Linux “- 其他有關 .NET Core SDK 的資訊” “-使用額外的 NuGet 包:SkiaSharp.NativeAssets.Linux、SkiaSharp.NativeAssets.Linux.NoDependencies、Goelze.SkiaSharp.NativeAssets.AlpineLinux、Jellyfin.SkiaSharp.NativeAssets.LinuxArm”
- RHEL 7 (x64)