Docker su Windows? Inizia a Imparare Ora O…!

Se sei nuovo ai container e a Docker e lavori principalmente su Windows, sarai felice di sapere che in questo articolo imparerai come configurare Docker su Windows 10 utilizzando Docker Desktop per Windows, o semplicemente chiamato Docker Desktop in questo articolo.

Docker Desktop è il motore Docker e un client di gestione confezionati insieme per un uso facile in Windows 10. In questo articolo, installerai Docker Desktop, distribuirai il tuo primo container e condividerai dati tra l’host e i tuoi container.

Requisiti preliminari per Docker su Windows

Questo è un articolo passo-passo che illustra vari passaggi in Docker Desktop per Docker su Windows. Per seguirlo, assicurati di avere alcuni requisiti specifici in primo luogo.

  • Una connessione Internet per scaricare oltre 800 MB di dati
  • Windows 10 a 64 bit in esecuzione con la versione Pro, Enterprise o Education con il rilascio 1703 o successivo. Questo è necessario per eseguire Hyper-V su Windows 10.
  • A CPU with SLAT (nested paging) compatibility. All AMD/Intel processors since approximately 2008 are SLAT compatible
  • Almeno 4 GB di RAM
  • La virtualizzazione hardware del BIOS, talvolta indicata come Tecnologia di virtualizzazione o VTx. Deve essere abilitata e mostrata come Abilitata nella scheda delle prestazioni del Task Manager come mostrato di seguito.
Enabled BIOS virtualization shown in Windows Task Manager

Scaricamento e installazione di Docker Desktop

Prima di tutto, è necessario scaricare ed installare Docker Desktop per utilizzare Docker su Windows. Docker Desktop è disponibile in due versioni: una versione stabile e una versione di test.

La versione stabile viene rilasciata trimestralmente e garantisce un’applicazione completamente testata. In questo articolo, utilizzeremo la versione stabile.

Avviso: Durante l’installazione, Docker Desktop ti chiederà di installare l’ipervisore Hyper-V se non è già installato. Facendo ciò, l’ipervisore Hyper-V impedisce l’esecuzione di qualsiasi ipervisore in modalità utente come VirtualBox, VMWare, ecc. Il supporto di Hyper-V per VirtualBox e VMWare è limitato ma in arrivo.

Hai anche la possibilità di scaricare Docker Desktop direttamente da Docker.com o tramite il gestore di pacchetti di Windows, Chocolatey. Vediamo brevemente entrambi i metodi.

Dal sito Docker.com

Per scaricare Docker Desktop direttamente da docker.com, puoi andare alla pagina del prodotto, registrarti per un account e scaricarlo da lì. Questo è consigliato se hai intenzione di utilizzare Docker in produzione registrando un account.

Tuttavia, se stai testando Docker per la prima volta, puoi anche scaricarlo direttamente, il che è molto più semplice.

Una volta scaricato il file EXE, esegui l’eseguibile e segui le istruzioni accettando tutte le impostazioni predefinite.

Quando ti viene chiesto se intendi Utilizzare i container Windows anziché i container Linux, come mostrato di seguito, non spuntare la casella. In questo articolo useremo i container Linux.

Installing Docker Desktop

Una volta completata l’installazione, riavvia il computer.

La selezione dell’opzione per utilizzare i container Windows o i container Linux indica a Docker di associare le immagini a un kernel Windows o a un kernel Linux. È possibile modificare questa impostazione in qualsiasi momento dopo l’installazione facendo clic destro sull’icona di Docker nella barra delle applicazioni e selezionando Passa ai container Windows, come mostrato di seguito.

Switching to Windows containers

Utilizzando Chocolatey

L’altra opzione per scaricare e installare Docker Desktop è con Chocolatey. Chocolatey automatizza molte delle operazioni di download/installazione per te. Per farlo, apri una console della riga di comando (sia cmd che PowerShell) come amministratore per scaricare e installare il programma in un’unica operazione eseguendo il comando seguente.

choco install docker-desktop

Una volta completato, riavvia Windows 10.

Se desideri provare la versione di test in un secondo momento, puoi scaricare e installare questa versione eseguendo il comando choco install docker-desktop --pre.

Convalida dell’installazione di Docker Desktop

Una volta installato, Docker Desktop viene eseguito automaticamente come servizio fornendo Docker su Windows. Viene visualizzato nella barra delle applicazioni quando accedi a Windows dopo il riavvio. Ma come puoi effettivamente sapere che funziona?

