Docker で Aspose.Slides を実行する方法

サポートされているOS

Aspose.Slides は .NET Core プラットフォームを使用して Docker コンテナ内で実行できます。一般に、Aspose.Slides は .NET Core プラットフォームがサポートするすべてのコンテナタイプ(OS)をサポートします。ただし、GDI または libgdiplus がコンテナ上で利用可能で、正しく設定されている必要があります。

Docker を使用するには、まずシステムに Docker をインストールする必要があります。Windows または Mac に Docker をインストールする方法については、以下のリンクをご参照ください。

Linux および Windows Server でも Docker を実行できます。以下のページの手順をご覧ください。

Windows Server Nano での Docker のインストールと構成はサポートされていません。残念ながら Windows Server Nano にはグラフィックサブシステムが搭載されておらず、gdiplus.dll が含まれていません。そのため System.Drawing.Common ライブラリが必要とする機能が使用できず、Aspose.Slides ライブラリと共に使用することはできません。

Linux コンテナを Windows 上で実行することは可能ですが、Linux(VM 上の VirtualBox など)でネイティブに実行することを推奨します。

Install and Configure Docker on Linux (apt-get libgdiplus)

  • OS: Ubuntu 18.04.
  • Dockerfile: Dockerfile-Ubuntu18_04_apt_get_libgdiplus

この Dockerfile には、Ubuntu 公式パッケージリポジトリから libgdiplus パッケージをインストールしたコンテナイメージを構築する手順が含まれています。

Dockerfile の内容は以下の通りです:


 FROM microsoft/dotnet:2.1-sdk-bionic AS build

\# libgdiplus をインストール

RUN apt-get update -y && apt-get install -y apt-utils

RUN apt-get install -y libgdiplus && apt-get install -y libc6-dev

\# マウントポイントを作成

VOLUME /slides-src

\# 起動時に Aspose.Slides をビルドおよびテスト

WORKDIR /slides-src

CMD ./build/netcore.linux.tests.sh

各行が何を意味するかを見てみましょう:

  1. コンテナイメージは microsoft/dotnet:2.1-sdk-bionic イメージをベースにしています(Microsoft がビルドし、Docker の public hub で公開しています)。このイメージには dotnet 2.1 SDK がすでにインストールされています。bionic サフィックスは Ubuntu 18.04(コードネーム bionic)をコンテナの OS として使用することを意味します。サフィックスを変更すれば、基盤 OS(例: stretch → Debian 9、alpine → Alpine Linux)を変更できます。その場合、Dockerfile の内容も変更する必要があります(例: ‘apt-get’ を ‘yum’ に変更)。

 FROM microsoft/dotnet:2.1-sdk-bionic AS build:
  1. 利用可能なパッケージデータベースを更新し、apt-utils パッケージをインストールします。

 RUN apt-get update -y && apt-get install -y apt-utils

  1. System.Drawing.Common ライブラリに必要な ‘libgdiplus’ と ‘libc6-dev’ パッケージをインストールします。

 RUN apt-get install -y libgdiplus && apt-get install -y libc6-dev

  1. /slides-src フォルダをマウントポイントとして宣言します。このフォルダはホストマシン上の slide-net ソースフォルダへのアクセスに使用されます。

 VOLUME /slides-src

  1. slides-src をコンテナ内の作業ディレクトリとして設定します。

 WORKDIR /slides-src

  1. 明示的にコマンドが指定されていない場合にコンテナ起動時に実行されるデフォルトコマンドを宣言します。

 CMD ./build/netcore.linux.tests.sh

Dockerfile の指示どおりに構築されたコンテナイメージには、Ubuntu 18.04 OS、dotnet-sdk、libgdiplus、libc6-dev パッケージがすでにインストールされた状態になります。また、事前定義されたマウントポイントと起動時コマンドが設定されています。

この Dockerfile を使用してイメージをビルドするには、slides-netuil Docker フォルダに移動して次のコマンドを実行します:


 $ docker build -f Dockerfile-Ubuntu18_04_apt_get_libgdiplus -t ubuntu18_04_apt_get_libgdiplus .

-f Dockerfile-Ubuntu18_04_apt_get_libgdiplus – 使用する Dockerfile を指定します。

-t ubuntu18_04_apt_get_libgdiplus – ビルド結果のイメージに付けるタグ(名前)を指定します。

'.' – Docker のコンテキストを指定します。ここでは現在のフォルダがコンテキストとなり、スライドソースをマウントポイントとして提供するため空です(ソースが変更されてもイメージを再ビルドする必要がありません)。

実行結果は次のようになります:


 Successfully built 62dd34ddc142

Successfully tagged ubuntu18_04_apt_get_libgdiplus:latest

新しいイメージがローカルイメージリポジトリに追加されたことを確認するには:


 $ docker images

\----

