Red Hat ti dà il benvenuto

Visualizza gli eventi nella tua zona

Scopri le novità dei clienti Red Hat di tutto il mondo:

Container

Che cos'è un container Linux?

Un container Linux® è un insieme di processi isolati dal resto del sistema, che eseguono un'immagine distinta contenente tutti i file necessari per supportare tali processi. Offrendo un'immagine che contiene tutte le dipendenze di un'applicazione, i container offrono portabilità e coerenza nel passaggio dallo sviluppo al testing, fino alla produzione.

Per chiarire ulteriormente il concetto, immagina di sviluppare un'applicazione. Lavori su un laptop, in un ambiente con una determinata configurazione. Altri sviluppatori potrebbero utilizzare configurazioni leggermente diverse. L'applicazione che stai sviluppando è dipendente da tale configurazione e da file specifici. Nel frattempo, la tua azienda presenta ambienti di test e produzione standardizzati, con le proprie configurazioni e il proprio set di file di supporto. Desideri emulare tali ambienti il più possibile localmente, ma senza tutti i costi derivanti dalla creazione di nuovi ambienti server. A questo punto, è necessario trovare un modo semplice per far funzionare la tua app in questi ambienti, superare i controlli qualità e ottenere il deployment, senza dover riscrivere l'applicazione e correggere errori. In questo caso, i container sono la soluzione ideale. Il container che ospita la tua applicazione presenta le configurazioni (e i file) necessari affinché tu possa passare dallo sviluppo al test e alla produzione, senza alcun effetto negativo. I container consentono di prevenire problemi.

Questo semplice esempio dimostra come i container Linux possano risolvere problemi di diverso tipo, in presenza di processi che richiedono il massimo della portabilità, della configurabilità e dell'isolamento. Indipendentemente dall'infrastruttura (on-premise, cloud o ibrida), i container rispondono alle tue esigenze.

Per certi versi, sono simili alla virtualizzazione,

ma con alcune differenze. In sintesi:

  • La virtualizzazione consente di eseguire più sistemi operativi contemporaneamente in un singolo sistema.
  • I container condividono lo stesso kernel del sistema operativo e isolano i processi applicativi dal resto del sistema.

Cosa significa? Innanzitutto, avere svariati sistemi operativi in funzione su un hypervisor, il software che consente la virtualizzazione, non è una soluzione leggera quanto i container. Disponendo di risorse limitate con capacità limitate, sono necessarie app leggere che possano essere distribuite su vasta scala. I container Linux vengono eseguiti da un unico sistema operativo, condiviso tra tutti i tuoi container. In questo modo, avrai applicazioni e servizi leggeri, in grado di essere eseguiti contemporaneamente.


Breve storia dei container

Una soluzione simile ai container, nota come FreeBSD jail, è apparsa per la prima volta nel 2000. Tale tecnologia consente la partizione di un sistema FreeBSD in svariati sottosistemi, denominati jail. I jail erano ambienti sicuri, che gli amministratori di sistemi potevano condividere con altri utenti all'interno o all'esterno di un'organizzazione. Lo scopo era creare processi in un ambiente modificato di tipo chroot , in cui l'accesso al filesystem, al networking e agli utenti fosse virtualizzato, in modo che nulla potesse sfuggire e compromettere l'intero sistema. I jail erano limitati in termini di implementazione e furono ben presto individuati metodi sostitutivi.

Tuttavia il concetto era interessante.

Nel 2001, all'interno di Linux è stato implementato per la prima volta un ambiente isolato, tramite il progetto VServer di Jacques Gélinas. Secondo Gélinas, si trattava di un tentativo di eseguire "più server Linux generici [sic] in un singolo sistema fisico, con livelli elevati di indipendenza e sicurezza". Una volta gettate le basi per la creazione di più spazi utente controllati in Linux, sono stati gradualmente aggiunti ulteriori componenti che hanno permesso di dare vita agli attuali container Linux.

I container: una soluzione pratica

