ASP.NET Core + Docker: trabalhando com variáveis de ambiente

Renato Groffe
4 min readAug 5, 2019

--

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!

Site: https://dockerdefinitivo.com/

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:

--

--

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