Panoramica
Docker è un progetto della community open source, ma il termine è anche il nome dell'azienda principale che lo sostiene, Docker Inc. Inoltre si usa con riferimento agli strumenti che l'azienda supporta formalmente. Il fatto che le tecnologie e l'azienda condividano lo stesso nome può creare confusione.
Ecco una breve spiegazione:
- Il software IT "Docker" è una tecnologia di containerizzazione pensata per la creazione e l'utilizzo dei container Linux®.
- La community Docker open source si impegna per migliorare queste tecnologie a vantaggio di tutti gli utenti.
- L'azienda, Docker Inc., si avvale del lavoro della community Docker, ne incrementa la sicurezza e ricondivide tali progressi con l'intera community. Inoltre, supporta le tecnologie migliorate e potenziate per i clienti enterprise.
Con Docker, puoi trattare i container come macchine virtuali modulari estremamente leggere. E questi container offrono un'ottima flessibilità di creazione, distribuzione, copia e spostamento da un ambiente all'altro, al fine di ottimizzare le app per il cloud.
Come funziona Docker?
La tecnologia Docker si avvale del kernel Linux e delle funzionalità del kernel, come Cgroups e gli spazi dei nomi, per isolare i processi in modo da poterli eseguire in maniera indipendente. La finalità dei container è proprio eseguire più processi e app in maniera indipendente, per fare un uso migliore dell'infrastruttura, mantenendo al contempo la sicurezza che contraddistingue i sistemi separati.
Gli strumenti per i container, incluso Docker, offrono un modello di deployment basato su immagini, che semplifica la condivisione di un'applicazione, o di una serie di servizi, con tutte le relative dipendenze tra i vari ambienti. Inoltre Docker automatizza il deployment dell'applicazione, o della serie di processi che compongono un'app, all'interno dell'ambiente containerizzato.
Questi strumenti basati sui container Linux, che rendono Docker unico e intuitivo, offrono agli utenti un accesso senza precedenti alle app, la possibilità di eseguire deployment rapidi e il controllo sulle versioni e sulla loro distribuzione.
Confronto tra Docker e container Linux: c'è una differenza?
Nonostante talvolta vengano confusi, Docker non è un container Linux tradizionale. Inizialmente, la tecnologia Docker si basava sulla tecnologia LXC, che la maggior parte delle persone associa ai container Linux "tradizionali", ma ormai si è allontanata da quella dipendenza. LXC era utile per la virtualizzazione leggera, ma non offriva un'esperienza ottimale agli utenti o agli sviluppatori. La tecnologia Docker offre molto più della possibilità di eseguire container: semplifica anche il processo di creazione e consolidamento dei container, l'invio delle immagini e il controllo delle versioni delle immagini, tra le altre cose.
I container Linux tradizionali si avvalgono di un sistema di inizializzazione in grado di gestire più processi, il che fa sì che intere applicazioni possano essere eseguite come una sola. La tecnologia Docker favorisce la suddivisione delle applicazioni nei singoli processi che le compongono e offre gli strumenti per farlo. Questo approccio granulare ha i suoi vantaggi.
Vantaggi dei container Docker
Modularità
L'approccio Docker alla containerizzazione si concentra sulla capacità di "smontare" una parte di un'applicazione per aggiornarla o ripararla, senza dover "smontare" l'intera app. Oltre a questo approccio basato sui microservizi, puoi condividere i processi tra più app proprio come avviene con la Service-Oriented Architecture (SOA).
Livelli e controllo della versione delle Docker images
Ogni file immagine Docker è composto da più livelli combinati in una singola immagine. Quando l'immagine cambia, si crea un livello. Ogni volta che un utente specifica un comando, ad esempio di esecuzione o di copia, viene creato un nuovo livello.
Docker riutilizza questi livelli per la creazione di nuovi container, accelerando così il processo di creazione. Le modifiche intermedie vengono condivise tra le immagini, migliorando ulteriormente la velocità, la dimensione e l'efficienza. Un altro elemento intrinseco della creazione di livelli è il controllo della versione: a ogni nuova modifica, puoi avvalerti di un registro delle modifiche integrato che ti offre pieno controllo sulle immagini dei container.
Rollback
Probabilmente l'aspetto più interessante della creazione di livelli è il rollback. Ogni immagine presenta dei livelli. Non ti piace l'attuale iterazione di un'immagine? Puoi ripristinarla alla versione precedente. Ciò consente uno sviluppo agile e aiuta a ottenere l'integrazione e il deployment continui (CI/CD).
Deployment rapido
In passato, la configurazione, l'esecuzione e il provisioning di un nuovo hardware richiedevano giorni, con un impegno gravoso in termini economici e di risorse. I container basati su Docker possono ridurre il tempo di deployment a pochi secondi. Creando un container per ciascun processo, puoi condividere rapidamente tali processi con nuove app. E, non essendo necessario l'avvio del sistema operativo per aggiungere o spostare un container, i tempi di deployment si riducono notevolmente. Oltre al taglio dei tempi di deployment, puoi creare ed eliminare in modo facile ed economico e senza alcun timore i dati creati dai container.
Insomma, la tecnologia Docker è un approccio basato su microservizi più granulare e controllabile, che attribuisce maggiore valore all'efficienza.
Esistono limitazioni all'uso di Docker?
Docker, da solo, è in grado di gestire singoli container. Quando si iniziano a utilizzare sempre più container e app containerizzate, suddivisi in centinaia di pezzi, la gestione e l'orchestrazione possono diventare difficili. Prima o poi, avrai bisogno di fare un passo indietro e raggruppare i container per l'erogazione dei servizi (reti, sicurezza, telemetria e altri) tra tutti i container. Ed è qui che entra in gioco Kubernetes.
Con Docker, non ti avvali delle stesse funzionalità simil-UNIX che ti offrono i container Linux tradizionali, tra cui la possibilità di utilizzare processi come cron o syslog all'interno del container, in concomitanza con l'app. Vi sono anche limitazioni su aspetti come la ripulitura dei processi nipoti una volta conclusi i processi figli, un aspetto che i container Linux tradizionali gestiscono in maniera intrinseca. È possibile ovviare a queste problematiche modificando il file di configurazione e impostando queste funzionalità sin dall'inizio, anche se potrebbe non essere chiaro in un primo momento.
Inoltre, ci sono altri dispositivi e sottosistemi Linux senza spazio dei nomi, tra cui i dispositivi SELinux, Cgroups e /dev/sd*. Ciò significa che se l'autore di un attacco ottiene il controllo su questi sottosistemi, l'host è compromesso. Lo svantaggio di questi sottosistemi leggeri risiede nella vulnerabilità creata nel momento in cui il kernel dell'host viene condiviso con i container. Ciò non si verifica nel caso delle macchine virtuali, che sono molto più isolate dal sistema host.
Anche il daemon Docker può essere motivo di preoccupazione sotto il profilo della sicurezza. Per utilizzare ed eseguire container Docker, è molto probabile che utilizzi il daemon Docker, un runtime permanente per i container. Il daemon Docker richiede privilegi root, pertanto bisogna prestare particolare attenzione a chi accede a questo processo e a dove il processo risiede. Ad esempio, un daemon locale presenta una superficie di attacco più limitata rispetto a uno che si trova in una posizione più accessibile al pubblico, come un web server.
I 10 fatti principali che ogni leader cloud deve conoscere su Kubernetes e sui container
Scarica l'analisi per avere accesso a una guida approfondita sull'adozione di Kubernetes.