Docker - Uma introdução básica - XI

 Neste artigo vou apresentar os conceitos básicos relativos ao Docker sob o ponto de vista de um desenvolvedor .NET.

Neste artigo vamos realizar as seguintes tarefas: (artigo anterior)

  1. Ajustar a aplicação ASP .NET Core MVC para usar o banco de dados MySQL e fazer o acesso aos dados usando o EF Core;
  2. Criar uma imagem da aplicação da aplicação ajustada;
  3. Criar um contêiner da imagem da aplicação;
  4. Executar o contêiner da aplicação e realizar a comunicação do seu contêiner com o contêiner do banco de dados MySql

A primeira tarefa você pode acompanhar neste artigo: ASP .NET Core MVC - Ajustando o projeto para usar o MySQL - II

Após acompanhar o artigo citado acima retorne a este artigo e prossiga.

Criando a imagem para a aplicação MVC

Chegou a hora de atualizar a imagem para a nossa aplicação MVC de forma que ela inclua o código que ajustamos para dar suporte ao banco de dados MySQL, aos pacotes do EF Core e a migração inicial que irá criar o banco de dados e a tabela.

Antes de criar a imagem temos que refazer o deploy da aplicação para a pasta dist para atualizar os arquivos da aplicação. Para isso digite o comando abaixo:

dotnet publish --configuration Release --output dist

Agora vamos recriar a imagem da aplicação ASP .NET Core MVC:

docker build -t aspnetcoremvc/app:2.0 .

Visualizando as imagens locais : docker images

Vemos a imagem aspnetcoremvc/app com tag 2.0 definida e pronta para ser usada.

Assim já temos a imagem da aplicação MVC e a imagem do MySQL.

Resta fazer o teste final criando um novo contêiner com a imagem da aplicação MVC e fazer com que ele se comunique com o banco de dados MySQL que já deve estar rodando no contêiner mysql criado no artigo anterior.

Para isso vamos entender mais um pouco sobre como o Docker realiza a comunicação entre contêineres.

Quando você inicia um contêiner, o Docker conecta-o a uma rede virtual interna e atribui a ele um Internet Protocolo (IP) para que ele possa se comunicar com o servidor host e com outros contêineres na mesmo rede. Este é o ponto de entrada para um recurso chave do Docker que veremos no próximo artigo: as redes.

Para que o contêiner MVC converse com o banco de dados Mysql, preciso saber o endereço IP que o Docker atribuiu ao contêiner do MySQL que criamos.

Para isso vamos executar o comando abaixo e examinar a configuração do Docker para rede virtual.

docker network inspect bridge

A resposta desse comando mostrará como o Docker configurou a rede virtual e vai exibir uma seção Contêineres que mostra os contêineres conectados à rede e os endereços IP que são atribuídos a eles. Deve haver apenas um contêiner e seu campo Name será mysql.

Anote o endereço do campo:   "IPV4Address" : "172.17.0.2/16"

Esse é o endereço IP que o Docker atribuiu ao contêiner. Para mim, o endereço é 172.17.0.2, mas
você pode ver um endereço diferente. Este é o endereço IP que o aplicativo MVC deve usar para se comunicar com o banco de dados MySQL.

Esse endereço pode ser fornecido ao aplicativo por meio da variável de ambiente DBHOST, que foi definida na classe Startup do aplicativo MVC no qual fizemos os ajustes.

Vamos passar esse valor quando formos criar o contêiner. Assim digite o comando abaixo para criar o contêiner da aplicação MVC:

docker container run -d --name produtosapp -p 3000:80 -e DBHOST=172.17.0.2 aspnetcoremvc/app:2.0

Criamos um contêiner com o nome produtosapp rodando em background (-d) passando o IP(172.17.0.2) para que este contêiner se comunique com o contêiner mysql.

No comando estamos mapeando a porta 3000 no host para a porta 80 no contêiner, que é a porta que o Kestrel está usando para receber solicitações HTTP para o runtime do ASP.NET Core.

A seguir exibimos o log gerado usando o comando:  docker container logs -f produtosapp

Vemos no log as mensagens aplicando a migração e a criação dos dados na tabela Produtos.

Vamos agora abrir um navegador no endereço: http://localhost:3000

Note que os dados exibidos são os dados que definimos no método IncluiDadosDB da classe Populadb.

Conclusão: Criamos um contêiner para uma aplicação ASP .NET Core MVC que acessa dados de um banco de dados MySQL que esta em outro contêiner.

Na próxima aula vamos entender o que é a rede do Docker.

Como está escrito:Não há um justo, nem um sequer.

Romanos 3:10
Como está escrito:Não há um justo, nem um sequer.

Romanos 3:10
Como está escrito:Não há um justo, nem um sequer.

Romanos 3:10

"Como está escrito : Não há um justo, nem um sequer."
Romanos 3:10

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

  Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

Referências:


José Carlos Macoratti