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
Effettuare lo stream della risposta in ASP.NET Core tramite IAsyncEnumerable
Ottimizzare la latenza in Blazor 8 tramite InteractiveAuto render mode
Specificare il versioning nel path degli URL in ASP.NET Web API
Eseguire operazioni sui blob con Azure Storage Actions
Sfruttare lo streaming di una chiamata Http da Blazor
Effettuare il deploy di immagini solo da container registry approvati in Kubernetes
Eseguire le GitHub Actions offline
Come migrare da una form non tipizzata a una form tipizzata in Angular
Determinare lo stato di un pod in Kubernetes
Usare un KeyedService di default in ASP.NET Core 8
Elencare le container images installate in un cluster di Kubernetes
Eseguire una GroupBy per entity in Entity Framework