Container: nuova frontiera della flessibilità applicativa

Un mercato in forte crescita per questi componenti che introducono un elevato livello di flessibilità nell’eseguire, rilasciare, distribuire e migrare le applicazioni

Una delle tecnologie che negli ultimi anni ha contributo a rinnovare i modelli di sviluppo è quella dei container. Un container è un pacchetto software che realizza una forma di virtualizzazione del sistema operativo contenente tutti i componenti necessari (codice binario, librerie, file di configurazione) per l’esecuzione di un’applicazione, un microservizio o un processo software in qualsiasi ambiente, dal pc di uno sviluppatore a un data center on-premise, fino al cloud pubblico. 

Per capire il successo che sta avendo questa tecnologia possiamo citare una ricerca di ReportLinker pubblicata ad Agosto 2022 ( che riporta che il mercato globale di Application Container raggiungerà 12 miliardi di dollari entro il 2028 con un incremento del tasso di crescita annuale composto (CAGR) entro lo stesso periodo pari al 33,1%.

Uso e vantaggi dei container

I container mettono a disposizione degli sviluppatori una soluzione ottimizzata per creare, testare, implementare e ridistribuire le applicazioni su più ambienti.

Tra gli ambiti in cui l’utilizzo dei container trova spazio vi è quello del cosiddetto “Lift and shift” per migrare le applicazioni esistenti da un ambiente on-premise in un’architettura cloud. Ambiti che riescono a sfruttare in modo ancora più completo i benefici di disporre di un’architettura applicativa modulare basata su container sono il “refactoring” delle applicazioni esistenti per i container ovvero la riscrittura di uno o più componenti di un’applicazione mantenendone inalterate le funzionalità (tipicamente per sfruttare i servizi del cloud pubblico) oppure il vero e proprio sviluppo di nuove applicazioni native per container.

I container forniscono anche un miglior supporto per le applicazioni distribuite e i microservizi e possono essere utilizzati in modo proficuo per l’esecuzione in background di funzioni di raccolta dati (ETL) o di programmi pianificati che non richiedono interazione con l’utente (batch job).

I container offrono innumerevoli vantaggi. Innanzitutto il fatto di avere un overhead ridotto e richiedere meno risorse di sistema rispetto alle virtual machine perché, a differenza di queste, non contengono immagini del sistema operativo. Inoltre, consentono un’estrema portabilità che permette alle applicazioni eseguite nei container di essere implementate su ogni tipo di sistema operativo e piattaforma hardware.

Il fatto che le applicazioni nei container siano eseguite allo stesso modo, indipendentemente dalla loro destinazione di implementazione, favorisce l’applicazione di modelli Agile e DevOps, contribuendo ad accelerare i cicli di sviluppo, testing e produzione. Inoltre, i container favoriscono l’efficienza e la scalabilità e la sicurezza consentendo di correggere più rapidamente le applicazioni.

La gestione dei container: Docker e Kubernetes

Parlando di container ci si trova spesso a doversi confrontare con i due principali strumenti per la loro gestione: Docker e Kubernetes.

Docker è un ambiente di runtime basato su open standard che può essere utilizzato negli ambienti operativi più comuni nonché su infrastrutture on-premise o basate sul cloud, per creare e costruire software all’interno dei container. L’uso di immagini Docker permette di implementare applicazioni “containerizzate” all’interno degli ambienti di sviluppo, test e produzione.

Nelle implementazioni di applicazioni di maggiori dimensioni è possibile doversi confrontare con l’implementazione di centinaia (persino migliaia) di container che possono essere organizzati sotto forma di uno o più cluster. Per orchestrare o gestire questi cluster è utile avvalersi di un orchestratore di container e il tool oggi più diffuso per questo scopo è Kubernetes. 

Kubernetes ha la capacità di riconoscere i diversi ambienti di “runtime container” (come Docker) e di gestire le risorse infrastrutturali richieste dalle applicazioni containerizzate, come le risorse di calcolo, di rete e di storage.

Container e macchine virtuali

È bene soffermarsi sulla differenza tra container e macchine virtuali che, sebbene abbiano similarità, rappresentano entità molto diverse tra loro. Entrambi forniscono funzionalità di isolamento e offrono i vantaggi di un’allocazione più flessibile delle risorse, ma i container virtualizzano il sistema operativo anziché l’hardware come fanno le virtual machine.

Le macchine virtuali vengono, infatti, eseguite in un ambiente hypervisor in cui ognuna deve disporre di un proprio sistema operativo con tutti i componenti associati (file binari, librerie, applicazioni); questo richiede un significativo consumo di risorse di sistema e di overhead.

I container sono un’astrazione a livello di applicazione che raggruppa codice e dipendenze. Più container possono essere eseguiti sulla stessa macchina e condividere il kernel del sistema operativo con altri container, ciascuno dei quali viene eseguito come un processo isolato all’interno dello spazio utente. 

Inoltre, i container occupano meno spazio delle macchine virtuali (le immagini dei container hanno in genere dimensioni di decine di MB rispetto ai GB delle macchine virtuali), possono gestire più applicazioni e richiedono meno risorse e sistemi operativi. L’avvio di un container può anche essere eseguito più rapidamente rispetto a una macchina virtuale (secondi rispetto a minuti).

Di fatto, è proprio l’uso congiunto di container e macchine virtuali che consente di ottenere il massimo livello di flessibilità nella distribuzione e nella gestione delle applicazioni.

LASCIA UN COMMENTO

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

Questo sito usa Akismet per ridurre lo spam. Scopri come i tuoi dati vengono elaborati.

LEGGI ANCHE

Gli ultimi articoli