Docker utilizza un'architettura client/server. Di seguito è riportata un'analisi dettagliata dei componenti principali associati a Docker, insieme ad altri termini e strumenti Docker.
Host Docker: un host Docker è una macchina fisica o virtuale con Linux (o un altro sistema operativo compatibile con Docker-Engine).
Docker Engine: si tratta di un'applicazione client/server che include il daemon Docker, un'API Docker che interagisce con il daemon e un'interfaccia della riga di comando (CLI) che si interfaccia con il daemon.
Daemon Docker: il daemon di Docker è un servizio che crea e gestisce immagini Docker utilizzando i comandi del client. Fondamentalmente, il daemon di Docker ha funzione di centro di controllo per l'implementazione del Docker.
Client Docker: il client Docker fornisce la CLI che accede all'API di Docker (un'API REST) per comunicare con il daemon di Docker tramite socket Unix o un'interfaccia di rete. Il client può essere collegato a un daemon in remoto, oppure uno sviluppatore può eseguire il daemon e il client sullo stesso sistema informatico.
Oggetti Docker: gli oggetti Docker sono i componenti di una implementazione Docker che aiutano a creare pacchetti e distribuire applicazioni. Includono immagini, container, reti, volumi, plug-in e altro ancora.
Container Docker: i container Docker sono le istanze attive in esecuzione delle immagini Docker. Mentre le immagini Docker sono file di sola lettura, i container sono contenuti attivi, effimeri ed eseguibili. Gli utenti possono interagire con loro e gli amministratori possono modificare le impostazioni e le condizioni utilizzando i comandi Docker.
Immagini Docker: le immagini Docker contengono il codice sorgente dell'applicazione eseguibile e tutti gli strumenti, le librerie e le dipendenze che il codice dell'applicazione deve eseguire come container. Quando uno sviluppatore esegue l'immagine Docker, questa diventa un'istanza (o più istanze) del container.
La creazione di immagini Docker da zero è possibile, ma la maggior parte degli sviluppatori le estrae da repository comuni. Gli sviluppatori possono creare più immagini Docker da una singola immagine di base, condividendo le caratteristiche comuni del proprio stack.
Le immagini Docker sono costituite da livelli, e ogni livello corrisponde a una versione dell'immagine. Ogni volta che uno sviluppatore apporta modifiche a un'immagine, viene creato un nuovo livello superiore e questo livello superiore sostituisce il livello superiore precedente come versione corrente dell'immagine. I livelli precedenti vengono salvati per i rollback o per essere utilizzati nuovamente in altri progetti.
Ogni volta che viene creato un container da un'immagine Docker, viene creato un nuovo livello, chiamato livello container. Le modifiche apportate al container, ad esempio l'aggiunta o l'eliminazione di file, vengono salvate nel livello container ed esistono solo quando il container è in esecuzione.
Questo processo iterativo di creazione di immagini aumenta l'efficienza complessiva in quanto è possibile eseguire più istanze di container attivi da una singola immagine di base. In questo caso, viene utilizzato uno stack comune.
Creazione di Docker: la creazione di Docker è un comando con strumenti e funzioni per la creazione di immagini Docker.
File Dockerfile: ogni container Docker inizia con un semplice file di testo contenente le istruzioni per la creazione dell'immagine del container Docker. Dockerfile automatizza il processo di creazione di immagini Docker. È fondamentalmente un elenco di istruzioni CLI che Docker Engine eseguirà per assemblare l'immagine. L'elenco dei comandi Docker è vasto ma standardizzato: le operazioni Docker funzionano allo stesso modo indipendentemente dal contenuto, dall'infrastruttura o da altre variabili di ambiente.
Documentazione di Docker: la documentazione di Docker, o documenti Docker, si riferisce alla libreria ufficiale di risorse, manuali e guide di Docker per la creazione di applicazioni containerizzate.
Docker Hub: Docker Hub6 è il repository pubblico di immagini Docker, che si autodefinisce la più grande libreria e community al mondo per le immagini container7. Contiene oltre 100.000 immagini di container provenienti da fornitori di software commerciali, progetti open source e singoli sviluppatori. Docker Hub include immagini prodotte da Docker, Inc., immagini certificate appartenenti al Docker Trusted Registry e migliaia di altre immagini.
Tutti gli utenti di Docker Hub possono condividere liberamente le proprie immagini. Possono inoltre scaricare immagini base predefinite dal filesystem di Docker come punto di partenza per qualsiasi progetto di containerizzazione.
Esistono altri archivi di immagini, tra cuiGitHub8. GitHub è un servizio di hosting di repository noto per gli strumenti di sviluppo di applicazioni e come piattaforma che promuove collaborazione e comunicazione. Gli utenti di Docker Hub possono creare un repository (repo) in grado di contenere numerose immagini. Il repository può essere pubblico o privato e collegato a un account GitHub o BitBucket.
Docker Desktop: Docker Desktop è un'applicazione per Mac o Windows che include Docker Engine, client Docker CLI, Docker Compose, Kubernetes e altri ancora. Fornisce inoltre l'accesso a Docker Hub.
Registro Docker: un registro Docker è un sistema scalabile di storage e di distribuzione open-source per immagini Docker. Consente agli sviluppatori di tenere traccia delle versioni delle immagini nei repository utilizzando l'assegnazione di tag per l'identificazione. Questo monitoraggio e identificazione vengono eseguiti utilizzando Git, uno strumento di controllo della versione.
Plug-in Docker: gli sviluppatori utilizzano i plug-in per rendere Docker Engine ancora più funzionale. Diversi plug-in Docker che supportano l'autorizzazione, il volume e la rete sono inclusi nel sistema di plug-in Docker Engine; è possibile caricare anche plug-in di terze parti.
Estensioni Docker: le estensioni Docker consentono agli sviluppatori di utilizzare strumenti di terze parti all'interno di Docker Desktop per aumentare le proprie funzioni. Le estensioni per gli strumenti per sviluppatori includono lo sviluppo di app Kubernetes, la sicurezza, l'observability e altro ancora.
Docker Compose: gli sviluppatori possono utilizzare Docker Compose per gestire applicazioni multicontainer, in cui tutti i container vengono eseguiti sullo stesso host Docker. Docker Compose crea un file YAML (.YML) che specifica quali sono i servizi inclusi nell'applicazione e può implementare ed eseguire container con un unico comando. Dal momento che la sintassi YAML è indipendente dalla lingua, i file YAML possono essere utilizzati in programmi scritti in Java, Python, Ruby e numerosi altri linguaggi.
Gli sviluppatori possono usare Docker Compose anche per definire volumi persistenti per lo storage, specificare nodi di base e documentare e configurare le dipendenze di servizio.