REPOSITORY                      TAG                 IMAGE ID            CREATED             SIZE

ubuntu18_04_apt_get_libgdiplus   latest              62dd34ddc142        2 minutes ago         1.78GB

イメージが準備できたら、以下のコマンドで実行できます:


 $ docker run -it -v pwd/../../:/slides-src --add-host dev.slides.external.tool.server:192.168.1.48 ubuntu18_04_apt_get_libgdiplus:latest

-it – インタラクティブモードでコマンドを実行し、出力を確認しながら入力を受け取れるようにします。

-v pwd/../../:/slides-src – 事前定義されたマウントポイント用フォルダを指定します。現在の作業ディレクトリは slides-netuildocker であり、コンテナ内の slides-src フォルダがホスト上の slides-net フォルダを指すようになります。pwd は相対パスを示すために使用します。

–add-host dev.slides.external.tool.server:192.168.1.48 – コンテナの hosts ファイルにエントリを追加し、dev.slides.external.tool.server の名前解決を行います。

ubuntu1804aptgetlibgdiplus:latest – 実行するイメージを指定します。

上記コマンドの実行結果は netcore.linux.tests.sh の出力となります(このスクリプトはコンテナのデフォルトコマンドとして定義されています):


 Restoring packages for /slides-src/targets/.NETCore/tests/Aspose.Slides.FuncTests.NetCore/Aspose.Slides.FuncTests.NetCore.csproj...

Restoring packages for /slides-src/targets/.NETStandard/main/Aspose.Slides.DOM.NetStandard/Aspose.Slides.DOM.NetStandard.csproj...

Restoring packages for /slides-src/targets/.NETStandard/main/Aspose.Slides.CompoundFile.NetStandard/Aspose.Slides.CompoundFile.NetStandard.csproj...

Installing System.Text.Encoding.CodePages 4.4.0.

Installing System.Drawing.Common 4.5.0.

...

Results File: /slides-src/build-out/netstandard20/test-results/main/Aspose.Slides.FuncTests.NetCore.trx

Total tests: Unknown. Passed: 2110. Failed: 108. Skipped: 210.

...

Results File: /slides-src/build-out/netstandard20/test-results/main/Aspose.Slides.RegrTests.NetCore.trx

Total tests: 2124. Passed: 1550. Failed: 103. Skipped: 471.

結果から、Func と Regr テストのログファイルが /build-out/netstandard20/test-results/main/ ディレクトリに配置されたことが分かります。また、合計約 200 件のテストが失敗しており、すべてフォントがコンテナに存在しないことに起因する描画問題です。

コンテナ起動時にデフォルトコマンドを上書きしたい場合は、次のコマンドを使用できます:


 $ docker run -it -v pwd/../../:/slides-src --add-host dev.slides.external.tool.server:192.168.1.48 ubuntu18_04_apt_get_libgdiplus:latest /bin/bash

この例では netcore.linux.tests.sh の代わりに /bin/bash が実行され、コンテナ内でアクティブなターミナルセッションが取得でき、そこから ./build/netcore.linux.tests.sh を手動で実行できます。この方法はトラブルシューティングに有用です。

Install and Configure Docker on Linux (make install libgdiplus)

  • OS: Ubuntu 18.04.
  • Dockerfile: Dockerfile-Ubuntu18_04_make_libgdiplus

現在、Ubuntu の公式リポジトリには libgdiplus のバージョン 4.2 しかありませんが、製品の 公式サイト ではバージョン 5.6 が既に提供されています。最新バージョンの libgdiplus をテストするには、ソースからビルドしたイメージを作成する必要があります。

Dockerfile の内容は以下の通りです:


 FROM microsoft/dotnet:2.1-sdk-bionic AS build

\# 最新の安定版 libgdiplus をビルド

RUN apt-get update -y

RUN apt-get install -y libgif-dev autoconf libtool automake build-essential gettext libglib2.0-dev libcairo2-dev libtiff-dev libexif-dev

RUN git clone -b 5.6 https://github.com/mono/libgdiplus

WORKDIR /libgdiplus

RUN ./autogen.sh

RUN make

RUN make install

RUN ln -s /usr/local/lib/libgdiplus.so /usr/lib/libgdiplus.so

\# マウントポイントを作成

VOLUME /slides-src

\# 起動時に Aspose.Slides をビルドおよびテスト

WORKDIR /slides-src

CMD ./build/netcore.linux.tests.sh

唯一の違いは build latest stable libgdiplus セクションです。このセクションでは libgdiplus をビルドするために必要なツールをインストールし、ソースをクローンしてビルド・インストールします。その他は Install and configure Docker on Linux (apt-get libgdiplus) と同じです。

注意: docker build および docker run コマンドで使用するイメージタグ(名前)を別々に設定してください:


 $ docker build \-f Dockerfile-Ubuntu18_04_apt_get_libgdiplus \-t ubuntu18_04_make_libgdiplus .

