facebook

Blog

Resta aggiornato

Usare Docker e Kubernetes per deployare applicazioni .NET Core in produzione
.NET Core, Docker e Kubernetes
mercoledì 12 Giugno 2019

In un articolo precedente abbiamo parlato dell’uso dei container Docker per lo sviluppo, sottolineando i vantaggi che l’uso dei container possono dare al processo dello sviluppo software. Uno di questi vantaggi è la semplificazione del processo di deploy delle immagini dei container, dato che le immagini dei container possono essere deployate molto semplicemente. 

La buona notizia è che possiamo usare i container per ospitare applicazioni .NET Core, quindi possiamo divertirci con questa tecnologia usando le nostre competenze .NET. Non vi fidate? Ok, seguite questi semplici passi:

  • Se non avete ancora installato .NET Core, fatelo da https://dotnet.microsoft.com/download 
  • Da terminale, create una cartella (con il comando mkdir demo), e spostatevi in essa con il comando cd demo
  • Eseguite il comando dotnet new webapi per creare un progetto API da un template preconfigurato fornito dalla .NET Core CLI (Command Line Interface)
  • Eseguite il comando dotnet run per lanciare l’applicazione sulla vostra macchina
  • Aprite il browser all’indirizzo https://localhost:5001/api/values

Se non ci sono errori, dovreste vedere il seguente risultato:

E’ un semplice esempio di API di test, tuttavia possiamo eseguire questo progetto in un container Docker creando un Dockerfile nella root dell’applicazione, contenente i seguenti comandi:

FROM microsoft/dotnet:sdk as build
RUN mkdir app
WORKDIR /app
COPY . .
RUN dotnet restore
RUN dotnet publish -c Release -o out
 
FROM microsoft/dotnet:aspnetcore-runtime
WORKDIR /app
COPY --from=build /app/out/. .
CMD dotnet demo.dll

Partendo dall’immagine ufficiale di Microsoft dotnet:sdk, contenente tutto il .NET Core SDK necessario per la compilazione, creiamo una cartella “app” (RUN mkdir app) e usiamola come working directory (WORKDIR /app). Questa operazione ci permette di eseguire tutti i comandi successivi su questa cartella. Copiamo il contenuto del progetto nel container (COPY . .), ripristiniamo le dipendenze NUGET (RUN dotnet restore) e pubblichiamo l’applicazione in una cartella chiamata “out” con la configurazione “Release” (RUN dotnet publish -c Release -o out). Tutte queste operazioni fanno parte di un primo step che abbiamo chiamato “build” (FROM microsoft/dotnet:sdk as build).

Nella seconda parte dello script, partiamo dall’immagine Microsoft con il runtime di ASP.NET Core, contenente solo i componenti di runtime per eseguire una applicazione ASP.NET Core (FROM microsoft/dotnet:aspnetcore-runtime). In questa immagine esiste già una cartella app. Quindi dobbiamo solo impostarla come cartella di lavoro (WORKDIR /app) e copiare il risultato dello step precedente dalla cartella “out” (COPY –from=build /app/out/. .). Quando l’immagine finale sarà eseguita, verrà lanciato il comando dotnet con il file demo.dll come parametro, generato con il precedente comando publish (CMD dotnet demo.dll).

Siamo pronti a creare la nostra immagine con il seguente comando:

docker build -t demo:1.0.0 .

Il risultato del comando è il seguente:

Possiamo eseguire l’immagine creata per testarla con il comando:

docker run -it -p 80:80 demo:1.0.0

Il risultato è il seguente:

Se l’applicazione è composta da più di un container, il processo di deploy può essere un po’ più complicato perchè dobbiamo gestire le versioni di ogni container e le loro comunicazioni. Per svolgere queste attività, la soluzione migliore è l’uso di un orchestratore di container, e oggi questo significa Kubernetes.

Kubernetes, o K8s, è un orchestratore di container open source creato da Google e oggi manutenuto dalla Cloud Native Computing Foundation. Potete usarlo nella vostra infrastruttura on-premise oppure con uno dei principali cloud provider come Microsoft, Google o Amazon. Una volta compresi i principi base e i componenti dietro Kubernetes, potete chiedergli di deployare i vostri container, scalarli come volete, connetterli sulla base dei vostri requisiti e della vostra strategia di sicurezza e aggiornare la vostra applicazione per rispondere al meglio ai vostri requisiti.

Se siete interessati a Docker, Kubernetes e .NET Core e volete una guida pratica per cominciare a lavorare con queste tecnologie, potete scaricare gratuitamente il libro che ho pubblicato per Syncfusion al link https://www.syncfusion.com/ebooks/using-netcore-docker-and-kubernetes-succinctly

Ho scritto questo libro con il mio tipico approccio pratico, creando da zero un’applicazione .NET Core che usa un database SQL Server, usando Docker sia per l’ambiente di sviluppo che per quello di produzione. Dopo la creazione delle immagini, ho spiegato in dettaglio come deployare l’applicazione su un cluster Kubernetes installato sulla propria macchina. Nell’ultimo capitolo potrete leggere come deployare la stessa applicazione su cluster AKS (Azure Kubernetes Service), personalizzando il tipo di storage dei dati per usare le soluzioni offerte da Azure e sfruttare i tool di monitoraggio offerti dal Cloud Microsoft.

Inoltre, se siete a Napoli il 26 Giugno, abbiamo organizzato insieme al Cloud Native Computing Foundation meetup di Napoli, una serata per stare insieme parlando di queste tecnologie, partendo da una sessione tecnica su Docker, Kubernetes e Azure. Tutti i dettagli qui: https://www.meetup.com/it-IT/cncfnapoli/events/261921731/

Happy coding!