Oggi lo sviluppo del software è ampiamente implementato su una particolare tecnologia cloud native: la containerizzazione. Si tratta in primo luogo di un approccio moderno alla creazione delle applicazioni digitali, che ha agevolato in maniera decisiva la diffusione di metodologie di sviluppo agili come DevOps, soprattutto nei contesti che richiedono il continuo rilascio dei singoli componenti funzionali (CI/CD).

Che cos’è la containerizzazione?

La containerizzazione è un metodo di virtualizzazione al livello del sistema operativo che permette il deploy e l’esecuzione delle applicazioni senza dover ricorrere ad una macchina virtuale completa per ciascuna.

La containerizzazione consente di eseguire su un singolo host più applicazioni isolate accedendo al kernel dello stesso sistema operativo. Le tecnologie di containerizzazione lavorano sui sistemi bare-metal, nelle istanze in cloud e sulle macchine virtuali: su Windows, Linux e Mac OS.

Il grande successo della containerizzazione è dovuto alla diffusione dello sviluppo software basato sull’architettura a microservizi. A differenza delle tradizionali applicazioni monolitiche, vincolate in blocco ad un unico eseguibile, i microservizi decompongono l’applicazione principale in vari componenti tra loro disaccoppiati, in grado di comunicare tra loro attraverso apposite API.

Tale approccio consente di creare ed aggiornare i singoli componenti funzionali dell’applicazione in maniera del tutto indipendente tra loro, abilitando metodologie di sviluppo di nuova concezione, molto più agili rispetto a quelle tradizionali sia per quanto concerne l’organizzazione dei team che le tecnologie utilizzate, a cominciare dalla varietà dei linguaggi di programmazione.

La storia

I primi cenni di containerizzazione hanno fatto la loro comparsa nel lontano 1979 su sistema operativo Unix version 7, con una tecnologia basata sull’isolamento dei processi, che consentiva all’applicazione di accedere ad una director specifica, identificata come root e ai suoi children.

Alla base di questa sperimentazione vi era la volontà di rendere i sistemi complessivamente più sicuri grazie al fatto che la compromissione di un processo isolato non coinvolgeva necessariamente l’intero sistema. Si tratta di un concetto tuttora valido, che costituisce uno dei principali punti di forza delle architetture basate sui microservizi.

Nel 2000, FreeBSD ha introdotto il jail command, molto simile al chroot command già impiegato su Unix, con importanti evoluzioni tecnologiche, come la possibilità di creare un vero e proprio sandbox per isolare rispettivamente i file di sistema, le reti e gli utenti.

Avvicinandoci ai nostri giorni, sono intervenute molte varianti tecnologiche, che hanno consentito alle tecnologie di containerizzazione di diventare sempre più mainstream nell’industria dello sviluppo software. Un’autentica milestone, in tal senso, la ritroviamo nel 2013, quando Docker, piattaforma di creazione e gestione dei container, è stato reso open source, diventando il core per molte soluzioni branded che hanno consentito di dare uno straordinario impulso alla diffusione di questa tecnologia.

Nell’ambito delle tecnologie di orchestrazione dei container Kubernetes vanta tuttora un ruolo di leadership, grazie al continuo supporto da parte di giganti come AWS o di brand specialisti, come lo stesso Docker.

Cosa sono i container e cosa contengono

I container è l’attore protagonista della containerizzazione: un contenitore virtuale che consente il deploy e l’esecuzione di un’applicazione. Si tratta di un ambiente di sviluppo completo, che contiene i processi e le applicazioni necessarie al runtime del software, per non dover virtualizzare anche la componente hardware, come avviene nel caso dello sviluppo su macchine virtuali (VM).

È proprio nella differenza tra le due tecnologie di virtualizzazione che trovano il senso i container: fanno meno cose, soltanto quelle che servono nel caso specifico, e consentono di implementarle in maniera decisamente più agile rispetto ad una VM completa, anche per quanto concerne la semplicità di gestione.

Il container viene eseguito come qualsiasi applicativo all’interno di un sistema operativo host e consente di avviare istanze multiple senza doverle configurare singolarmente da zero. Il suo ambiente di sviluppo è altamente personalizzabile. In un container possono essere predisposti il codice, le dipendenze, le librerie, i file binari e tutti i file di configurazione dell’applicazione contenuta al suo interno.

Ancora prima di entrare nel merito dei principali benefici offerti dalla containerizzazione, è necessario notare come i container consentano almeno due vantaggi fondamentali nel contesto dello sviluppo delle applicazioni: una elevata personalizzazione e una rapida disponibilità.

In senso ancora più ampio, si tratta di due aspetti fondamentali delle tecnologie di virtualizzazione, capaci di configurare ambienti virtuali specifici per qualsiasi esigenza applicativa, oltre a consolidare i server e le altre risorse IT che si rendono necessarie per garantire la piena operatività dello sviluppo su container.

I container accelerano inoltre i cicli di rilascio delle applicazioni (CI/CD) ottimizzazioni i tempi e i costi legati al loro sviluppo, semplificando la gestione dell’intero ciclo di vita, comprese le fasi legate alla manutenzione.

È facile intuire come l’utilizzo dei container acceleri notevolmente i cicli di rilascio delle applicazioni, ottimizzando i tempi e i relativi costi, unitamente alla facilità con cui diventa possibile gestire le fasi di creazione di un software e la sua successiva manutenzione.