Per convalidare che Docker Desktop funzioni correttamente, apri una console della riga di comando ed esegui il comando docker. Se l’installazione è andata a buon fine, vedrai un riferimento al comando Docker.

Infine, fai in modo che Docker scarichi ed esegua un’immagine di esempio del contenitore chiamata hello-world eseguendo il comando docker run hello-world. Se tutto va bene, vedrai un output simile al seguente.

A successful test image run via Docker Desktop

Esecuzione di comandi nei contenitori Docker

Docker Desktop è installato e hai verificato che tutto sia a posto? Ora cosa fare? Per iniziare con Docker su Windows, un’operazione comune da eseguire in un container Docker è l’esecuzione di comandi. Attraverso il comando docker run, puoi inviare comandi tramite l’host (il tuo PC Windows 10) direttamente in un container in esecuzione.

Per eseguire comandi in un container con docker run, devi prima specificare il nome dell’immagine seguito dal comando. Per iniziare, digita al Docker di eseguire il comando hostname all’interno di un container chiamato alpine come mostrato di seguito.

> docker run alpine hostname
b74ff46601af

Dato che non hai l’immagine Docker alpine sul tuo computer, Docker su Windows scaricherà la piccola immagine dal Docker Hub, avvierà un container da quella immagine e invierà il comando direttamente nel container, quindi lo spegnerà tutto in un colpo solo.

Se desideri mantenere il container in esecuzione, puoi anche utilizzare il parametro -it. Questo parametro indica a Docker di mantenere il container in “modalità interattiva”, lasciandolo in esecuzione in primo piano dopo l’esecuzione del comando. Vedrai che ti viene presentato un prompt del terminale pronto all’uso.

> docker run -it alpine sh
/ #

Quando hai finito nel terminale, digita exit per tornare a Windows 10.

Accesso ai file dell’host Docker nei container

Un’altra attività comune è l’accesso ai file host dai container. Per accedere ai file host nei container, Docker su Windows ti consente di collegare un percorso di una cartella dal tuo desktop per condividere quella cartella con il tuo container. Questo processo è chiamato binding.

Per creare un binding, crea una cartella su un’unità locale. In questo esempio, userò E:\ e la chiamerò input. Successivamente, verrà creata un nuovo documento di testo chiamato file.txt nella cartella. Sentiti libero di utilizzare il percorso e il file che preferisci.

Una volta che hai la cartella che desideri condividere tra l’host e il container, Docker deve montare la cartella utilizzando il parametro --mount. Il parametro --mount richiede tre argomenti: un tipo di montaggio, un percorso della directory sorgente dell’host e un percorso della directory di destinazione. Il percorso di destinazione sarà un link simbolico all’interno del container.

Di seguito vedrai un esempio di montaggio dell’intera cartella E:\ nell’host Windows 10 in modo da apparire come la directory /home/TEST all’interno del container Linux.

> docker run --mount type=bind,source="E:/",target=/home/TEST -it alpine

Quando tenti di montare una cartella dell’host, Docker Desktop chiederà il tuo permesso per condividere questa unità con i container Docker, come mostrato di seguito.

Sharing a Docker drive

Se hai creato il file file.txt nella cartella di Windows 10 come descritto in precedenza, esegui il comando cat /home/TEST/input/file.txt. Vedrai che il contenuto viene visualizzato.

Ora, elimina la cartella input che hai appena creato e esegui nuovamente il comando cat .... Osserva che la shell segnala ora che il file non esiste più.

Working with files in Docker containers

Mappatura delle porte di rete

Un altro concetto importante da conoscere è come Docker su Windows gestisce la rete. Per una breve introduzione, vediamo cosa serve per accedere a un servizio web in esecuzione in un container dall’host locale.

Per prima cosa, avvia un’immagine di esempio che eseguirà una pagina web di esempio. Scarica ed esegui l’immagine Docker chiamata dockersamples/static-site. Utilizzerai il comando docker container run per farlo.

Il seguente comando esegue quattro azioni contemporaneamente:

  • Scarica un’immagine Docker da Docker Hub chiamata static-site nella “directory” docker-samples
  • Avvia un’istanza del container a partire dall’immagine static-site
  • Distacca immediatamente il container dal terminale in primo piano (--detach)
  • Permette l’accesso alle porte di rete del container in esecuzione all’host Windows 10 (--publish-all)
