Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial
  • Lezione 3 di 9
  • livello intermedio
Indice lezioni

Differenze tra Docker ed LXC

Se in passato, Docker faceva uso di LXC come driver di esecuzione dei propri container, oggi non è più così. Scopriamo quindi le differenze.
Se in passato, Docker faceva uso di LXC come driver di esecuzione dei propri container, oggi non è più così. Scopriamo quindi le differenze.
Link copiato negli appunti

Nell'ecosistema Linux è possibile eseguire ambienti virtuali isolati (container) utilizzando gli strumenti messi a disposizione dal sistema operativo stesso. In passato, tale compito è stato assolto dal progetto OpenVZ. Più di recente il kernel Linux ha offerto uno strumento integrato: i Linux Containers o LXC, uno strumento di virtualizzazione disponibile in ogni ambiente in cui si esegue Linux. LXC fa uso degli strumenti cgroups e namespaces già visti nella lezione precedente per implementare un ambiente isolato nel quale eseguire le applicazioni di interesse.

I progetti Docker ed LXC sono stati strettamente legati in passato. In particolare, Docker faceva uso di LXC come driver di esecuzione dei propri container. Tuttavia, questa caratteristica venne successivamente rimossa (già dalla versione 1.10) in favore di un runtime integrato in Docker (libcontainer) scritto in linguaggio Go. Di fatto, libcontainer funge da interfaccia comune per la gestione di container attraverso l'uso dell'infrastruttura propria del sistema operativo: su Linux, mediante namespaces, cgroups, capabilities, ecc; su Windows, grazie allo Host Compute Service (nel caso di container Windows).

La principale differenza tra Docker ed LXC è quindi facilmente intuibile: se da una parte LXC è una tecnologia che permette l'esecuzione di container, dall'altra Docker è qualcosa di più, le cui finalità contemplano non soltanto la mera esecuzione ma anche la distribuzione e più in generale la gestione dell'intero ciclo di vita dei container stessi.

I container in Docker vengono distribuiti sotto forma di immagini. Ciò consente di racchiudere tutti gli elementi necessari per l'esecuzione dell'ambiente virtuale in un unico oggetto, facilmente portabile da un host ad un altro. La portabilità è proprio una delle caratteristiche di spicco di Docker. Spesso infatti si ricorre ad un container Docker per l'esecuzione della propria applicazione, in quanto questo permette di migrare la stessa da un ambiente ad un altro con estrema facilità, senza il rischio di incorrere in problemi di incompatbilità con la piattaforma sottostante.

Inoltre, le immagini Docker supportano il versioning: è possibile quindi tenere traccia delle varie versioni di un'applicazione distribuita mediante container Docker e tutto ciò rende più semplice i processi di update (aggiornamento ad una versione successiva) e downgrade (ripristino di una versione precedente).

Docker è stato concepito per favorire il riutilizzo di componenti già esistenti, un principio sempre valido in generale nella progettazione di infrastrutture software. Nel caso specifico, le immagini Docker sono strutturate a "livelli" (Layers): è possibile creare una nuova immagine partendo da una esistente semplicemente aggiungendo un nuovo livello. I file presenti nel livello più recente oscurano quelli di pari nome e percorso presenti in livelli precedenti. Questa caratteristica permette di creare nuove immagini molto rapidamente, basandosi su immagini già esistenti e liberamente scaricabili.

Esistono infatti milioni di immagini Docker liberamente scaricabili da un registro pubblico (disponibile qui), pronte per essere eseguite o essere utilizzate come immagini di base per le proprie applicazioni.

Oltre alle caratteristiche legate alla gestione delle immagini, Docker offre degli strumenti avanzati per l'esecuzione dei container. Ad esempio, Docker dispone di uno strumento di clustering integrato: Docker Swarm. Con Docker Swarm è possibile gestire un cluster di macchine sulle quali eseguire un pool di container Docker. Swarm mette a disposizione degli strumenti per la gestione della ridondanza (quante "copie" di un container devono essere eseguite e su quali nodi), bilanciamento del carico, fail-over (se un nodo del cluster non funziona, i container che eseguiva verranno automaticamente migrati su altri nodi), ecc.

Queste ed altre caratteristiche di Docker verranno approfondite nelle lezioni successive. Tuttavia dovrebbe essere ormai chiaro quali siano gli scopi e gli ambiti di applicabilità del progetto Docker e come esso si ponga ben al di sopra di un semplice strumento di esecuzione di container.

Ti consigliamo anche