Cách chạy Aspose.Words trong Docker

Microservice kết hợp với container hóa giúp dễ dàng kết hợp các công nghệ. Docker cho phép bạn dễ dàng tích hợp chức năng Aspose.Words vào ứng dụng của mình, bất kể công nghệ nào trong nhóm phát triển của bạn.

Trong trường hợp bạn đang nhắm mục tiêu đến các vi dịch vụ hoặc nếu công nghệ chính trong ngăn xếp của bạn không phải là .NET, C++ hoặc Java nhưng bạn cần chức năng Aspose.Words hoặc nếu bạn đã sử dụng Docker trong ngăn xếp của mình thì bạn có thể quan tâm đến việc sử dụng Aspose.Words trong Docker thùng đựng hàng.

Điều kiện tiên quyết

  • Docker phải được cài đặt trên hệ thống của bạn. Để biết thông tin về cách cài đặt Docker trên Windows hoặc Mac, hãy tham khảo các liên kết trong phần “Xem thêm”.

  • Ngoài ra, hãy lưu ý rằng Visual Studio 2017, .NET Core 2.2 SDK được sử dụng trong ví dụ được cung cấp bên dưới.

Ứng dụng Hello World

Trong ví dụ này, bạn tạo một ứng dụng bảng điều khiển Hello World đơn giản tạo ra dòng chữ “Hello World!” tài liệu và lưu nó ở tất cả các định dạng lưu được hỗ trợ. Sau đó, ứng dụng có thể được xây dựng và chạy trong Docker.

Tạo ứng dụng Console

Để tạo chương trình Hello World, hãy làm theo các bước dưới đây:

  1. Sau khi cài đặt Docker, hãy đảm bảo rằng nó sử dụng Bộ chứa Linux (mặc định). Nếu cần, hãy chọn tùy chọn Chuyển sang vùng chứa Linux từ menu Máy tính để bàn Docker.
  2. Trong Visual Studio, tạo ứng dụng bảng điều khiển .NET Core.
    net-console-application
  3. Cài đặt phiên bản Aspose.Words mới nhất từ NuGet. SkiaSharp sẽ được cài đặt dưới dạng phần phụ thuộc của Aspose.Words.
    skiasharp-dependency
  4. Vì ứng dụng sẽ chạy trên Linux nên nội dung Linux gốc thích hợp phải được cài đặt. Bắt đầu với hình ảnh cơ sở Debian và cài đặt SkiaSharp.NativeAssets.Linux.
  5. Khi tất cả các phần phụ thuộc cần thiết đã được thêm vào, hãy viết một chương trình đơn giản tạo ra câu “Xin chào thế giới!” tài liệu và lưu nó ở tất cả các định dạng lưu được hỗ trợ:

Lưu ý rằng thư mục “TestOut” được chỉ định làm thư mục đầu ra để lưu tài liệu đầu ra. Khi chạy ứng dụng trong Docker, một thư mục trên máy chủ sẽ được gắn vào thư mục này trong vùng chứa. Điều này sẽ cho phép bạn dễ dàng xem đầu ra do Aspose.Words tạo ra trong vùng chứa Docker.

Định cấu hình Dockerfile

Bước tiếp theo là tạo và định cấu hình Dockerfile.

  1. Tạo Dockerfile và đặt nó bên cạnh tệp giải pháp của ứng dụng của bạn. Giữ tên tệp này không có phần mở rộng (mặc định).
  2. Trong Dockerfile, chỉ định:
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"]

Trên đây là một Dockerfile đơn giản, chứa các hướng dẫn sau:

  • Hình ảnh SDK sẽ được sử dụng. Đây là hình ảnh .NET Core SDK 2.2. Docker sẽ tải nó xuống khi bản dựng được chạy. Phiên bản của SDK được chỉ định làm thẻ.
  • Thư mục làm việc được chỉ định ở dòng tiếp theo.
  • Lệnh cài đặt libfontconfig1 được chạy trong container. Điều này được SkiaSharp yêu cầu.
  • Lệnh sao chép mọi thứ vào vùng chứa, xuất bản ứng dụng và chỉ định điểm vào.

Xây dựng và chạy ứng dụng trong Docker