docker container run --detach --publish-all dockersamples/static-site
## Sintassi alternativa/breve che fa la stessa cosa:
## docker container run -d -P dockersamples/static-site
## docker run -d -P dockersamples/static-site

Una volta eseguito, Docker restituirà l’ID del container che è stato avviato come mostrato di seguito.

Docker container ID returned from running a container

Pubblicazione delle porte di rete

Da quando si utilizza il parametro --publish-all, le porte local host vengono mappate allo stack di rete del container. È possibile utilizzare il sottocomando docker ps per elencare tutti i container in esecuzione, inclusa l’assegnazione delle porte per ciascuno di essi. Nell’esempio seguente, un container è in esecuzione e mappa la porta host 32777 alla porta 80 del container e la porta host 32776 alla porta 443 del container.

Showing port mapping of Docker container

Su Docker su Windows, i container vengono assegnati porte casuali quando si utilizza il parametro --publish-all, a meno che non vengano esplicitamente definite.

Ora apri un browser web e vai all’indirizzo http://localhost:32777 o alla porta che Docker ha assegnato per mappare la porta 80, come indicato dall’output di docker ps. Se tutto va bene, dovresti visualizzare la pagina web seguente.

Resulting webpage running in the Docker container

Cambiare le porte pubblicate

Ora hai un container Docker in esecuzione su Docker su Windows che fornisce una semplice pagina web. Congratulazioni! Ma ora devi specificare un binding di porta specifico senza affidarti alla selezione casuale della porta con --publish-all. Nessun problema. Utilizza il parametro -p.

Prima, interrompi l’esecuzione del container specificando un ID univoco per esso. Puoi trovare questo ID del container eseguendo docker ps. Una volta che conosci l’ID del container, interrompi l’esecuzione del container e avviane uno nuovo specificando a Docker di assegnare una porta specifica da pubblicare.

La sintassi per specificare una porta è <porta esterna>:<porta del contenitore>. Per ogni porta che desideri pubblicare, utilizza l’opzione --publish o -p con i numeri di porta esterna e del contenitore come mostrato di seguito.

> docker stop f766
> docker run --detach -p 1337:80 dockersamples/static-site

Quando specifici un ID del contenitore, devi digitare solo una parte dell’ID che sia univoca. Se stai eseguendo un unico contenitore e il suo ID è f766f4ac8d66bf7, puoi identificare il contenitore utilizzando qualsiasi numero di caratteri, incluso solo f. L’importante è che quello che digiti permetta di identificare univocamente un singolo contenitore.

Ora vai sul tuo browser web e vai su localhost:1337. Ricorda, non stai modificando l’immagine e questa ascolta sempre sulla porta 80; stai invece modificando la regola di traduzione delle porte nella configurazione di Docker che ti consente di connetterti al contenitore.

Webpage being served up on port 1337

Arrestare tutti i contenitori

Utilizzando docker stop, puoi arrestare un contenitore, ma come fai ad arrestare contemporaneamente più contenitori? Un modo per farlo è fornire gli ID dei contenitori separati da spazi. Di seguito è riportato un esempio di come arrestare tre contenitori con gli ID fd50b0a446e7, 36ee57c3b7da e 7c45664906ff.

> docker stop fd50 36ee 7c45

Se stai gestendo i container Docker in PowerShell, puoi anche utilizzare un’abbreviazione per fermare tutti i container. Passa una lista di ID dei container tramite il parametro “stop” di Docker usando l’espansione dei comandi di PowerShell docker stop (docker ps -q).

Verifica che tutti i container siano fermati verificando che non venga visualizzato alcun container quando digiti il comando docker ps.

Pulizia

Hai scaricato alcune immagini di container e hai eseguito alcuni container che sono ora fermati. Anche se sono fermi, lo spazio di archiviazione loro assegnato non è stato liberato dal disco locale dell’host. Devi eliminare i container per liberare spazio e evitare di appesantire il tuo ambiente di lavoro.

Per eliminare un singolo container, utilizza il parametro “rm” per rimuovere il container come indicato di seguito.

> docker container rm <container ID>

In alternativa, per eliminare tutti i container fermati, utilizza il parametro “prune” come indicato di seguito.

> docker container prune

Source:
https://adamtheautomator.com/docker-windows/