Docker no Back e no Front - um exemplo com .NET Core e Angular - Campus Party Brasil 2019

Renato Groffe
6 min readFeb 24, 2019

--

No dia 13/02/2019 estive com meu amigo Thiago Adriano (Microsoft MVP) participando como palestrante da Campus Party Brasil 2019 (CPBR12). Realizamos nesta ocasião um workshop sobre o uso de containers Docker em projetos que façam uso de APIs criadas com .NET/ASP.NET Core e que tenham seu front-end desenvolvido em Angular 7.

Esta 12a edição da Campus Party aconteceu no Expo Center Norte em São Paulo — SP entre os dias 12/02 e 17/02 (terça a domingo), contando com diversas palestras simultâneas e participantes do Brasil inteiro.

Gostaria de deixar neste post meu muito obrigado à Eimi Romim (Campus Party) por todo o suporte para que eu pudesse participar como palestrante desta edição da Campus Party.

Gostaria de deixar neste post meu muito obrigado ao Rodrigo Wanderley de Melo Cardoso (iMasters) pelo convite e à Karla Tomaz (Campus Party) por todo o suporte para que eu pudesse participar como palestrante.

Deixo aqui também meus agradecimentos à Marcela Sisiliani pelas fotos tiradas durante a palestra.

Os slides da apresentação já estão no SlideShare:

Procedimentos necessários para a execução da solução via containers Docker

O projeto da API REST aqui apresentado permitirá o gerenciamento de um catálogo de produtos e foi criado com o ASP.NET Core 2.2, estando disponível no GitHub a partir do endereço a seguir:

https://github.com/renatogroffe/ASPNETCore2.2_EFCore-InMemory

Quanto ao arquivo Dockerfile que permitirá a geração da imagem para execução da API via container Docker, foram utilizadas como base as imagens Alpine microsoft/dotnet:2.2-sdk-alpine e microsoft/dotnet:2.2-aspnetcore-runtime-alpine:

Já abordei a montagem de imagens Docker com aplicações ASP.NET Core 2.2 no seguinte artigo:

ASP.NET Core 2.2 + Docker: visão geral e exemplos

O arquivo docker-compose.yml será criado com o objetivo de permitir a subida através de um único comando dos containers referentes à API REST (apiprodutos, executando na porta 20001) e à aplicação front-end (siteprodutos, rodando na porta 20000):

  • Este arquivo de configurações (docker-compose.yml) foi criado na pasta em que se encontram os diretórios correspondentes às 2 aplicações;
  • O build da imagem correspondente à API REST foi especificado para acontecer durante a execução do Docker Compose (caso a mesma ainda não exista);
  • Todos os containers pertencem a uma mesma network chamada produtos-network.

Maiores detalhes sobre o uso do Docker Compose no deployment de soluções podem ser encontrados no artigo a seguir:

ASP.NET Core + Docker Compose: implementando soluções Web multi-containers

O projeto Angular utilizado por esse exemplo está no seguinte repositório do GitHub:

https://github.com/programadriano/campus/

No arquivo environment.prod.ts deste projeto foi referenciada a API REST a ser executada na porta 20001 (conforme definição em docker-compose.yml):

Para a geração da imagem contendo o front-end em Angular será utilizada a imagem Alpine do NGINX, com o arquivo nginx.conf definido para a aplicação sendo copiado para dentro da mesma juntamente com o conteúdo da publicação (diretório dist):

A seguir temos o conteúdo do arquivo nginx.conf, com todas as configurações esperadas para a execução de uma aplicação Angular via container Docker:

Caso deseje saber mais sobre o uso do NGINX com aplicações Web, consulte o seguintes artigos:

ASP.NET Core 2.2: implementando Load Balancing com Nginx, Docker e Docker Compose

Publicando um web site estático na nuvem com Docker, Nginx e Azure Container Instances

E também assista à gravação de um evento recente do Canal .NET a respeito desta tecnologia:

O ng build --prod irá gerar uma publicação da aplicação Angular com as configurações de Produção:

Já a instrução docker build -t siteprodutos-campus . procederá com o build da imagem:

O comando docker images siteprodutos-campus exibirá então a imagem gerada no passo anterior:

Com isto finalmente chegamos ao momento de acionar a execução do Docker Compose para a criação dos containers e outros recursos indicados em docker-compose.yml. Isto acontecerá por meio da instrução docker-compose up -d:

O comando docker network ls mostrará que a rede produtos-network foi criada com sucesso:

A instrução docker images apiprodutos-campus indicará, por sua vez, que a imagem correspondente à API também foi gerada normalmente:

Já o comando docker-compose ps exibirá os containers criados na porta 20000 (front-end em Angular) e 20001 (API REST gerada com o ASP.NET Core 2.2):

Ao acessar o endereço http://localhost:20000 via browser aparecerá o front-end deste projeto, sendo possível inclusive proceder com a inclusão de produtos:

Uma consulta ao endereço http://localhost:20001/api/produtos por meio do utilitário Postman trará os produtos cadastrados a partir do front-end:

E para concluir este post deixo um link com diversos materiais gratuitos (artigos, vídeos, projetos de exemplo) que venho produzindo sobre Docker:

Docker para Desenvolvedores .NET - Guia de Referência

--

--

Renato Groffe
Renato Groffe

Written by Renato Groffe

Microsoft Most Valuable Professional (MVP), Multi-Plataform Technical Audience Contributor (MTAC), Software Engineer, Technical Writer and Speaker

No responses yet