Bây giờ ứng dụng có thể được xây dựng và chạy trong Docker. Mở dấu nhắc lệnh yêu thích của bạn, thay đổi thư mục thành thư mục chứa ứng dụng (thư mục chứa tệp giải pháp và Dockerfile) và chạy lệnh sau:

docker build -t awtest .

Lần đầu tiên lệnh này được thực thi có thể mất nhiều thời gian hơn vì Docker cần tải xuống các hình ảnh được yêu cầu. Khi lệnh trước hoàn thành, hãy chạy lệnh sau:

docker run --mount type=bind,source=C:\Temp,target=/TestOut --rm awtest from Docker

Hình ảnh hỗ trợ Aspose.Words

Aspose.Words có sẵn cho cả .NET Framework và .NET Core. Hình ảnh .NET Core có kích thước nhỏ hơn nhiều so với hình ảnh .NET Framework, điều này làm cho .NET Core trở thành lựa chọn tốt hơn để tạo các vi dịch vụ và sử dụng trong các vùng chứa. Có thể triển khai ứng dụng vào vùng chứa Linux Docker (để triển khai đa nền tảng), nhẹ hơn vùng chứa Windows.

Hình ảnh chính thức của .NET Core SDK được cung cấp cho:

  • Debian 9 và 10
  • Ubuntu 18.04 và 19.04
  • Alpine 3.7 và 3.9
  • Windows Nano Server

Để làm việc với đồ họa, Aspose.Words dành cho .NET Standard phụ thuộc vào SkiaSharp. Điều này giới hạn các hình ảnh Aspose.Words có thể chạy trên các thiết bị sau:

  • Debian 9 và 10
  • Ubuntu 18.04 và 19.04
  • Alpine 3.9

SkiaSharp không hoạt động trên Windows Nano Server do thiếu một số phụ thuộc gốc, đây là sự cố đã biết ở SkiaSharp. Sự cố sẽ được giải quyết trong phiên bản 1.68.1.1 của SkiaSharp. Nếu bạn cần chạy Aspose.Words trong vùng chứa Windows, hãy sử dụng hình ảnh cơ sở .NET Framework với phiên bản .NET Framework của Aspose.Words, không phụ thuộc vào SkiaSharp.

SkiaSharp là một trình bao bọc xung quanh thư viện Skia gốc. Các thời gian chạy sau được cung cấp trong gói SkiaSharp NuGet:

  • osx
  • tizen-armel
  • tizen-x86
  • win10-arm
  • win10-x64
  • win10-x86
  • win-x64
  • win-x86

Để chạy nó trong Linux, bạn nên sử dụng các gói NuGet bổ sung có nội dung gốc tương ứng, chẳng hạn như các bản dựng gốc của thư viện Skia, được liệt kê bên dưới:

  • SkiaSharp.NativeAssets.Linux – cung cấp bản dựng Skia gốc cho các bản phân phối Linux dựa trên x64 Debian.
  • SkiaSharp.NativeAssets.Linux.NoDependencies – gói được thiết kế để sử dụng trong các bản phân phối Linux không có sự phụ thuộc libfontconfig. Đã thử nghiệm trên RHEL 7 (x64).
  • Goelze.SkiaSharp.NativeAssets.AlpineLinux – cung cấp bản dựng Skia gốc cho x64 Alpine Linux 3.9.
  • Jellyfin.SkiaSharp.NativeAssets.LinuxArm – cung cấp bản dựng Skia gốc cho các bản phân phối Linux dựa trên arm32 và arm64 Debian.

Thêm ví dụ

  1. Trong ví dụ trên, ứng dụng được chạy ở dạng hình ảnh SDK. Hình ảnh SDK nặng hơn hình ảnh thời gian chạy. Ví dụ bên dưới minh họa cách sửa đổi tệp Docker để sử dụng hình ảnh SDK nhằm xây dựng ứng dụng và hình ảnh thời gian chạy để chạ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"]
  2. Để chạy ứng dụng trong Ubuntu 18.04, Dockerfile thực tế vẫn giữ nguyên (chỉ có thẻ được thay đổi):
    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"]
  3. Để chạy ứng dụng trong Alpine Linux, cần phải thêm nội dung gốc SkiaSharp và sử dụng Dockerfile sau:
    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"]
  4. Để chạy ứng dụng trong RHEL 7, cần phải thêm nội dung gốc SkiaSharp và sử dụng Dockerfile sau:
    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"]

Xem thêm