Como executar Aspose.Words em Docker
Os microsserviços, em conjunto com a conteinerização, permitem combinar facilmente tecnologias. Docker permite integrar facilmente a funcionalidade Aspose.Words em seu aplicativo, independentemente de qual tecnologia esteja em sua pilha de desenvolvimento.
Caso você esteja visando microsserviços, ou se a tecnologia principal em sua pilha não for .NET, C++ ou Java, mas você precisar da funcionalidade Aspose.Words, ou se já usar Docker em sua pilha, então você pode estar interessado em utilizar Aspose.Words em um Docker recipiente.
Pré-requisitos
-
Docker deve estar instalado em seu sistema. Para obter informações sobre como instalar Docker em Windows ou Mac, consulte os links na seção “Consulte também”.
-
Além disso, observe que Visual Studio 2017, .NET Core 2.2 SDK é usado no exemplo fornecido abaixo.
Aplicativo Olá Mundo
Neste exemplo, você cria um aplicativo de console simples Hello World que faz uma mensagem “Hello World!” documento e salva-o em todos os formatos de salvamento suportados. O aplicativo pode então ser criado e executado em Docker.
Criando o aplicativo de console
Para criar o programa Hello World, siga as etapas abaixo:
- Depois que o Docker estiver instalado, certifique-se de que ele use contêineres Linux (padrão). Se necessário, selecione a opção Alternar para contêineres Linux no menu Docker Desktops.
- No Visual Studio, crie um aplicativo de console .NET Core.
- Instale a versão Aspose.Words mais recente do NuGet. SkiaSharp será instalado como uma dependência do Aspose.Words.
- Como o aplicativo será executado em Linux, os ativos Linux nativos apropriados deverão ser instalados. Comece com a imagem base Debian e instale o
SkiaSharp.NativeAssets
.Linux. - Quando todas as dependências necessárias forem adicionadas, escreva um programa simples que crie um “Hello World!” documento e salva-o em todos os formatos de salvamento suportados:
Observe que a pasta “TestOut” é especificada como uma pasta de saída para salvar documentos de saída. Ao executar o aplicativo em Docker, uma pasta na máquina host será montada nesta pasta no contêiner. Isso permitirá que você visualize facilmente a saída gerada pelo Aspose.Words no contêiner Docker.
Configurando um Dockerfile
A próxima etapa é criar e configurar o Dockerfile.
- Crie o Dockerfile e coloque-o próximo ao arquivo de solução da sua aplicação. Mantenha este nome de arquivo sem extensão (o padrão).
- No Dockerfile, especifique:
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"]
O texto acima é um Dockerfile simples, que contém as seguintes instruções:
- A imagem SDK a ser utilizada. Aqui está a imagem .NET Core SDK 2.2. O Docker fará o download dele quando a compilação for executada. A versão do SDK é especificada como uma tag.
- O diretório de trabalho, especificado na próxima linha.
- O comando para instalar libfontconfig1 é executado no contêiner. Isso é exigido pelo SkiaSharp.
- O comando para copiar tudo para o contêiner, publicar o aplicativo e especificar o ponto de entrada.
Construindo e executando o aplicativo em Docker
Agora o aplicativo pode ser criado e executado em Docker. Abra seu prompt de comando favorito, mude o diretório para a pasta com o aplicativo (pasta onde estão colocados o arquivo da solução e o Dockerfile) e execute o seguinte comando:
docker build -t awtest .
A primeira vez que este comando for executado pode demorar mais, pois o Docker precisa baixar as imagens necessárias. Assim que o comando anterior for concluído, execute o seguinte comando:
docker run --mount type=bind,source=C:\Temp,target=/TestOut --rm awtest from Docker
Imagens com suporte para Aspose.Words
Aspose.Words está disponível para .NET Framework e .NET Core. As imagens .NET Core são muito menores que as imagens .NET Framework, o que torna o .NET Core a melhor escolha para criação de microsserviços e para uso em contêineres. É possível implantar aplicativos em contêineres Linux Docker (para implantação em várias plataformas), que são mais leves que os contêineres Windows.
As imagens oficiais do .NET Core SDK são fornecidas para:
- Debian 9 e 10
- Ubuntu 18.04 e 19.04 -Alpine 3.7 e 3.9 -Windows NanoServer
Para trabalhar com gráficos, Aspose.Words for .NET Standard depende do SkiaSharp. Isso limita as imagens nas quais o Aspose.Words pode ser executado ao seguinte:
- Debian 9 e 10
- Ubuntu 18.04 e 19.04
- Alpine 3.9
SkiaSharp não funciona em Windows Nano Server devido à falta de algumas dependências nativas, que é um problema conhecido no SkiaSharp. O problema será resolvido na versão 1.68.1.1 do SkiaSharp. Se você precisar executar o Aspose.Words em um contêiner Windows, use a imagem base .NET Framework com a versão .NET Framework do Aspose.Words, que não depende do SkiaSharp.
SkiaSharp é um wrapper da biblioteca nativa Skia. Os seguintes tempos de execução são fornecidos no pacote SkiaSharp NuGet:
- osx
- tizen-armel -tizen-x86
- win10-arm -win10-x64 -win10-x86
- win-x64
- win-x86
Para executá-lo em Linux, você deve usar pacotes NuGet adicionais com os ativos nativos correspondentes, como compilações nativas da biblioteca Skia, listadas abaixo:
- SkiaSharp.NativeAssets.Linux – fornece uma construção nativa do Skia para distribuições Linux baseadas em x64 Debian.
- SkiaSharp.NativeAssets.Linux.NoDependencies – o pacote se destina a ser usado em distribuições Linux que não possuem a dependência libfontconfig. Testado em RHEL 7 (x64).
- Goelze.SkiaSharp.NativeAssets.AlpineLinux – fornece uma versão nativa do Skia para x64 Alpine Linux 3.9.
- Jellyfin.SkiaSharp.NativeAssets.LinuxArm – fornece uma versão nativa do Skia para distribuições Linux baseadas em arm32 e arm64 Debian.
Mais exemplos
- No exemplo acima, a aplicação foi executada em uma imagem SDK. As imagens SDK são mais pesadas que as imagens de tempo de execução. O exemplo abaixo demonstra como o arquivo Docker deve ser modificado para utilizar a imagem SDK para construir a aplicação e a imagem de tempo de execução para executá-la:
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"]
- Para rodar a aplicação em Ubuntu 18.04, o Dockerfile permanece praticamente o mesmo (apenas a tag é alterada):
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"]
- Para executar a aplicação em Alpine Linux, é necessário adicionar os assets nativos do SkiaSharp e utilizar o seguinte 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"]
- Para executar a aplicação em RHEL 7, é necessário adicionar os assets nativos do SkiaSharp e utilizar o seguinte 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"]
Veja também
- Instale Docker Desktop em Windows
- Instale Docker Desktop no Mac
- Visual Studio 2017, .NET Core 2.2 SDK
- opção Mudar para contêineres Linux
- Instalar SkiaSharp.NativeAssets.Linux
- Informações adicionais sobre .NET Core SDK
- Use pacotes NuGet adicionais: SkiaSharp.NativeAssets.Linux, SkiaSharp.NativeAssets.Linux.NoDependencies, Goelze.SkiaSharp.NativeAssets.AlpineLinux, Jellyfin.SkiaSharp.NativeAssets.LinuxArm
- RHEL7 (x64)