Ben presto, sono state aggiunte altre tecnologie, al fine di trasformare questo approccio isolato in una realtà concreta. I gruppi di controllo (cgroups) sono una caratteristica del kernel che consente di controllare e limitare l'utilizzo delle risorse da parte di un processo o gruppo di processi. I cgroups utilizzano systemd, un sistema di inizializzazione che configura lo spazio utente e ne gestisce i processi, per aumentare il controllo di tali processi isolati. Oltre ad aumentare il controllo complessivo da parte di Linux, queste due tecnologie rappresentavano il framework con cui mantenere separati gli ambienti.

Il passo successivo verso la realizzazione dei container è stato possibile grazie ai progressi compiuti in materia di spazi dei nomi utente. Gli spazi dei nomi utente "consentono di mappare ID di utenti e gruppi in base allo spazio dei nomi. Parlando di container, questo significa che utenti e gruppi possono disporre di privilegi per determinate operazioni all'interno di un container, ma non all'esterno del container". Il concetto è simile a quello del jail, ma con un livello di sicurezza superiore garantito da un ulteriore isolamento dei processi, anziché dal concetto di ambiente modificato che sta alla base del jail.

Il progetto LXC (Linux Containers) ha quindi integrato tali progressi aggiungendo utilissimi strumenti, modelli, librerie e vincoli al linguaggio, per migliorare l'esperienza dell'utente nell'utilizzo dei container.

L'introduzione di Docker

Nel 2008 è entrato in scena Docker (tramite dotCloud), con la tecnologia container omonima. La tecnologia Docker arricchisce il progetto LXC con strumenti per sviluppatori ulteriormente migliorati, aumentando l'intuitività dei container. Docker è attualmente il progetto open source e il metodo meglio conosciuto per il deployment e la gestione dei container Linux.

Oggi Red Hat e Docker, insieme a molti altri, sono membri della Open Container Initiative (OCI), che punta alla definizione di standard settoriali aperti per le tecnologie container.


Standardizzazione e Open Container Initiative

La Open Container Initiative (OCI), che fa parte di Linux Foundation, è nata nel 2015 "con il preciso intento di creare standard settoriali aperti per il runtime e i formati dei container". Questo progetto ha l'obiettivo di identificare e delineare le specifiche. Attualmente sono disponibili due specifiche, denominate Runtime e Image.

La specifica Runtime definisce gli standard aperti per un bundle del file system, la struttura dei file di supporto e gli artefatti all'interno di un container, oltre alla modalità di decompressione di tale bundle da parte di un runtime compatibile. Questa specifica ha sostanzialmente lo scopo di assicurare che i container funzionino come previsto e che tutte le risorse di supporto siano disponibili nelle posizioni corrette.

La specifica Image di OCI determina come devono essere create le immagini dei container. Il processo di creazione genera "un manifest dell'immagine, una serializzazione del file system e una configurazione dell'immagine".

Tali specifiche si integrano a vicenda per definire il contenuto dell'immagine di un container e le relative dipendenze, gli ambienti, gli argomenti e gli altri parametri necessari per la corretta esecuzione dell'immagine.


I container sono un'astrazione

I container Linux rappresentano un passo avanti nella modalità di sviluppo, deployment e gestione delle applicazioni. Le immagini dei container Linux garantiscono portabilità e controllo delle versioni, per assicurare che i componenti funzionanti sul laptop dello sviluppatore funzioneranno anche nell'ambiente di produzione.

Un container Linux in esecuzione utilizza le risorse in modo meno intensivo, rispetto a una macchina virtuale, ma mantiene un livello elevato di isolamento dell'applicazione e può essere gestito più facilmente nell'ambito dell'applicazione complessiva.

I container Linux servono a garantire efficienza, indipendentemente dal software utilizzato. Inoltre, è necessario ricordare che i container, oltre a contenere singole applicazioni, possono essere utilizzati per ospitare parti di un'applicazione o di servizi. Un container ospita la logica dell'applicazione, un runtime e le dipendenze, pertanto può includere tutto il necessario; tuttavia è possibile creare un'applicazione formata da più container che operano come microservizi.

Scopri gli altri vantaggi offerti dai container