.NET Core - Console Application com Docker

Veja neste artigo como construir uma aplicação Console Application long running com .NET Core e Docker.

Esta aplicação pode rodar periodicamente de acordo com a necessidade da sua aplicação.

Por que utilizar Console App & Docker

Ao utilizar containers Dockers há ganhos significativos no gerenciamento e publicação. Independência do ambiente e de tecnologias específicas de Cloud, como o Azure Functions e WebJobs do App Services.

SHOW ME THE CODE

Crie em novo projeto no Visual Studio do tipo Console App. (File > New > Project > .NET Core > Console App (.Net Core)).

Adicione a referência do Nuget FluentScheduler.

Substitua o código do Program.cs:

Este código cria dois Jobs que irão rodar periodicamente. Um será a cada 5 minutos e o outro todo dia as 2 da manhã.

Para este Job que roda as 2 da manhã é necessário configurar o Datetime do Docker. Mais abaixo será abordado esse detalhe.

Dockerfile

O Visual Studio cria um arquivo Dockerfile de forma muito competente. Então click com o botão direito em cima do projeto e vá em Add > Container Orchestrator Support. (Versões anteriores podem ter apenas a opção Add Docker Support.

Em seguida selecione: Linux.

O Visual Studio cria um arquivo Dockerfile pronto para buildar e rodar a aplicação num container. É necessário adicionar o timezone do Brasil e assim o Agendamento feito com o FluentSchesduler rodar corretamente. Observe o Dockerfile abaixo.

Os comandos abaixo alteram para o timezone Brasileiro

# Configure timezone
RUN unlink /etc/localtime
RUN ln -s /usr/share/zoneinfo/Brazil/East /etc/localtime

Testando

Abra um console de dentro da pasta do projeto e use os comandos

docker-compose build
docker run <image>

O primeiro comando gera uma saida assim:

Successfully built ef14ca42abf2
Successfully tagged dockerconsole:latest

Este é o nome da imagem para ser substituido no comando acima.

Para saber se o sistema está rodando, pode utilizar o comando

docker ps

Download

O código do projeto está disponível no meu GitHub

Feedback!

Me diga o que achou? Deixe teu comentário, suas impressões e vamos convesar!