ASP.NET Core  - Web API com MongoDB no .Net 6 - II


 Neste artigo veremos como acessar o MongoDB em um container Docker usando o MongoDB Compass.

No artigo anterior criamos uma Web API acessando o MongoDB local. Vamos continuar mostrando agora como usar o MongoDB no Docker. Com isso vamos poupar a instalação local do MongoDB.

Se você não conhece o Docker acompanhe meu minicurso de Docker no canal :
https://www.youtube.com/playlist?list=PLJ4k1IC8GhW1kYcw5Fiy71cl-vfoVpqlV

Veja também o minicurso de Docker em artigos neste link: https://www.macoratti.net/Cursos/docker_mcurso.htm

O principal benefício do Docker é que ele permite que os usuários empacotem um aplicativo com todas as suas dependências em uma unidade padronizada para desenvolvimento de software. Ao contrário das máquinas virtuais, os contêineres não têm a alta sobrecarga e, portanto, permitem um uso mais eficiente do sistema e dos recursos subjacentes.

O Docker resolve um problema clássico de desenvolvedor;  com certeza você já ouviu a famosa desculpa: "...mas na minha máquina funciona !!! "

Pois é, com o Docker podemos criar um ambiente completo em um container totalmente isolado de dependências externas e distribuir esse container para ser executado em qualquer máquina com o Docker instalado.

"Um contêiner é uma unidade padrão de software que empacota o código e todas as suas dependências para que o aplicativo seja executado de maneira rápida e confiável de um ambiente de computação para outro."

Os contêineres Docker são criados a partir de imagens que podem estar prontas e disponíveis em um repositório como o Docker Hub ou podem ser criadas de forma customizadas.

Assim, uma imagem de um contêiner do Docker é um pacote de software leve, autônomo e executável que inclui tudo o que é necessário para executar um aplicativo: código, runtime, ferramentas do sistema, bibliotecas do sistema e configurações.

A imagem é como se fosse a classe e o contêiner como se fosse uma instância dessa classe.

Existe um repositório de imagens chamado Docker Hub onde existem milhares de imagens prontas que podemos baixar e usar para criar os contêineres que precisamos executar.

Assim vamos baixar uma imagem do MongoDB a partir do repositório de imagens do MongoDB neste link: https://hub.docker.com/_/mongo

A seguir vamos criar um container usando a imagem do MongoDB e assim teremos o MongoDB rodando dentro de um contâiner Docker.

Para criar o container a partir da uma imagem do MongoDB usamos o seguinte comando em um terminal de comandos:

Nota: Você precisa ter o Docker instalado no seu ambiente.

docker run --name mongo_container -e MONGO_INITDB_ROOT_USERNAME=macoratti -e MONGO_INITDB_ROOT_PASSWORD=numsey -d -p 27018:27017 mongo

Vamos entender o comando:

Podemos confirmar a criação do container usando o dashboard do Docker Desktop for Windows:

Se preferir pode emitir o comando : docker ps   no terminal de comandos

A string de conexão que vamos usar para acessar esse container será  seguinte:

mongodb://macoratti:numsey@localhost:27018/admin

onde:

user : macoratti
password: numsey
url :  localhost:27018/admin

Assim podemos abrir o MongoDb Compass clicar em New Connection e informar a string de conexão :

Ao clicar em Connect teremos o acesso ao container do MongoDB:

Agora podemos criar os Databases , documents, collections etc.. no ambiente do MongoDB usando o Compass.

Também podemos entrar no contâiner usando o comando:  docker exec -it mongo_container bash

A seguir digitamos o comando mongosh para acessar o Shell do MongoDB e assim temos acesso a linha de comando do Shell.

Para saber mais sobre os comandos do Shell você pode consultar o link:  Shell Quick Reference

Como exemplo podemos emitir o comando db para exibir o banco de dados atual e para  criar um banco de dados podemos usar o comando: use <nome_banco>

Para fazer o login usando o usuário e a senha use o comando: mongosh admin -u macoratti -p 'numsey'

Com isso teremos acesso ao prompt admin e poderemos emitir comandos como : show dbs

que exibe os 3 bancos de dados iniciais criados no Mongo.

Podemos também inspecionar os logs do MongoDB usando o comando:  docker logs mongo_container --follow

Uma outra forma de acessar o container é via dashboard do Docker Desktop for Windows.

No dashboard, acessando a guia Containers, temos acesso ao container com as seguintes opções:

Usando volumes

Ao executar o MongoDB no Docker, um dos principais desafios é o armazenamento. Normalmente, os usuários desejam manter dados para os contêineres. Uma boa prática é usar volumes para garantir que os dados persistam mesmo depois que o contêiner for interrompido ou o daemon do Docker for reiniciado.

Os volumes do Docker resolvem o problema dos arquivos de dados mantendo-os fora do contêiner e tornando-os ainda acessíveis ao aplicativo que é executado dentro do contêiner.

Por padrão, a imagem do MongoDB armazena seus dados no diretório /data/db. Você pode montar um volume neste local para habilitar a persistência de dados. Use este comando para criar um contêiner teste-mongo com um volume do Docker chamado data-vol montado nele:

docker run -d -p 27017:27017 --name teste-mongo -v data-vol:/data/db mongo:latest

O argumento -v informa ao Docker que agora quaisquer dados que o container criar no diretório /data/db (o local padrão do container) devem ser armazenados no volume data-vol no host.

Para consultar o volume criado podemos usar o comando : docker volume ls

Agora se o container do Mongo for destruído os dados ficarão armazenados localmente em data-vol.

Com isso vimos como criar um container para o MongoDB e acessá-lo usando o MongoDB Compass e também como entrar no contâiner e usar a linha de comando do Shell de comandos.

Na próxima parte do artigo iremos acessar o container do MongoDB usando a aplicação Web API criada na primeira parte do artigo.

"Sede unânimes entre vós; não ambicioneis coisas altas, mas acomodai-vos às humildes; não sejais sábios em vós mesmos;"
Romanos 12:16

Referências:


José Carlos Macoratti