Che cos’è e a cosa serve un Container in informatica

Che cos’è e a cosa serve un Container in informatica

Un container è un ambiente software in grado di eseguire e isolare dall’esterno l’esecuzione di processi e applicazioni. Questo ambiente di lavoro è leggero, rapido nell’avvio e nello spegnimento, facilmente modificabile in base alle necessità e altamente portatile. Un software container ha dunque l’obiettivo dello sviluppo di un contenitore facilmente trasferibile che permetta l’esecuzione di una o più applicazioni al suo interno. La separazione data da questo involucro permette alle applicazioni eseguite al suo interno di svolgere i loro compiti in maniera sicura e senza che si debbano preoccupare dell’ambiente esterno.

La creazione di indipendenza tra il software e l’hardware o più in generale, l’indipendenza tra strati a diversi livelli, non è un concetto nuovo. Per esempio si pensi alle macchine virtuali, all’architettura software a strati e al modello OSI. E’ un obiettivo che si è sempre perseguito perchè i vantaggi di una architettura sviluppata a strati sono enormi: sviluppo indipendente dei diversi strati, maggiore sicurezza, interazioni semplici e dirette tra diversi livelli, facili interventi e manutenzione di piccole porzioni del software, etc. Il modello dei container è riuscito a portare tutti questi vantaggi a livello applicativo.

Che cos'è e a cosa serve un Container in informatica

Osservando le motivazioni che hanno portato all’evoluzione del modello dei container, si nota subito il profondo legame con l’ambiente lavorativo. Ogni cambiamento del modello è sempre stato apportato per motivazioni legate alla sicurezza dello sviluppo di software, oppure per migliorare la distribuzione di applicazioni o per ridurre le spese negli ambienti di sviluppo. Infatti, sono state innumerevoli le aziende che hanno prodotto la propria versione del modello proprio perchè ognuna di queste cercava di portare nel proprio ambiente di sviluppo i vantaggi dei container.

Caratteristiche dei Software Container

Lo scopo principale del modello dei software container è la creazione di un ambiente di esecuzione personalizzato, indipendente e isolato da tutto il resto. Quindi, in termini comuni, un container lo si può definire come un ambiente di esecuzione che permette di eseguire processi e applicazioni in
maniera isolata dal resto del mondo. Da un punto di vista più tecnico e
informatico invece, un container è una istanza runtime di un tipo particolare di immagine software. Questa immagine è un pacchetto eseguibile, leggero e autonomo che include tutto quello di cui c’è bisogno per eseguire del software. Diversamente dalle macchine virtuali, le quali virtualizzano l’intera infrastruttura fisica (processore, memorie, connessioni di rete, etc), un container attiva una istanza virtuale solo dello spazio utente, cioè dell’ambiente di esecuzione a livello applicativo. Quindi i container si possono definire anche come spazi utente, isolati gli uni dagli altri e in esecuzione sul sistema operativo di un calcolatore.

Quando si crea un nuovo container, bisogna assegnargli un certo contesto, cioè bisogna indicare un percorso ad una o più cartelle nelle quali saranno contenuti i file che si vogliono utilizzare e che potrebbero essere utili alla applicazione da eseguire al suo interno (si può indicare anche una cartella vuota o una cartella alla base di un albero già sviluppato e utilizzato da altri container). I file contenuti in quelle cartelle saranno utilizzati nel nuovo container e qualunque applicazione eseguita al suo interno sarà completamente autonoma nella loro gestione e potrà accedergli in completa libertà. Data questa capacità di personalizzare nel dettaglio l’ambiente di esecuzione, ogni container è tipicamente dedicato ad un contesto applicativo specifico e presenta quindi, caratteristiche specifiche per il tipo di applicazioni che verranno eseguite al suo interno. Questo significa che si possono ottenere tanti piccoli ambienti di esecuzione, con caratteristiche anche molto differenti tra loro, per l’esecuzione di tante piccole diverse applicazioni. E’ un concetto alla base di diverse tecniche odierne di sviluppo software; per esempio l’architettura a microservizi punta allo sviluppo di un sistema composto da tanti piccoli moduli indipendenti e interagenti tra di loro. Anche con il modello delle macchine virtuali si possono avere tanti diversi ambienti di esecuzione ma ad un costo molto maggiore: infatti, mentre le macchine virtuali utilizzano quantità elevate di risorse e necessitano di tempo per avviarsi, i container presentano una struttura molto più leggera e in grado di attivarsi più rapidamente.

Riassumendo, quando si vuole creare una nuova applicazione basata su container, il lavoro degli sviluppatori consiste tipicamente in due fasi:

  1. preparazione e personalizzazione dell’ambiente di esecuzione. In questa fase si scelgono o si creano le immagini desiderate in maniera da approntare un ambiente di lavoro adeguato. Si predispone inoltre, l’applicazione da eseguire una volta che il container sarà avviato;
  2. avviamento del container. Dalle immagini create precedentemente siamo in grado di avviare il container (o i container) con l’applicazione al suo interno. Tutte le modificate effettuate in ambiente runtime sono applicate solo al container e non si ripercuotono sulle immagini utilizzate.

Leggerezza, rapidità nell’avvio, autonomia e la capacità di creare un ambiente isolato, hanno portato al successo e alla ampia diffusione nel mondo dell’informatica del modello dei container.

Precedente Tecnologie di gestione e amministrazione dei Container in informatica Successivo Differenza tra software aperto e software proprietario in informatica

Lascia un commento