Prima di iniziare con l'installazione, è necessario precisare che Docker utilizza alcune funzionalità del kernel di Linux che, per ovvi motivi, non sono presenti in un sistema Windows. Per questo motivo abbiamo bisogno di uno stratagemma per portare in casa Microsoft la potenza dei container. Lo stratagemma usato consiste nell’installare una macchina virtuale Linux (magari una ad hoc con un bassissimo overhead sul sistema host) con all’interno il demone Docker, a gestire i container ed un set di API utilizzabili in un’ottica client/server per inviare comandi. L'immagine seguente riassume questo concetto:
Questo meccanismo è completamente "trasparente" all'utente, in quanto l’installer di Docker si occuperà di installare tutto il necessario. Ad oggi, esistono due diversi installer, in base alla versione di Windows e al processore che abbiamo a disposizione.
Se il nostro sistema operativo è Windows 10 nelle versioni Professional, Enterprise o Education e il nostro processore è a 64 bit, l’installer che fa per noi è Docker for Windows (in futuro anche altre versioni saranno supportate, Windows Server 2016 in primis). In tutti gli altri casi utilizzeremo Docker Toolbox. La differenza principale tra i due installer consiste nell’hypervisor utilizzato: Docker Toolbox utilizza Oracle VirtualBox, mentre Docker for Windows utilizza Microsoft Hyper-V ed è in grado di funzionare come servizio Windows, garantendo quindi una migliore integrazione. Vediamo come procedere nei due casi.
Installazione tramite Docker for Windows
L’installazione è abbastanza semplice: una volta scaricato l’ installer, basta eseguirlo ed il gioco è fatto. Il processo di installazione è generalmente molto lineare; l'unica cosa che richiede attenzione è la fase finale dell’installazione, in cui potrebbe esser richiesto di abilitare le funzionalità di Hyper-V. Se è così, accettiamo e riavviamo la macchina. Una volta che il computer sarà riavviato, nella system tray in basso a destra dovrebbe comparire l’icona di Docker.
Apriamo il Prompt dei comandi o la console di Powershell e proviamo a vedere se è tutto ok, eseguendo il comando docker version
:
$ docker version
Client:
Version: 1.12.1
API version: 1.24
Go version: go1.6.3
Git commit: 23cf638
Built: Thu Aug 18 17:52:38 2016
OS/Arch: windows/amd64
Server:
Version: 1.12.1
API version: 1.24
Go version: go1.6.3
Git commit: 23cf638
Built: Thu Aug 18 17:52:38 2016
OS/Arch: linux/amd64
La parte più interessante dell’output è la suddivisione che viene fatta tra client e server. Il client è il nostro sistema Windows locale, mentre il server è la macchina virtuale Linux che Docker ha istanziato dietro le quinte. Le parti comunicano tra loro grazie allo strato di API, così come accennato ad inizio lezione.
Installazione Docker Toolbox
Se non abbiamo il sistema operativo adatto o un processore a 64 bit, Docker Toolbox è quello che fa per noi. L’installazione è altrettanto semplice e mantenere le impostazioni di default in questa fase è più che sufficiente. Tra le varie cose, verrà installato anche Oracle Virtual Box, mediante cui sarà generata la macchina Linux. Se Virtual Box è già installato sul nostro computer possiamo escluderlo, ma il consiglio è di disinstallare la versione preesistente e installare quella presente nel toolbox, in modo da non incappare in eventuali conflitti di versione.
A questo punto, se tutto è andato per il verso giusto, sul Desktop troveremo nuove icone, la più importante è Docker Quickstart Terminal. Cliccando su di essa, verrà avviato l’engine Docker più tutte le configurazioni di rito (network adapter, DHCP). In alcuni casi il processo di configurazione del DHCP potrebbe risultare problematico, ma riavviare e rieseguire Docker Quickstart Terminal è in genere sufficiente per risolvere il problema. Una volta che tutte le configurazioni di rito sono state eseguite, potremo iniziare a sperimentare.
Il nostro primo Container
Sia che si sia scelto di installare il tutto tramite Docker Toolbox, sia che si sia scelto di farlo tramite Docker per Windows, tutti i comandi che mostreremo saranno assolutamente trasversali, anche su sistemi operativi non Microsoft.
Se si è installato Docker per Windows, possiamo usare sia il Prompt dei comandi che la console Powershell come interfacca a riga di comando. Se, invece, abbiamo installato Docker Toolbox, dobbiamo affidarci al Docker Quickstart Terminal per eseguire i comandi che vedremo durante le lezioni. Per convenzione, da questo punto in poi ci riferiremo in maniera generica ad entrambe come un terminale/console Docker.
Apriamo un terminale e proviamo subito una esecuzione di prova:
$ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
c04b14da8d14: Pull complete
Digest: sha256:0256e8a36e20...1feb60fd9
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
[...]
Come c’era da aspettarsi, questo comando non fa nulla di particolare se non stampare a video la scritta Hello from Docker!. Tuttavia, essendo a tutti gli effetti un container, vale la pena capire meglio in cosa consiste questa esecuzione: lo vedremo nella lezione successiva.