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
Eliminare una project wiki di Azure DevOps
Controllare la telemetria con .NET Aspire
Conoscere il rendering Server o WebAssembly a runtime in Blazor
Gestire il routing HTTP in Azure Container App
Utilizzare i variable font nel CSS
Creare una libreria CSS universale: Cards
Gestire gli accessi con Token su Azure Container Registry
Collegare applicazioni server e client con .NET Aspire
Applicare un filtro per recuperare alcune issue di GitHub
Sfruttare gli embedding e la ricerca vettoriale con Azure SQL Database
Eseguire query in contemporanea con EF
Recuperare gli audit log in Azure DevOps
I più letti di oggi
- Progressive Web Apps with Blazor and Azure
- PWAConf 2020 - Online
- Tutto per portarsi le nuove tecnologie sotto l'ombrellone: ASP.NET 4.5, ASP.NET MVC 4 e Windows 8
- Speciale .NET Framework 4.5 e Visual Studio 2012: tutte le novità
- Tutte le novità da Microsoft: segui live con noi Build12 da Redmond!
- Addio a Expression Studio: Blend sarà integrato direttamente in Visual Studio 2012
- .NET Campus: Le novità di ASP.NET 4.0
- ecco la prima preview di #vs11. si possono fare app per metro in #Javascript, #xaml... http://aspitalia.com/build-win8 #BldWin
- buona #Pasqua a tutti! Le nostre pubblicazioni vanno in pausa per una settimana, fino all'8 aprile!
- disponibile la rtm di #dynamicdata e #entitydatasource per #ef6 https://aspit.co/asi