La parola contenitore si riferisce a una tecnologia di virtualizzazione leggera disponibile sui moderni kernel Linux, questa tecnologia è molto simile alle jail di FreeBSD.
Un kernel Linux precedente, non capace di container, è in grado di eseguire processi contemporaneamente. Alcuni attributi del sistema sono privati da elaborare, come l'ambiente di processo o la memoria di processo: solo il processo che possiede questi attributi e il sistema operativo stesso sono in grado di accedere a questi dati. (Ci sono molte lacune, come alcune implementazioni di ps , ma questo è essenzialmente vero!) Alcuni altri attributi sono condivisi tra i processi, come ad esempio il filesystem e le interfacce di rete.
Un kernel Linux moderno, capace di container, è in grado di gestire più attributi del sistema come dati privati associati a un processo o un gruppo di processi. Il contesto risultante è un contenitore e invece di eseguire un programma nei "contenitori iniziali" utilizzando il filesystem e le interfacce di rete inizializzate dal sistema operativo, è possibile eseguire processi in altri contenitori, in modo che vedano un diverso filesystem e un diverso elenco di interfacce di rete. Pertanto, due processi in esecuzione in contenitori distinti condividono realmente il kernel. Forse hai familiarità con il comando chroot che può eseguire un processo in una gerarchia di file distinta, i contenitori portano l'idea un passo avanti.
Naturalmente, questa è solo una spiegazione molto approssimativa, ma spero che aiuti a chiarire l'idea di cosa siano i contenitori. Ora, a cosa servono?
Un'interfaccia popolare per le capacità del contenitore dei kernel Linux è implementata da docker, un'utilità della riga di comando che può essere utilizzata per produrre artefatti che rappresentano file system ( immagini docker ) ed eseguire processi in contenitori in cui questi file system sono accessibili. Questa suite di software è anche in grado di creare sistemi di rete virtuale ad hoc per consentire a diversi contenitori di comunicare su una rete privata.
Le tecnologie basate su container sono convenienti per:
- Descrivere distribuzioni complesse scalabili .
- Fornire agli sviluppatori di applicazioni un ambiente molto simile all'ambiente di produzione.
- Implementa un modello di server immutabile, poiché gli artefatti software in genere descrivono un sistema operativo completo, non solo un pacchetto applicativo.
(Se hai familiarità con altre tecnologie di virtualizzazione come Virtual Box, potresti notare che queste tecnologie possono anche affrontare convenientemente i tre punti sopra. Oggi, c'è un piccolo spettro di tecnologie di virtualizzazione e possiamo confrontare la questione della loro popolarità in alcuni contesti con la popolarità dei linguaggi informatici: dipende probabilmente dai meriti tecnici di ogni singola soluzione, ma anche da molti fattori che etichetterò semplicemente "possibilità".)