Utilizando microservices devprime no docker local

1 de novembro de 2021 Por Ramon Durães

As ferramentas de containers como o Docker proporcionam uma experiência incrível para a pessoa desenvolvedoras de software e trazem muitos facilitadores no desenvolvimento e testes de Microservices no ambiente local.

O DevPrime é uma plataforma que acelera o desenvolvimento de microsserviços cloud-native que podem ser utilizados localmente ou nos principais provedores de Cloud como o Azure da Microsoft, AWS da Amazon, Google Cloud e Oracle Cloud.

Nesse cenário nós utilizaremos um Docker local previamente instalado e já iniciaremos um novo Microservices desenvolvido utilizando o DevPrime. Se ainda não conhece o DevPrime aproveite e teste agora mesmo e inicie rapidamente no mundo dos microsserviços.

O desafio é após contenizar o nosso microsserviço fazer ele se conectar com outros containers locais e para isso do Docker oferece uma abordagem de networking. Siga os passos abaixo.

1) Crie um novo microservices utilizando o devprime
Siga a documentação em “Creating the first microservice

2) Crie uma imagem local do seu seu microsserviço

docker build . -t ms:latest
docker tag ms:latest ramonduraes/ms:latest

3) Exporte as configurações para uso no Docker
dp export config docker

4) Crie uma nova rede no docker
docker network create devprime

5) Execute o container do mongodb e observe os parâmetros (Network/Name)
docker run -d --network devprime --name rabbitmq -p 5672:5672 -p 15672:15672 -t rabbitmq:3-management

6) Execute o container do rabbitmq


docker run -d --network devprime --name mongo -p 27018:27018 -p 27019:27019 -p 27017:27017 -e MONGO_INITDB_ROOT_USERNAME=mongoadmin -e MONGO_INITDB_ROOT_PASSWORD=LltF8Nx*yo mongo

7) Execute o seu microservices passando os parâmetros e alias dos serviços

docker run --network devprime --name ms
-e devprime_app="License=<put your license>|||Debug=false|||DebugWeb=false|||DebugState=false|||DebugStream=false"
-e devprime_observability="enable=true|||saveinfile=false|||hidedetails=false|||showhttperrors=400"
-e devprime_web="url=http://*:8080|||enable=true|||enableswagger=true|||postsuccess=201|||postfailure=500|||getsuccess=200|||getfailure=500|||patchsuccess=200|||patchfailure=500|||putsuccess=200|||putfailure=500|||deletesuccess=200|||deletefailure=500"
-e devprime_security=""
-e devprime_services="retry=3|||circuitbreak=45|||timeout=10|||connections=[granttype=client_credentials,name=Services1,]"
-e devprime_state1="alias=State1|||dbtype=mongodb|||connection=mongodb://mongoadmin:LltF8Nx*yo@mongo:27017|||timeout=5|||retry=2|||dbname=ms|||isssl=true|||numberofattempts=4|||durationofbreak=45"
-e devprime_stream1="alias=Stream1|||enable=true|||default=true|||streamtype=RabbitMQ|||hostname=rabbitmq|||user=guest|||password=guest|||port=5672|||exchange=devprime|||exchangetype=direct|||retry=3|||fallback=State1"
-e devprime_custom="stream.orderevents=OrderEvents" -e ASPNETCORE_URLS='http://*:8080' -p 8080:8080 ramonduraes/ms:latest 

Ao executar os passos citados acima você executará os três containers dentro de uma única rede privada e habilitará a comunicação interna entre eles. Um detalhe importante é nos parâmetros do microservices que utilizandos o dns interno do docker.

8) Comandos adicionais para listar as redes, inspecionar e excluir

docker network list
docker network inspect devprime
docker network rm devprime

Para saber mais:
Docker networking
[],

Ramon Durães