Как запустить Aspose.Cells в Docker

Микросервисы, в сочетании с контейнеризацией, позволяют легко объединять технологии. Docker позволяет легко интегрировать функциональность Aspose.Cells в ваше приложение, независимо от используемой технологии в вашем стеке разработки.

Если вы планируете использовать микросервисы или основную технологию в вашем стеке не .NET, C++ или Java, но вам нужна функциональность Aspose.Cells, или если вы уже используете Docker в своем стеке, вас может заинтересовать использование Aspose.Cells в контейнере Docker.

Предварительные требования

  • Docker должен быть установлен на вашей системе. Для получения информации о том, как установить Docker в Windows или Mac, обратитесь к ссылкам в разделе ‘См. также’.

  • Также обратите внимание, что в данном примере используется Visual Studio 2019, .NET Core 3.1 SDK.

Приложение Hello World

В этом примере вы создаете простое консольное приложение Hello World, которое создает документ ‘Hello World!’ и сохраняет его во всех поддерживаемых форматах. Затем приложение может быть построено и запущено в Docker.

Создание консольного приложения

Для создания программы Hello World выполните указанные ниже шаги:

  1. После установки Docker убедитесь, что он использует контейнеры Linux (по умолчанию). При необходимости выберите опцию Переключиться на контейнеры Linux из меню Docker Desktop.
  2. In Visual Studio, create a .NET Core console application.
    todo:image_alt_text
  3. Install the latest Aspose.Cells version from NuGet. System.Drawing.Common and System.Text.Encoding.CodePages will be installed as a dependency of Aspose.Cells.
    todo:image_alt_text
  4. Поскольку приложение будет запускаться в Linux, необходимо установить соответствующие средства разработки для Linux. Начните с образа базового образа dotnet core sdk 3.1 и установите libgdiplus libc6-dev.
  5. When all required dependencies are added, write a simple program that creates a “Hello World!” workbook and saves it in all supported save formats:
    .NET
    using System;
    namespace Aspose.Cells.Docker
    {
        class Program
        {
            static void Main(string[] args)
            {
                Workbook workbook = new Workbook();
                workbook.Worksheets[0].Cells[0, 0].PutValue("Hello from Aspose.Cells!!!");
                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.
                            var fileName = string.Format("out{0}", FileFormatUtil.SaveFormatToExtension(sf));
                            workbook.Save(fileName, sf);
                            Console.WriteLine("Saving {0}\t\t[OK]", sf);
                        }
                        catch
                        {
                            Console.WriteLine("Saving {0}\t\t[FAILED]", sf);
                        }
                    }
                }
            }
        }
    }
    

Обратите внимание, что папка “TestOut” указывается как папка для сохранения выходных документов. При запуске приложения в Docker папка на хост-машина будет примонтирована к этой папке в контейнере. Это позволит легко просматривать выходные данные, сгенерированные Aspose.Cells в контейнере Docker.

Настройка Dockerfile

Следующим шагом является создание и настройка Dockerfile.

  1. Создайте Dockerfile и разместите его рядом с файлом решения вашего приложения. Сохраните это имя файла без расширения (по умолчанию).
  2. В Dockerfile укажите:
FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster 
COPY fonts/* /usr/share/fonts/
WORKDIR /app
COPY . ./
RUN apt-get update && \
    apt-get install -y --allow-unauthenticated libgdiplus libc6-dev
RUN dotnet publish "Aspose.Cells.Docker.csproj" -c Release -o /app/publish
ENTRYPOINT ["dotnet", "publish/Aspose.Cells.Docker.dll"]

Приведенный выше Dockerfile содержит следующие инструкции:

  • Используемый образ SDK. В данном случае это образ .Net Core SDK 3.1. Docker загрузит его при запуске сборки. Версия SDK указана в виде тега.
  • Установка шрифтов, потому что образ SDK содержит очень мало шрифтов. Команда копирует файлы шрифтов из локальной директории в образ Docker. Убедитесь, что у вас есть локальная директория “fonts”, содержащая все необходимые шрифты для установки. В этом примере локальная директория “fonts” помещена в ту же директорию, что и Dockerfile.
  • Рабочий каталог, указанный в следующей строке.
  • Команда для копирования всего в контейнер, публикации приложения и указания точки входа.
  • Команда для запуска установки libgdiplus в контейнере. Это требуется для System.Drawing.Common.

Сборка и запуск приложения в Docker

Теперь приложение можно собрать и запустить в Docker. Откройте вашу любимую командную строку, перейдите в каталог с приложением (в каталог, где размещены файл решения и Dockerfile) и выполните следующую команду:

docker build -t actest .

При первом выполнении этой команды может потребоваться больше времени, так как Docker должен загрузить необходимые образы. После завершения предыдущей команды выполните следующую:

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

Изображения, поддерживаемые Aspose.Cells

  • Aspose.Cells for .NET Standard не поддерживает EMF и TIFF в Linux.

Дополнительные примеры

1. Запустите приложение в Windows Server 2019

  • Dockerfile
FROM microsoft/dotnet-framework:4.7.2-sdk-windowsservercore-ltsc2019
WORKDIR /app
COPY . ./
RUN dotnet publish "Aspose.Cells.Docker.csproj" -c Release -o /app/publish
ENTRYPOINT ["dotnet", "publish/Aspose.Cells.Docker.dll"]
  • Собрать образ Docker
docker build -t actest .
  • Запустить образ Docker
docker run --mount type=bind,source=C:\Temp,target=c:\TestOut --rm actest from Docker

2. Запустить приложение в Linux

  • Написать простую программу, которая устанавливает папку шрифтов, создает книгу “Hello World!” и сохраняет ее.
namespace Aspose.Cells.Docker.Fonts
{
    using System;
    using System.IO;

    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                // Set font folders on linux.
                string[] fonts = { "/Fonts" };
                FontConfigs.SetFontFolders(fonts, true);
                // build workbook
                Workbook workbook = new Workbook();
                MemoryStream memoryStream = new MemoryStream();
                workbook.Worksheets[0].Cells[0, 0].PutValue("Hello from Aspose.Cells!!!");
                Style style = workbook.CreateStyle();
                style.Font.Name = "Arial";
                style.Font.Size = 16;
                workbook.Worksheets[0].Cells[0, 0].SetStyle(style);
                workbook.Save("/TestOut/TestFontsOut.xlsx");
            }
            catch (Exception e)
            {
                Console.WriteLine("Saving outfonts.xlsx\t\t[FAILED],{0}", e.Message);
            }

        }
    }
}
  • Dockerfile
FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster 
WORKDIR /app
COPY . ./
RUN apt-get update && \
    apt-get install -y --allow-unauthenticated libgdiplus libc6-dev
WORKDIR /app
COPY . ./
RUN dotnet publish "Aspose.Cells.Docker.Fonts.csproj" -c Release -o /app/publish
ENTRYPOINT ["dotnet", "publish/Aspose.Cells.Docker.Fonts.dll"]
  • Собрать образ Docker
docker build -t actest .
  • Запустить образ Docker
docker run --mount type=bind,source=C:\Windows\Fonts,target=/Fonts  --mount type=bind,source=C:\Temp,target=/TestOut --rm actest from Docker

Рекомендуемое решение

Для платформ .NET6 (или позднее) основное отличие по сравнению с предыдущими платформами (.netcore31 или ранее) заключается в графической библиотеке. В этом официальном документе Microsoft объясняется, что для .NET6 или более поздних релизов графическая библиотека “System.Drawing.Common” будет поддерживаться только в Windows и даются рекомендации по замене графической библиотеки.

Таким образом, Aspose.Cells использует графическую библиотеку SkiaSharp на платформах без Windows. Мы рекомендуем использовать SkiaSharp как библиотеку на macOS, что также исключает необходимость установки libgdiplus.

Для получения информации о том, как установить Aspose.Cells на платформах без Windows и использовать SkiaSharp как графическую библиотеку, обратитесь к следующей статье: Как запустить Aspose.Cells для .Net6

См. также

  • Установите Docker Desktop на Windows
  • Установите Docker Desktop на Mac
  • Visual Studio 2019, .NET Core 3.1 SDK
  • Переключитесь на контейнеры Linux параметр
  • Дополнительная информация о .NET Core SDK