Sei nuovo alle immagini di Docker per Windows? Stai attualmente lavorando in un ambiente Windows e sei curioso di apprendere le build di Docker per le immagini dei container? Sei nel posto giusto. Il modo migliore per imparare qualcosa di nuovo è metterci mano utilizzando i comandi docker build
e docker build "tag"
!
In questo articolo imparerai come creare la tua prima immagine Docker per Windows da un Dockerfile utilizzando il comando docker build
.
Cominciamo!
Comprensione delle immagini di container Docker
Per anni, l’unico modo per testare o sviluppare su più sistemi operativi (OS) era avere diverse macchine fisiche o virtuali dedicate con l’immagine della versione OS desiderata. Questa metodologia richiedeva più hardware e overhead per creare nuove macchine per ciascun software e specifica OS.
Tuttavia, oggi l’uso delle immagini di container Docker è cresciuto in parte grazie alla popolarità dell’architettura a microservizi. In risposta all’aumento della popolarità di Docker, Microsoft ha iniziato a supportare pubblicamente le immagini Docker per diversi prodotti di punta sulla loro pagina di Docker Hub. Hanno persino aggiunto il supporto nativo per le immagini per Windows come funzionalità del prodotto in Windows 10 e Windows Server 2016!
A Docker image is run on a container by using the Docker Engine. Docker images have many benefits such as portability (applicable to multiple environments and platforms), customizable, and highly scalable. As you can see below, unlike traditional virtual machines, the Docker engine runs on a layer between the host OS kernel and the isolated application services that are being containerized.

Comprensione delle Build e delle Immagini Docker
Il comando docker build
può essere sfruttato per automatizzare la creazione di immagini container, adottare una pratica DevOps container-as-code e integrare la containerizzazione nel ciclo di sviluppo dei tuoi progetti. I Dockerfile sono semplicemente file di testo che contengono istruzioni di build utilizzate da Docker per creare una nuova immagine container basata su un’immagine esistente.
L’utente può specificare l’immagine di base e l’elenco dei comandi da eseguire quando un’immagine container viene distribuita o avviata per la prima volta. In questo articolo, imparerai come creare un’immagine docker basata su Windows da un Dockerfile utilizzando un container Windows.
Questo processo ha diversi vantaggi rispetto all’utilizzo di un’immagine container pre-costruita:
- È possibile ricostruire un’immagine container per diverse versioni di Windows, il che è ottimo per testare le modifiche del codice su diverse piattaforme.
- Avrai maggiore controllo su ciò che viene installato nel container. Ciò ti permetterà di mantenere le dimensioni del container al minimo.
- Per motivi di sicurezza, potresti voler controllare il container per individuare vulnerabilità e applicare procedure di sicurezza alla base dell’immagine
Prerequisiti/Requisiti
Questo articolo è una guida passo-passo per imparare come creare un’immagine Docker utilizzando un Dockerfile. Se desideri seguirla, assicurati di avere i seguenti prerequisiti in atto.
- Docker per Windows installato. Utilizzerò la versione 2.1.0.4 della Docker Community Edition (CE) nel mio ambiente.
- L’accesso a Internet è necessario per scaricare le immagini Docker
- Sistema operativo Windows 10+ (la versione 1709 viene utilizzata per questo tutorial)
- Virtualizzazione nidificata abilitata
- 5 GB di spazio libero su disco sul tuo computer locale
- PowerShell 5.0+
- Questo tutorial utilizza l’IDE Visual Studio Code. Tuttavia, sentiti libero di utilizzare qualsiasi IDE preferisci.
Nota: Assicurati di abilitare la configurazione dei contenitori Windows durante l’installazione di Docker.
Preparazione
Prima di tutto, è necessaria una cartella per memorizzare tutte le immagini e i contenitori Docker che verranno creati da tali immagini. Per farlo, apri un terminale PowerShell o cmd (utilizzerai PowerShell per tutto questo articolo) e crea una nuova directory chiamata C:\Containers.
Una volta creata la cartella, passa a quella directory. Questo imposta la directory di lavoro corrente della console su C:\Containers per impostare automaticamente tutti i download su questa directory.
In questo articolo, otterrai un vantaggio iniziale. La maggior parte dei file per lavorare su questo progetto è già disponibile. Una volta creata la cartella, esegui un Git pull per copiare i file necessari per questo articolo dal repository Github di TechSnips alla cartella C:\Containers. Una volta completato, controlla che la cartella C:\Containers sia simile a quanto segue.

Scaricando l’immagine Docker di Windows IIS
Il primo compito da eseguire è scaricare una “template” o immagine di base. Costruirai la tua immagine Docker in seguito, ma prima hai bisogno di un’immagine per iniziare. Scaricherai le ultime immagini IIS e Windows Server Core necessarie per questo tutorial. L’elenco aggiornato delle immagini può essere trovato sulla pagina delle immagini Docker ufficiali di Microsoft.
Revisione delle immagini Docker di base attuali
Prima di scaricare l’immagine dal repository delle immagini, diamo prima un’occhiata alle immagini Docker di base attualmente presenti nel tuo sistema locale. Per farlo, esegui una console PowerShell come Amministratore e poi digita docker images
. Questo comando restituisce tutte le immagini presenti nel tuo sistema locale.
Come puoi vedere di seguito, le immagini disponibili sono inizialmente vuote.

