Nell'articolo di introduzione ad ASP.NET Core e Docker (https://www.aspitalia.com/articoli/asp.net-core/docker-aspnet-core-portare-nostri-siti-web-container.aspx), abbiamo visto che portare un nostro sito web su container consiste, in buona sostanza, nel creare un'immagine con all'interno tutti i file necessari alla sua esecuzione. Questa immagine poi potrà essere utilizzata per eseguire l'applicazione all'interno di un container, in un qualsiasi ambiente in cui vogliamo effettuarne il deploy.
Un aspetto che non abbiamo trattato, però, è come gestirne la configurazione, per esempio specificando una diversa connection string, a seconda dell'ambiente di deploy (sviluppo, test, stagin, produzione).
Come abbiamo visto in passato (https://www.aspitalia.com/script/1235/Gestire-Configurazione-ASP.NET-Core-Ambienti.aspx) in ASP.NET Core possiamo referenziare diversi file appSettings e selezionare a runtime quello che vogliamo utilizzare.
Questo approccio, però, impone che tutti questi file siano precostituiti e, se stiamo usando Docker, siano inclusi nella immagine o condivisi dall'esterno, con il risultato di essere piuttosto laborioso.
Una tecnica più semplice consiste invece nell'effettuare l'override delle varie sezioni di configurazione tramite variabili d'ambiente.
Immaginiamo di avere un file appSetting.json come il seguente, nel quale abbiamo una sezione in cui specificare gli URL dei vari servizi di cui l'applicazione ha bisogno.
{ "Logging": { "IncludeScopes": false, "LogLevel": { "Default": "Warning" } }, "services": { "backend": "http://backend/" } }
In qualsiasi momento, possiamo modificare uno di questi valori semplicemente creando una variabile d'ambiente che corrisponda al path, all'interno del json, della chiave su cui vogliamo intervenire, utilizzando come separatore il doppio underscore "__". Per esempio, per specificare un nuovo URL per backend, possiamo impostare questa variabile in powershell:
$Env.services__backend="http://alternateaddress/"
Queste variabili possono anche essere impostate anche nel comando Docker Run, così che siano visibili solo all'interno dell'ambiente di esecuzione del container. Per esempio:
docker run -e "services__backend=http://alternateaddress/" myImage
Commenti
Per inserire un commento, devi avere un account.
Fai il login e torna a questa pagina, oppure registrati alla nostra community.
Approfondimenti
gRPC con .NET
Sfruttare lo stream rendering per le pagine statiche di Blazor 8
Estrarre dati randomici da una lista di oggetti in C#
Come migrare da una form non tipizzata a una form tipizzata in Angular
Paginare i risultati con QuickGrid in Blazor
Eseguire query verso tipi non mappati in Entity Framework Core
Modificare i metadati nell'head dell'HTML di una Blazor Web App
Creare alias per tipi generici e tuple in C#
Usare una container image come runner di GitHub Actions
Filtrare i dati di una QuickGrid in Blazor con una drop down list
Supportare lo HierarchyID di Sql Server in Entity Framework 8
Implementare l'infinite scroll con QuickGrid in Blazor Server