Docker

menu icon

Docker

Docker è una piattaforma open source per la creazione, l'implementazione e la gestione delle applicazioni containerizzate. Scopri di più sui container, come si confrontano con le VM e perché Docker è così ampiamente adottato e usato.

Cos'è Docker?

Docker è una piattaforma di containerizzazione open source. Consente agli sviluppatori di impacchettare le applicazioni in container - componenti eseguibili standardizzati che combinano il codice sorgente delle applicazioni con le librerie e le dipendenze del sistema operativo (SO) necessarie per eseguire tale codice in qualsiasi ambiente. I container semplificano la fornitura di applicazioni distribuite e sono diventati sempre più popolari man mano che le organizzazioni eseguono il passaggio a uno sviluppo nativo del cloud e ad ambienti multicloud ibridi.

Gli sviluppatori possono creare dei container senza Docker, ma la piattaforma rende più facile, semplice e sicuro creare, implementare e gestire dei container. Docker è essenzialmente un toolkit che permette agli sviluppatori di creare, implementare, eseguire, aggiornare e arrestare i container utilizzando dei semplici comandi e un'automazione che consente di risparmiare lavoro tramite un'unica API.

Docker si riferisce anche a Docker, Inc. (link esterno a IBM), la società che vende la versione commerciale di Docker, e al Docker open source project (link esterno a IBM), a cui contribuiscono Docker, Inc. e molte altre organizzazioni e persone.

Come funzionano i container e perché sono così diffusi

I container sono resi possibili dalle funzionalità di virtualizzazione e isolamento dei processi integrate nel kernel Linux. Queste funzionalità - come ad esempio gruppi di controllo (Cgroups) per l'allocazione delle risorse tra i processi e i namespace per limitare l'accesso o la visibilità di un processo in altre risorse o aree del sistema - consentono a più componenti applicativi di condividere le risorse di una singola istanza del sistema operativo host praticamente nello stesso modo in cui un hypervisor abilita più VM (virtual machine) a condividere CPU, memoria e altre risorse di un singolo server hardware.

Di conseguenza, la tecnologia di container offre tutte le funzionalità e i vantaggi delle VM - compresi l'isolamento delle applicazioni, una scalabilità efficiente in termini di costi e conveniente e l'eliminabilità - nonché importanti vantaggi aggiuntivi:

  • Peso più leggero: a differenza delle VM, i container non portano il payload di un intero hypervisor o di un'intera istanza del sistema operativo; includono solo i processi e le dipendenze del sistema operativo necessarie per eseguire il codice. Le dimensioni dei container sono misurate in megabyte (piuttosto che in gigabyte per alcune VM), utilizzano meglio la capacità hardware e hanno dei tempi di avvio più rapidi.
  • Maggiore efficienza delle risorse: con i container, puoi eseguire diverse volte tutte le copie di un'applicazione sullo stesso hardware che puoi utilizzando le VM. Questo può ridurre la spesa in cloud.
  • Aumento della produttività degli sviluppatori: rispetto alle VM, è possibile implementare, eseguire il provisioning e riavviare i container in modo più veloce e facile. Questo li rende ideali per l'utilizzo nelle pipeline CI/CD continuous integration e continuous delivery e più adatti per i team di sviluppo che adottano prassi Agile e DevOps.

Le aziende che utilizzano i container segnalano altri vantaggi, tra cui una maggiore qualità delle app, una risposta più rapida ai cambiamenti del mercato e tanto altro ancora. Scopri di più con questo strumento interattivo:

Scarica il report completo: Containers in the enterprise (PDF, 1.4MB)

Perché usare Docker?

Docker è così popolare oggi che i termini "Docker" e "container" sono utilizzati in modo interscambiabile. Eppure, le prime tecnologie correlate ai container erano disponibili da anni - se non decenni (link esterno a IBM) - prima che Docker venisse rilasciato al pubblico nel 2013.

In particolare, nel 2008, nel kernel Linux fu implementato LXC, LinuXC, abilitando completamente la virtualizzazione per una singola istanza di Linux. Sebbene LXC sia oggi ancora utilizzato, sono disponibili delle tecnologie più nuove che utilizzano il kernel Linux. Anche Ubuntu, un sistema operativo Linux moderno e open-source, fornisce questa funzionalità.