Scaricando l’immagine di base
Ora è il momento di scaricare l’immagine di base di IIS da Docker Hub. Per farlo, eseguire il comando docker pull
come mostrato di seguito. Questo processo può richiedere del tempo a seconda della velocità della tua connessione internet.

Ora eseguire docker images
e dovresti avere disponibile l’ultima immagine di Microsoft Windows Core IIS per questo tutorial.

Ispezionare il Dockerfile
In un passaggio precedente, hai scaricato un Dockerfile esistente per questo tutorial. Ora diamo un’occhiata a cosa comporta esattamente.
Apri il file C:\Containers\Container1\Dockerfile nel tuo editor preferito. Il contenuto di questo Dockerfile è utilizzato per definire come l’immagine del contenitore sarà configurata durante la fase di costruzione.
Puoi vedere una spiegazione di cosa fa ciascuna parte di questo file nei commenti in linea.
Costruzione di una Nuova Immagine Docker
Hai il Dockerfile pronto e hai scaricato un’immagine di base di IIS. Ora è il momento di costruire la tua nuova immagine Docker utilizzando il Dockerfile.
Per costruire una nuova immagine, utilizza il comando docker build "tag"
. Questo comando crea l’immagine. Per questo articolo, puoi vedere di seguito che stai usando anche l’opzione -t **
che sostituisce la parte “tag”. Questa opzione ti consente di dare al tuo nuova immagine un nome di tag amichevole e anche di fare riferimento al Dockerfile specificando il percorso della cartella in cui risiede.
Di seguito puoi vedere un esempio di assicurarti che la console sia nella directory C:\Containers e quindi costruire una nuova immagine dal Dockerfile nella directory C:\Containers\Container1.
Una volta avviato, puoi vedere il progresso del comando mentre attraversa ciascuna istruzione nel file docker riga per riga:

Una volta fatto, dovresti avere una nuova immagine Docker!
Ora esegui il comando docker images
per visualizzare le immagini disponibili. Puoi vedere di seguito un esempio dell’immagine container1 creata.

Nota: Il comando
docker build —help
è un parametro utile per visualizzare informazioni dettagliate sul comando docker in esecuzione.
Esecuzione del Container Docker
A questo punto, dovresti avere creata una nuova immagine. È ora di avviare un container utilizzando quell’immagine. Per avviare un nuovo container, utilizza il comando docker run
.
Il comando docker run
avvierà un nuovo container Docker basato sull’immagine container1 che hai creato in precedenza. Puoi vedere un esempio di questo qui sotto.
Nota che il parametro -d
viene utilizzato. Questo indica al runtime di Docker di avviare l’immagine in modalità staccata e quindi di uscire quando il processo radice utilizzato per eseguire il container esce.
Quando docker run
è completato, restituisce l’ID del container creato. Nell’esempio seguente viene acquisito questo ID in una variabile $containerID
in modo da poterlo facilmente fare riferimento in seguito.

Una volta che il container è stato avviato, esegui il comando docker ps
. Questo comando ti consente di vedere quali container sono attualmente in esecuzione utilizzando ciascuna immagine. Nota che di seguito l’immagine in esecuzione viene generata automaticamente un soprannome (busy_habit in questo caso). Questo soprannome viene talvolta utilizzato al posto dell’ID del container per gestire il container.

Esecuzione del codice all’interno di un container Docker
A new container is built from a new image you just created. Let’s now start actually using that container to run code. Running code inside of a Docker container is done using the docker exec
command.
In questo esempio, esegui docker exec
per visualizzare l’output di PowerShell per il comando Get-ChildItem
nel container utilizzando la sintassi del comando qui sotto. Questo assicurerà che le istruzioni nel Dockerfile per rimuovere i file IIS predefiniti siano riuscite.
Puoi vedere di seguito che l’unico file esistente è index.html il che significa che i file predefiniti sono stati rimossi.

Ora esegui il comando ipconfig
nel container per ottenere l’indirizzo IP locale dell’immagine del container in modo da poter provare a connetterti al sito web IIS.
Puoi vedere di seguito che è stato eseguito ipconfig
nel container proprio come se fosse stato eseguito sul tuo computer locale e ha restituito tutte le informazioni IP.

ipconfig
in a Docker containerIspezione del Sito Web di IIS
Ora è il momento di rivelare i frutti del tuo lavoro! È ora di vedere se il server IIS in esecuzione nel container Docker sta servendo correttamente la pagina index.html.
Apri un browser e incolla l’indirizzo IP4 trovato tramite ipconfig
nella barra degli indirizzi. Se tutto va bene, dovresti vedere un messaggio Hello World!! come quello sotto.

Revisione della Storia di Docker
Un comando utile da utilizzare quando si lavora con i container Docker è il comando docker history
. Anche se non necessariamente correlato alla creazione di un’immagine o di un container stesso, il comando docker history
è un comando utile che consente di rivedere le modifiche apportate all’immagine del container.
Puoi vedere di seguito che docker history
restituisce tutte le attività di Dockerfile e PowerShell eseguite sul container1 con cui hai lavorato.

docker history
Pulizia delle Immagini Docker in Esecuzione
I passaggi seguenti vengono utilizzati per pulire tutti i container arrestati in esecuzione sul tuo computer. Questo libererà spazio su disco e risorse di sistema.
Esegui il comando docker ps
per visualizzare un elenco dei container in esecuzione sul tuo sistema:

Ora arresta i container in esecuzione utilizzando il comando docker stop
:

Infine, puoi rimuovere definitivamente i container arrestati utilizzando il comando docker system prune
.
