ASP.NET Core + Docker: trabalhando com variáveis de ambiente
Embora o arquivo appsettings.json e soluções como o Azure Key Vault atendam muito bem a projetos ASP.NET Core, o uso de Docker tende a trazer novos desafios no que se refere às configurações de uma aplicação. É extremamente comum o preenchimento de variáveis de ambiente ao criar um container, com tais parâmetros influenciando como ocorrerá a execução das aplicações correspondentes.
E como podemos então trabalhar com estas variáveis em aplicações ASP.NET Core que serão executadas via containers Docker?
O procedimento é bem mais simples do que se imagina e está detalhado nas próximas seções, através de um exemplo baseado em uma API REST criada com o ASP.NET Core 2.2.
E aproveito este espaço para deixar aqui ainda um convite.
Dia 07/08/2019 (quarta) a partir das 21:00 - horário de Brasília - teremos mais uma live no Canal .NET. Desta vez farei uma apresentação em conjunto com o MVP Milton Camara Gomes, abordando a implementação de testes com .NET Core e o Visual Studio 2019 (incluindo cenários de integração com Azure DevOps).
Para efetuar a sua inscrição acesse a página do evento no Meetup. A transmissão acontecerá via YouTube, em um link a ser divulgado em breve.
Implementação do projeto
O objeto no qual estão as configurações de uma aplicação (uma instância de IConfiguration, interface que integra o namespace Microsoft.Extensions.Configuration) é automaticamente preenchido quando da inicialização da mesma, contendo desde definições especificadas no arquivo appsettings.json a variáveis de ambiente.
Se um mesmo identificador for empregado para uma variável de ambiente e um item em appsettings.json, o valor associado à variável de ambiente terá precedência.
No listagem a seguir é possível observar o elemento MENSAGEM declarado no arquivo appsettings.json:
Já a classe ValuesController referenciará este item na propriedade Mensagem do objeto a ser retornado como resultado, com Local indicando a máquina ou container em que se dá a execução da API REST:
Ao executar esta aplicação a partir do Visual Studio Code teremos como resultado:
E aproveito este espaço e o grande interesse por Docker também para um convite.
Tem interesse em conhecer mais sobre Docker? Que tal então fazer um curso completo, cobrindo desde fundamentos a diferentes possibilidades de uso de containers com tecnologias em alta no mercado? Adquira conhecimentos profundos sobre Docker, evolua e se diferencie no mercado, seja você um profissional DevOps, um Desenvolvedor ou um Arquiteto de Software!
Acompanhe o portal Docker Definitivo para ficar por dentro de novidades a serem anunciadas em breve!
Testes com containers Docker
Para os testes apresentados nesta seção foi criada a imagem api-environment.
O comando a seguir criará um container na porta 20001 chamado teste-env-var01, com o conteúdo da variável de ambiente MENSAGEM substituindo o valor associado ao item de mesmo no arquivo appsettings.json:
Ao acessar via browser a API REST que está na porta 20001 o resultado trará em Mensagem o valor informado como variável de ambiente, enquanto em Local constará o ID do container correspondente:
Já a próxima instrução irá gerar um container executando na porta 20002, desta vez sem a definição de uma variável de ambiente e assumindo assim o valor definido inicialmente no arquivo appsettings.json:
Teremos como resultado:
Por fim, um último teste será realizado via Docker Compose:
- Na seção environment foi declarada a variável MENSAGEM com seu respectivo valor;
- A execução deste novo container acontecerá na porta 20003.
Na resposta gerada o item Mensagem conterá o valor especificado no arquivo docker-compose.yml: