Container

Cos'è un container Linux?

Un container Linux® è un insieme di uno o più processi isolati dal resto del sistema. Poiché tutti i file necessari per eseguire tali processi vengono forniti da un'immagine distinta, i container Linux sono portabili e coerenti in tutti gli ambienti, dallo sviluppo ai test e infine alla produzione. Questo li rende molto più veloci, rispetto ai tradizionali flussi di sviluppo che dipendono dalla replica degli ambienti di test tradizionali.

Cos'è un container

Immagina di sviluppare un'applicazione. Lavori su un portatile e il tuo ambiente presenta una configurazione specifica. Altri sviluppatori potrebbero utilizzare configurazioni leggermente diverse. L'applicazione che stai sviluppando dipende da tale configurazione, oltre che da specifiche librerie, dipendenze e file. Al tempo stesso, gli ambienti di sviluppo e produzione della tua azienda presentano le proprie configurazioni standardizzate con set di file di supporto specifici. 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 librerie, le dipendenze e i file necessari, il che ti consente di passare fino all'ambiente di produzione, senza alcun impatto negativo. Infatti, il contenuto di un'immagine container può essere paragonato all'installazione di una distribuzione Linux, poiché include pacchetti RPM, file di configurazione e così via. La distribuzione di un'immagine container è, tuttavia, molto più semplice dell'installazione di nuove copie dei sistemi operativi. 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. L'obiettivo dei container Linux è soddisfare le esigenze aziendali mano a mano che si presentano attraverso uno sviluppo più efficiente. In alcuni casi, come nel flusso di dati in tempo reale di Apache Kafka, i container sono fondamentali e rappresentano l'unico modo per assicurare la scalabilità necessaria all'applicazione. Indipendentemente dall'infrastruttura (on-premise, cloud o ibrida), i container rispondono alle tue esigenze. Scegliere la piattaforma per container ideale è importante tanto quanto i container stessi.

Non si tratta, quindi, di virtualizzazione?

Non esattamente. Questi due approcci possono essere considerati complementari, ma esistono alcune differenze. In sintesi:

  • La virtualizzazione consente di eseguire più sistemi operativi (Windows o Linux) contemporaneamente su un singolo sistema hardware.
  • I container condividono lo stesso kernel del sistema operativo e isolano i processi applicativi dal resto del sistema. Ad esempio, i sistemi ARM Linux eseguono container ARM Linux, i sistemi x86 Linux eseguono container x86 Linux, i sistemi x86 Windows eseguono container x86 Windows. I container Linux offrono una notevole portabilità, ma devono essere compatibili con il sistema sottostante.

virtualizzazione vs container

Cosa significa? La virtualizzazione utilizza un hypervisor per emulare l'hardware che consente di eseguire più sistemi operativi in modalità affiancata, il che non è ottimale come l'uso dei container. Disponendo di risorse limitate con capacità limitate, sono necessarie app leggere che possano essere distribuite su vasta scala. I container Linux vengono eseguiti in modo nativo nel sistema operativo, condiviso tra tutti i container, pertanto app e servizi rimangono leggeri e vengono eseguiti velocemente in parallelo.

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. Rispetto alle macchine virtuali, un container Linux in esecuzione utilizza le risorse in modo meno intensivo, presenta un'interfaccia standard (avvio, arresto, variabili di ambiente e così via), garantisce l'isolamento delle applicazioni ed è più facile da gestire nell'ambito di un'applicazione più ampia (più container). Inoltre, queste applicazioni con più container possono essere orchestrate fra più cloud.


Breve storia dei container

Evoluzione del pulsante di download container

I container non sono nati in Linux, nel mondo open source, ma le migliori idee possono essere prese in prestito, modificate e migliorate. E questo vale anche per i container.

L'idea alla base di quella che ora chiamiamo tecnologia container, nota come jail FreeBSD è 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 presentavano limiti a livello implementativo 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à consolidata. 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 spazio dei nomi dei kernel. Utilizzare gli spazi dei nomi del kernel ha reso possibile virtualizzare qualsiasi cosa all'interno del kernel Linux, dagli ID di processo ai nomi di rete. Uno di quelli più recenti, lo spazio dei nomi utente, "consente il mapping di ID utente e ID gruppi a livello di 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 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. LXC facilita l'avvio dei container da parte degli utenti, con una semplice interfaccia da riga di comando.

L'introduzione di Docker

Nel 2008 è entrato in scena Docker (tramite dotCloud) con la tecnologia container omonima. La tecnologia docker ha aggiunto molti nuovi concetti e strumenti: una semplice interfaccia da riga di comando per eseguire e creare nuove immagini stratificate, un daemon server, una libreria di immagini container predefinite e il concetto di server registry. Tutte insieme, queste tecnologie consentivano agli utenti di creare velocemente nuovi container stratificati e condividerli facilmente con altri.

Red Hat ha saputo individuare le potenzialità della collaborazione in questo nuovo ecosistema e ha utilizzato la tecnologia sottostante per OpenShift Container Platform. Per evitare che un singolo fornitore controllasse una tecnologia tanto importante, Docker Inc. ha fornito molti dei componenti sottostanti a progetti open source gestiti dalla community (runc fa parte della Open Containers Initiative e containerd è stato spostato in CNCF).

Per garantire l'interoperabilità delle tecnologie container, sono stati definiti tre standard, ovvero le specifiche OCI Image, Distribution e Runtime. Insieme, queste specifiche consentono a progetti della community, prodotti commerciali e provider cloud di creare tecnologie container interoperabili: se esegui il push delle tue immagini personalizzate nel server registry di un provider di servizi cloud, hai bisogno che funzionino. Oggi Red Hat e Docker, insieme a molti altri, sono membri della Open Container Initiative (OCI) e stanno lavorando alla definizione di standard settoriali aperti per le tecnologie container.


Sicurezza dei container

I container sono molto diffusi, ma sono sicuri? I container devono garantire invulnerabilità a svariati componenti mobili. Occorre proteggere il flusso e l'applicazione container, l'infrastruttura e gli ambienti di deployment, e al contempo pianificare l'integrazione con le policy e gli strumenti per la sicurezza a livello enterprise. Sfrutta soluzioni sicure. Chiedi a Red Hat.


Chiedi a Red Hat.

Red Hat vanta una lunga storia di collaborazione con la community open source finalizzata a rendere le tecnologie sicure, stabili e affidabili. Garantire sicurezza è essenziale, così come supportare queste tecnologie. In questo, siamo al tuo fianco.

I container Red Hat sono una soluzione affidabile e comprovata. Red Hat ha la soluzione giusta per ogni esigenza: puoi chiederci di collaborare con i tuoi sviluppatori alla creazione di una piattaforma pensata per i container, eseguire la tua infrastruttura di container su uno dei migliori sistemi operativi o ottenere soluzioni di storage in grado di gestire gli elevati volumi di dati generati dai container.

Scopri altri vantaggi offerti dai container