Docker ha migliorato le funzionalità di containerizzazione di Linux native con tecnologie che consentono:

  • Portatilità migliorata e senza soluzione di continuità: mentre i container LXC fanno spesso riferimento a configurazioni specifiche per la macchina, i container Docker sono eseguiti senza modifiche su qualsiasi desktop, data center o ambiente cloud.
  • Peso ancora più leggero e aggiornamenti più granulari: con LXC, più processi possono essere combinati in un singolo container. Con i container Docker, in ciascun container può essere eseguito solo un singolo processo. Questo consente di creare un'applicazione che può continuare la sua esecuzione mentre una delle sue parti viene resa inattiva per un aggiornamento o una riparazione.
  • Creazione dei container automatizzata: Docker può creare automaticamente un container in base al codice sorgente delle applicazioni.
  • Controllo delle versioni dei container: Docker può tracciare le versioni di un'immagine container, eseguire il rollback a versioni precedenti e tracciare chi ha creato una versione e come. Può anche caricare solo i delta tra una versione esistente e una nuova.
  • Riutilizzo dei container: i container esistenti possono essere utilizzati come immagini di base - essenzialmente come template per la creazione di nuovi container.
  • Librerie di container condivise: gli sviluppatori possono accedere a un registro open source contenente migliaia di container forniti dagli utenti.

Oggi la containerizzazione Docker funziona anche con Microsoft Windows Server. La maggior parte dei provider di servizi cloud offre inoltre dei servizi specifici per aiutare gli sviluppatori a creare, distribuire ed eseguire applicazioni di cui è stata eseguita la containerizzazione con Docker.

Per questi motivi, l'adozione di Docker è esplosa rapidamente e continua a crescere. Al momento della stesura del presente documento, Docker Inc. riferisce di 11 milioni di sviluppatori e 13 miliardi di download di immagini container ogni mese (link esterno a IBM).

Strumenti e termini di Docker

Alcuni degli strumenti e dei termini che incontrerai quando utilizzerai Docker includono:

DockerFile

Ogni container Docker inizia con un semplice file di testo contenente le istruzioni relative a come creare l'immagine container Docker. DockerFile automatizza il processo di creazione di immagini Docker. È essenzialmente un elenco di istruzioni CLI (command-line interface) che verrà eseguito dal motore Docker per assemblare l'immagine.

Immagini Docker

Le immagini Docker contengono il codice sorgente dell'applicazione eseguibile nonché tutti gli strumenti, le librerie e le dipendenze che di cui il codice dell'applicazione ha bisogno per l'esecuzione come container. Quando esegui l'immagine Docker, diventa un'istanza (o più istanze) del container.

È possibile creare un'immagine Docker da zero, ma la maggior parte degli sviluppatori le estrae da repository comuni. Da una singola immagine di base è possibile creare più immagini Docker che condivideranno gli elementi comuni del loro stack.

Le immagini Docker sono formate da livelli e ogni livello corrisponde a una versione dell'immagine. Ogni qualvolta uno sviluppatore apporta modifiche all'immagine, viene creato un nuovo livello superiore che sostituisce quello precedente come versione corrente dell'immagine. I livelli precedenti vengono salvati per il rollback o per essere riutilizzati in altri progetti.

Ogni volta che viene creato un container da un'immagine Docker, viene creato un ulteriore nuovo livello denominato livello container. Le modifiche apportate al container, come l'aggiunta o l'eliminazione di file, vengono salvate solo nel livello container ed esistono solo mentre il container è in esecuzione. Questo processo di creazione di immagini iterativo consente una maggiore efficienza complessiva in quanto da solo una singola immagine di base possono essere eseguite più istanze container dal vivo che, quando ciò avviene, sfruttano uno stack comune.

Container Docker

I container Docker sono le istanze dal vivo in esecuzione di immagini Docker. Mentre le immagini Docker sono file di sola lettura, i container sono del contenuto eseguibile dal vivo e temporaneo. Gli utenti possono interagirvi e gli amministratori possono regolarne le impostazioni e le condizioni utilizzando i comandi docker.

Docker Hub

Docker Hub (link esterno a IBM) è il repository pubblico di immagini Docker che si definisce "la più grande libreria e community al mondo di immagini container". Contiene più di 100.000 immagini container provenienti da vendor di software commerciale, progetti open-source e singoli sviluppatori. Include immagini che sono state prodotte da Docker, Inc., immagini certificate appartenenti al Docker Trusted Registry e molte migliaia di altre immagini.

