Tutti conoscono le principali soluzioni per la virtualizzazione: gli hypervisor sono gli strumenti software che si occupano di gestire l’infrastruttura virtuale (creata a partire da risorse fisiche disponibili sulla macchina ospitante) necessaria per avviare ed eseguire una o più virtual machine. Si pensi a Virtualbox (Virtualbox, cos’è e come funziona. Le novità della sesta versione), a VMware e a KVM.
La containerizzazione utilizza un approccio differente che consiste nel virtualizzare non l’hardware ma solamente il sistema operativo: le differenze sono chiarite nel nostro articolo Macchine virtuali e container: qual è la differenza.
Docker è un software opensource per il deployment e la gestione dei container ovvero dei contenitori all’interno delle quali vengono inserite ed eseguite applicazioni specifiche.
Lo strumento utilizza delle “immagini” che facilitano enormemente la distribuzione delle applicazioni da eseguire in forma containerizzata e ciascun file d’immagine è strutturato su più livelli o strati in modo che ogni modifica applicata sul contenuto generi un nuovo livello. Una soluzione intelligente che permette di preservare la configurazione dei livelli sottostanti pur consentendo possibilità di personalizzazione illimitate (è ovviamente possibile tornare alla versione precedente in qualunque momento e senza difficoltà).
Grazie al deployment completamente automatizzato, gli amministratori possono distribuire software (condivisione dell’applicazione o di un insieme di servizi insieme con tutte le loro dipendenze) e disporne il caricamento in pochi minuti con un evidente risparmio di tempo rispetto alle procedure di tipo tradizionale.
Posto che gli utenti di Docker possono creare in proprio le immagini, su Docker Hub sono pubblicate decine di migliaia di immagini di applicazioni, utili per gestire qualunque tipo di esigenza.
Come scaricare e utilizzare Docker
Docker è un prodotto opensource: è quindi scaricabile senza sborsare un centesimo da GitHub. Si tratta della versione Community Edition dal momento che ne esiste anche una a pagamento.
Docker può essere installato su macchine Linux, macOS e Windows; viene inoltre fornita una versione Software-as-a-Service (SaaS) fruibile online.
L’applicazione base si chiama Docker Engine e può essere installata su CentOS, Fedora, Ubuntu e Debian Linux oltre che su macOS e Windows. Esiste anche una versione che può essere utilizzata sulla piattaforme cloud Amazon AWS e Microsoft Azure.
In ambiente Windows è necessario installare Microsoft Hyper-V per utilizzare Docker: Windows 10 Pro, Windows Server 2016 e Windows Server 2019 contengono già tutto il necessario mentre in Windows 7 e in Windows 8.1 bisognerà servirsi di Docker Toolbox che si occuperà dell’installazione di una versione basata su Virtualbox.
Gli utenti macOS debbono invece possedere un dispositivo risalente almeno al 2010 e utilizzare almeno la versione del sistema operativo El Capitan 10.11 o successiva.
L’installazione di Docker è semplicissima: in Windows basta fare doppio clic sull’eseguibile scaricabile da qui.
Al termine dell’installazione, bisognerà effettuare la disconnessione dell’account in uso (con la chiusura dei programmi in esecuzione) quindi autorizzare l’abilitazione di Hyper-V.
Nell’area della traybar, comparirà l’icona di una balena con un alcuni container impilati sul dorso.
Il bello di Docker è che è possibile avere container Linux e Windows contemporaneamente in esecuzione riducendo al minimo l’impatto sulle risorse macchina utilizzate. Lo svantaggio è che, nella configurazione predefinita, non sarà possibile usare software per la virtualizzazione non basati su Hyper-V sulla stessa macchina.
A parte la schermata per la regolazione delle impostazioni generali di Docker, il software non dispone di un’interfaccia grafica: tutti i comandi di gestione dei container, quindi, vanno impartiti da riga di comando.
Accedendo alle impostazioni di Docker (tasto destro sull’icona nella traybar, Settings) si può evitare di inviare le statistiche anonime sull’utilizzo del software (casella Send usage statistics), decidere le unità di memorizzazione da rendere disponibili ai container, le risorse macchine utilizzabili, le impostazioni dell’interfaccia di rete utilizzata dai container Docker e altro ancora.
Sempre in Windows, premendo la combinazione di tasti CTRL+X
quindi scegliendo Windows PowerShell si potrà immediatamente iniziare a interagire con Docker.
Provate ad esempio i seguenti comandi:
docker version
docker run hello-world
Il primo comando mostra il numero di versione del software Docker appena installato mentre il secondo consente di scaricare dal repository ufficiale e avviare il container di test chiamato hello-world. Due verifiche che permettono di accertarsi che Docker sia perfettamente in esecuzione.
Digitando docker images
si otterrà la lista di tutte le immagini presenti sul sistema locale.
L’applicazione hello-world non è altro che un semplice test: una volta eseguita si limita a rispondere solamente con un semplice output testuale.
Il comando docker pull ubuntu
permette di scaricare in locale Ubuntu; scrivendo docker run -it ubuntu
si accederà alla sua interfaccia a riga di comando.
Ogni volta che si avvia e si utilizza una immagine Docker è possibile applicare modifiche ai file in essa contenuti esattamente come si farebbe con una macchina virtuale. Gli interventi apportati, però, saranno validi solo sul singolo container in uso.
Si pensi a un’immagine di Ubuntu Linux modificata con l’installazione di nuovi software: per non perdere le modifiche applicate sul container è necessario, alla fine, generare una nuova immagine. La sintassi da utilizzare è la seguente:
Al posto di container_id, repository e new_image_name vanno ovviamente sostituiti l’identificativo del container, il nome del repository e specificato il nome dell’immagine da creare (con il comando docker ps
è possibile individuare i container attivi mentre con docker ps -l
i dettagli dell’ultimo container creato).
Con Docker, utilizzando un file di configurazione chiamato Dockerfile
è possibile automatizzare il processo di creazione delle proprie immagini. A questo proposito si possono usare comandi che sono molto simili a quelli adoperabili in ambiente Linux: chi conosce il mondo del “pinguino” non si troverà in difficoltà con Docker.
Approntando un Dockerfile si può ad esempio richiedere il caricamento di Python quindi l’apertura di una porta (ad esempio quelle necessarie a un’applicazione dotata di funzionalità server) oltre a una serie di comandi di configurazione.
Ricorrendo successivamente al comando docker build -t
seguito dalla cartella contenente il Dockerfile, si darà il via al processo di creazione della nuova immagine.