Lo sviluppo delle applicazioni cloud-native può prevedere l’impiego di centinaia di container distinti, il cui lavoro coinvolge team, tecnologie, tempi e costi di sviluppo differenti. I container stessi sono spesso implementati di differenti ecosistemi cloud. Il lavoro sul singolo container non esclude pertanto una naturale complessità di gestione, che si associa da sempre al contesto multicloud.

Per garantire la corretta visibilità di un progetto di sviluppo containerizzato entra in gioco una nuova disciplina: l’orchestrazione, garantita da piattaforme come Kubernetes, in grado di monitorare e gestire tutti i container a prescindere dalla posizione: on-premises, su cloud pubblico, privato o ibrido.

LEGGI ANCHE: Container e Virtual Machine: vantaggi e differenze di ognuno

I vantaggi della containerizzazione

Lo sviluppo mediante le tecnologie di containerizzazione permette di ottenere una serie di sostanziali vantaggi nel ciclo di vita del software moderno, recependo i principali benefici che caratterizzano i servizi e le soluzioni in cloud.

Portabilità

I container possono essere eseguiti in più ambienti senza obbligare alla riscrittura del codice. È pertanto possibile creare l’applicazione una sola volta ed eseguirla su più sistemi operativi, in quanto il container risulta compatibile all’ambiente Windows e Linux. Tale approccio facilita notevolmente la modernizzazione del software legacy a favore di una soluzione cloud native.

Scalabilità

I container sono applicazioni leggere e rapide da eseguire anche senza il supporto di una macchina virtuale completa. Una singola macchina può contenere ed eseguire più container per soddisfare varie applicazioni. Un container utilizza le risorse IT necessarie attraverso il sistema operativo host, senza interferire in alcun modo con il funzionamento degli altri container presenti.

Agilità

Le applicazioni containerizzate sono eseguite in ambienti informatici isolati, dove gli sviluppatori possono lavorare senza rischiare di compromettere l’integrità del sistema operativo e dell’hardware host. Oltre a garantire una maggior sicurezza informatica, i container costituiscono uno strumento molto efficace per supportare lo sviluppo basato sulla metodologia DevOps, che vede proprio nell’agilità la sua qualità più importante.

Resilienza

Un progetto di sviluppo software cloud native prevede l’impiego di più container per il deploy e l’esecuzione dei microservizi. Una situazione di guasto sul singolo container non è in grado di compromettere l’intero progetto, in quanto non influisce in alcun modo sugli altri container coinvolti. Tale approccio allo sviluppo appare pertanto resiliente per design.

Come funziona la containerizzazione?

La creazione del container prevede vari momenti, che le piattaforme di creazione e gestione come Docker possono in gran parte automatizzare. In primo luogo, ci si occupa di selezionare le cartelle contenenti i file necessari per eseguire le applicazioni, indicando loro un percorso. L’ambiente di esecuzione è in tal modo altamente personalizzabile, in quanto è possibile scegliere singolarmente tutti i file utili in qualsiasi contesto applicativo.

L’elevata personalizzazione dei container li rende lo strumento ideale per supportare lo sviluppo basato su un’architettura del software a microservizi, caratterizzata da tanti e differenti ambienti di esecuzione, ciascuno destinato ad una differente applicazione.

In estrema sintesi è possibile semplificare la creazione di un container attraverso due fasi principali, almeno dal punto di vista divulgativo.

La prima fase è destinata alla personalizzazione dell’ambiente di esecuzione. Si predispone l’ambiente di lavoro e si creano le immagini fondamentali per l’applicazione da eseguire.

La seconda fase prevede l’avvio del container attraverso le immagini precedentemente configurate. In caso vengano apportate delle modifiche, queste influiscono solo sulla singola istanza del container e non sulle immagini di partenza, rendendo molto più agile ed innovativo l’approccio allo sviluppo.

Ambiti di applicazione della containerizzazione

I container sono ormai utilizzati in moltissimi contesti applicativi, in cui entra il gioco lo sviluppo cloud native.

Migrazione in cloud

I container sono molto utilizzati nell’ambito della migrazione in cloud delle applicazioni legacy, in particolare per quanto concerne l’approccio lift-and-shift. Tale approccio è spesso noto come modernizzazione del software e prevede l’incapsulamento del software legacy in un container per implementarne l’esecuzione in ambiente cloud. Ciò consente di accelerare la migrazione per via del fatto che non si rende necessario riscrivere l’intero codice dell’applicazione.

Architettura di microservizi

Nell’ambito dello sviluppo software, ogni microservizio corrisponde ad una funzione unica e specifica. Un’applicazione cloud moderna è pertanto costituita da più microservizi tra loro disaccoppiati. Un’applicazione di e-commerce potrebbe disporre di microservizi per l’elaborazione dei dati, il tracciamento degli utenti, gli ordini, i pagamenti, le spedizioni, la fatturazione e la personalizzazione. La containerizzazione offre lo strumento per creare pacchetti di microservizi come programmi implementabili anche su piattaforme diverse, in maniera estremamente agile e flessibile.

IoT e Edge Computing

I device IoT (Internet of Things) sono caratterizzati da risorse hardware limitate, il che rende necessaria un’ottimizzazione del software molto elevata. La containerizzazione consente di semplificare l’aggiornamento delle applicazioni grazie alla possibilità di snellire il più possibile ogni singolo componente e di farlo in tempi estremamente rapidi, grazie al totale disaccoppiamento tra i vari microservizi coinvolti.

Containerizzazione: cos’è, come funziona, i vantaggi ultima modifica: 2023-03-10T15:08:45+01:00 da Francesco La Trofa

LASCIA UN COMMENTO

Per favore inserisci il tuo commento!
Per favore inserisci il tuo nome qui