$ docker run \-it \-v pwd/../../:/slides-src \--add-host dev.slides.external.tool.server:192.168.1.48 ubuntu18_04_make_libgdiplus:latest

Install and Configure Docker on Windows Server Core

  • OS: Ubuntu 18.04.
  • Dockerfile: DockerfileWinServerCore

注意: Windows コンテナを実行するには Windows 10 Pro または Windows Server 2016 が必要です。

残念ながら Microsoft は dotnet SDK がインストールされた Windows Server Core イメージを提供していないため、手動でインストールする必要があります:


 # エスケープ=

FROM microsoft/windowsservercore:1803 AS installer-env

#set powershell default executor
SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"]

\# エスケープ=
FROM microsoft/windowsservercore:1803 AS installer-env

#set powershell default executor
SHELL ["powershell", "-Command", "$ErrorActionPreference = 'Stop'; $ProgressPreference = 'SilentlyContinue';"]

\# Retrieve .NET Core SDK
ENV DOTNET_SDK_VERSION 2.1.301

ENV DOTNET_PATH "c:/Program Files/dotnet"
RUN Invoke-WebRequest -OutFile dotnet.zip https://dotnetcli.blob.core.windows.net/dotnet/Sdk/$Env:DOTNET_SDK_VERSION/dotnet-sdk-$Env:DOTNET_SDK_VERSION-win-x64.zip; 

    $dotnet_sha512 = 'f2f6cc020f89dc4d4f8064cc914cffabde0ce422715138778a6bcbbb6803ca66d6fd967097a0209c47c89b85dd9e93db48486ac86999bd3a533e45b789fcea89'; 

    if ((Get-FileHash dotnet.zip -Algorithm sha512).Hash -ne $dotnet_sha512) { 

        Write-Host 'CHECKSUM VERIFICATION FAILED!'; 

        exit 1; 

    }; 
    

    Expand-Archive dotnet.zip -DestinationPath $Env:DOTNET_PATH;
# デフォルト実行エンジンとして cmd を返す
SHELL ["cmd", "/S", "/C"]

\# In order to set system PATH, ContainerAdministrator must be used
USER ContainerAdministrator
RUN setx /M PATH "%PATH%;c:/Program Files/dotnet"
USER ContainerUser

\# マウントポイントを作成
VOLUME c:/slides-src

# 起動時に Aspose.Slides をビルドおよびテスト
WORKDIR c:/slides-src
CMD .\external\buildtools\nant\nant.exe -buildfile:.\build\netcore.tests.build -D:obfuscate_eaz_use_mock=true -D:slidesnet.run.func.tests=true -D:slidesnet.run.regr.tests=true

結果のイメージは Microsoft が提供する microsoft/windowsservercore:1803 イメージをベースに構築されます。指定されたバージョンの dotnet-sdk がダウンロードされ展開され、システムの PATH 変数が dotnet 実行ファイルのパスを含むように更新されます。最後の行は、コンテナ実行時に nant.exe をデフォルトアクションとして func と regr テストを実行するコマンドを定義しています。

イメージをビルドするコマンド:


 docker build -f Dockerfile_WinServerCore -t winservercore_slides .

イメージを実行するコマンド:


 docker run -it --cpu-count 3 --memory 8589934592 -v e:\Project\Aspose\slides-net:c:\slides-src winservercore_slides:latest

注意: Windows コンテナ用コマンドには 2 つの追加引数があります:

-cpu-count 3

-memory 8589934592

これらはコンテナに割り当てる CPU コア数とメモリ量を設定します。デフォルトでは 1 コア、1 GB の RAM が割り当てられます(Linux コンテナにはデフォルトの制限がありません)。

また、Linux コンテナ用コマンドと比較して 1 つの引数が欠けています:

-add-host dev.slides.external.tool.server:192.168.1.48

Windows 上のコンテナでは external.tool.server が不要なためです。

上記コマンドの実行結果は次のようになります:


 NAnt 0.92 (Build 0.92.4543.0; release; 6/9/2012)

Copyright (C) 2001-2012 Gerry Shaw

http://nant.sourceforge.net

netcore20_runtests:

   [delete] Deleting directory 'c:\slides-src\build-out\netcore20\test-results\'.

   [mkdir] Creating directory 'c:\slides-src\build-out\netcore20\test-results\'.

...

[exec] Results File: C:\slides-src\/build-out/netcore20/test-results//main\Aspose.Slides.FuncTests.NetCore.trx

[exec] Total tests: 2338. Passed: 2115. Failed: 19. Skipped: 204.

...

[exec] Results File: C:\slides-src\/build-out/netcore20/test-results//main\Aspose.Slides.RegrTests.NetCore.trx

[exec] Total tests: 2728. Passed: 2147. Failed: 110. Skipped: 471.