Tutti gli utenti di Docker Hub possono condividere a piacimento le loro immagini. Possono anche scaricare immagini di base predefinite dal filesystem di Docker da utilizzare come punto di partenza per qualsiasi progetto di containerizzazione.

Daemon Docker

Il daemon Docker è un servizio che viene eseguito sul tuo sistema operativo, come Microsoft Windows, Apple MacOS o iOS. Questo servizio crea e gestisce le tue immagini Docker per tuo conto utilizzando i comandi dal client, agendo come centro di controllo della tua implementazione di Docker.

Registro Docker

Un registro Docker è un sistema di storage e distribuzione open-source scalabile per immagini Docker. Il registro ti consente di tracciare le versioni delle immagini nei repository, utilizzando l'assegnazione di tag per l'identificazione. Tale operazione viene eseguita utilizzando git, uno strumento di controllo delle versioni.

Implementazione e orchestrazione di Docker

Se stai eseguendo solo pochi container, è abbastanza semplice gestire la tua applicazione nel motore Docker, il runtime di fatto del settore. Se però la tua implementazione comprende migliaia di container e centinaia di servizi, è quasi impossibile gestire un flusso di lavoro del genere senza l'aiuto di questi strumenti appositamente creati.

Docker Compose

Se stai creando un'applicazione dai processi in più container tutti presenti sullo stesso host, puoi utilizzare Docker Compose per gestire l'architettura dell'applicazione. Docker Compose crea un file YAML che specifica quali servizi sono inclusi nell'applicazione e può implementare ed eseguire i container con un singolo comando. Utilizzando Docker Compose, puoi anche definire dei volumi persistenti per lo storage, specificare dei nodi di base e documentare e configurare le dipendenze del servizio.

Kubernetes

Per monitorare e gestire i cicli di vita dei container in ambienti più complessi, avrai bisogno di adottare uno strumento di orchestrazione dei container. Sebbene Docker includa un suo strumento di orchestrazione (denominato Docker Swarm), la maggior parte degli sviluppatori sceglie invece Kubernetes.

Kubernetes è una piattaforma di orchestrazione dei container open source derivata da un progetto sviluppato per uso interno presso Google. Kubernetes pianifica e automatizza le attività che sono parte integrante della gestione delle architetture basate sui container compresi, tra l'altro, l'implementazione dei container, gli aggiornamenti, il rilevamento di servizi, il provisioning di storage, il bilanciamento del carico e il monitoraggio dello stato di integrità. Inoltre, l'ecosistema open source di strumenti per Kubernetes - tra cui Istio e Knative—consente alle organizzazioni di implementare una Platform-as-a-Service (PaaS) ad elevata produttività per le applicazioni containerizzate e un accesso più rapido al serverless computing.

Per un approfondimento di Kubernetes, guarda il video "Kubernetes Explained":

Kubernetes Explained (10:59)

Docker e IBM Cloud

Una piattaforma di container aziendale fornisce l'orchestrazione su più cloud pubblici e privati per unificare i tuoi ambienti per un miglioramento delle prestazioni di business e delle prestazioni operative. È un componente chiave di una strategia di cloud ibrido aperto che consente di evitare condizioni di vincolo imposto dal vendor e permette di creare ed eseguire carichi di lavoro ovunque in modo coerente e di ottimizzare e modernizzare tutto il tuo IT.

Passa alla fase successiva:

  • Implementa dei cluster Kubernetes altamente disponibili e completamente gestiti con Red Hat OpenShift on IBM Cloud, un servizio OpenShift gestito che sfrutta la scalabilità e la sicurezza aziendale di IBM Cloud per automatizzare gli aggiornamenti, la scalabilità e il provisioning.
  • Implementa ed esegui le app su ambienti on-premises, di edge computing e di cloud pubblico da qualsiasi vendor con IBM Cloud Satellite, una soluzione cloud distribuita gestita
  • Semplifica e consolida i tuoi data lake implementando senza soluzione di continuità lo storage aziendale abilitato ai container su ambienti on-premises e di cloud pubblico con le soluzioni di storage su cloud ibrido IBM;
  • Rendi semplice la complessa gestione dell'IT ibrido con IBM Cloud managed services.

Inizia con un account IBM Cloud oggi stesso.