GNU/Linux >> Linux Esercitazione >  >> Panels >> Docker

Come creare un'immagine di Windows Docker con il tag di build Docker

Non conosci le immagini di Windows Docker? Stai attualmente lavorando in un negozio Windows e sei curioso di conoscere le build Docker per le immagini dei contenitori? Siete venuti nel posto giusto. Il modo migliore per imparare qualcosa di nuovo è fare con il docker build e docker build "tag" comandi!

In questo articolo imparerai come creare la tua prima immagine Docker di Windows da un Dockerfile usando docker build comando.

Iniziamo!

Capire le immagini del contenitore Docker

Per anni, l'unico modo per testare o eseguire lo sviluppo su più sistemi operativi (SO) è stato quello di avere diverse macchine fisiche o virtuali dedicate con la versione del sistema operativo di tua scelta. Questa metodologia richiedeva più hardware e spese generali per il provisioning di nuove macchine per ogni specifica software e sistema operativo.

Tuttavia, in questi giorni l'utilizzo delle immagini del contenitore Docker è cresciuto in parte a causa della popolarità dell'architettura di microservizi. In risposta all'aumento della popolarità di Docker, Microsoft ha iniziato a supportare pubblicamente le immagini Docker per diversi prodotti di punta sulla propria pagina Docker Hub. Hanno persino aggiunto il supporto nativo per le immagini per Windows come funzionalità del prodotto in Windows 10 e Windows Server 2016!

Un'immagine Docker viene eseguita su un contenitore tramite Docker Engine. Le immagini Docker hanno molti vantaggi come la portabilità (applicabile a più ambienti e piattaforme), personalizzabili e altamente scalabili. Come puoi vedere di seguito, a differenza delle macchine virtuali tradizionali, il motore Docker viene eseguito su un livello tra il kernel del sistema operativo host e i servizi applicativi isolati che vengono containerizzati.

Capire la build e le immagini di Docker

La docker build Il comando può essere sfruttato per automatizzare la creazione di immagini di 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 compilazione utilizzate da Docker per creare una nuova immagine contenitore basata su un'immagine esistente.

L'utente può specificare l'immagine di base e l'elenco di comandi da eseguire quando un'immagine del contenitore viene distribuita o avviata per la prima volta. In questo articolo imparerai come creare un'immagine Docker basata su Windows da Dockerfile utilizzando un contenitore Windows.

Questo processo presenta diversi vantaggi rispetto all'utilizzo di un'immagine contenitore predefinita:

  1. Puoi ricostruire un'immagine del contenitore per diverse versioni di Windows, il che è ottimo per testare le modifiche al codice su diverse piattaforme.
  2. Avrai un maggiore controllo su ciò che è installato nel container. Ciò ti consentirà di ridurre al minimo le dimensioni del tuo contenitore.
  3. Per motivi di sicurezza, potresti voler controllare le vulnerabilità del contenitore e applicare il rafforzamento della sicurezza all'immagine di base

Prerequisiti/Requisiti

Questo articolo è una procedura dettagliata per apprendere come creare un'immagine Docker usando un Dockerfile. Se desideri continuare, assicurati di disporre dei seguenti prerequisiti.

  • Docker per Windows installato. Userò Docker Community Edition (CE) versione 2.1.0.4 nel mio ambiente.
  • È necessario l'accesso a Internet per scaricare le immagini Docker
  • Sistema operativo Windows 10+ (per questo tutorial viene utilizzata la versione 1709)
  • Virtualizzazione nidificata abilitata
  • 5 GB di spazio libero su disco sul tuo computer locale
  • PowerShell 5.0+
  • Questa esercitazione usa l'IDE di codice di Visual Studio. Tuttavia, sentiti libero di usare l'IDE che preferisci.

Nota:assicurati di abilitare la configurazione dei contenitori di Windows durante l'installazione di Docker.

Preparazione

Per prima cosa avrai bisogno di una cartella in cui archiviare tutte le immagini Docker e i contenitori che creerai da quelle immagini. Per farlo, apri un terminale PowerShell o cmd (in questo articolo utilizzerai PowerShell) e crea una nuova directory chiamata C:\Containers.

Una volta creata la cartella, passare a quella directory. Questo mette la directory di lavoro corrente della console in C:\Containers per impostazione predefinita tutti i download in questa directory.

PS51> mkdir C:\Containers
PS51> cd C:\Containers

In questo articolo, otterrai un vantaggio. La maggior parte dei file per lavorare con questo progetto sono già disponibili. Una volta creata la cartella, esegui un pull Git per copiare i file necessari per questo articolo dal repository Github di TechSnips in C:\Containers cartella. Una volta completato, verifica che C:\Containers la cartella appare come sotto.

Download dell'immagine Docker di Windows IIS

La prima operazione da eseguire è scaricare un "modello" o un'immagine di base. In seguito creerai la tua immagine Docker, ma prima hai bisogno di un'immagine con cui iniziare. Scaricherai le ultime immagini di IIS e Windows Server Core necessarie per questo tutorial. L'elenco aggiornato delle immagini è disponibile nella pagina dell'immagine dell'hub Microsoft Docker ufficiale.

Revisione delle immagini della base mobile corrente

Prima di scaricare l'immagine dal repository di immagini, esaminiamo prima le attuali immagini di base Docker che hai attualmente sul tuo sistema locale. Per farlo, esegui una console di PowerShell come amministratore e quindi digita docker images . Questo comando restituisce tutte le immagini sul tuo sistema locale.

Come puoi vedere di seguito, le immagini disponibili sono inizialmente vuote.

PS51> docker images

Download dell'immagine di base

Ora è il momento di scaricare l'immagine IIS di base da Docker Hub. Per farlo, esegui docker pull come mostrato di seguito. Il completamento di questo processo può richiedere del tempo a seconda della velocità di Internet.

PS51> docker pull mcr.microsoft.com/windows/servercore/iis

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

PS51> docker images

Ispezione del Dockerfile

In un passaggio precedente, avevi scaricato un Dockerfile esistente per questo tutorial. Diamo ora un'occhiata a cosa comporta esattamente.

Apri il C:\Containers\Container1\Dockerfile file nel tuo editor preferito. Il contenuto di questo Dockerfile viene utilizzato per definire come verrà configurata l'immagine del contenitore in fase di compilazione.

Puoi vedere una spiegazione di ciò che fa ogni parte di questo file nei commenti in linea.

# Specifies that the latest microsoft/iis image will be used as the base image
# Used to specify which base container image will be used by the build process.

# Notice that the naming convention is "**owner/application name : tag name**"
# (shown as microsoft/iis:latest); so in our case the owner of the image is
# Microsoft and the application is IIS with the "latest" tag name being used
# to specify that you will pull the most recent image version available.
FROM microsoft/iis:latest

# Copies contents of the wwwroot folder to the inetpub/wwwroot folder in the new container image
# Used to specify that you want to copy the WWWroot folder to the IIS inetpub WWWroot
# folder in the container. You don't have to specify the full path to your local
# files because docker already has the logic built-in to reference files and folders
# relative to the docker file location on your system. Also, make note that that
# docker will only recognize forward slashes for file paths - since this is a
# Windows based container instead of Linux.
COPY wwwroot c:/inetpub/wwwroot

# Run some PowerShell commands within the new container to set up the image

# Run the PowerShell commands to remove the default IIS files and create a new
# application pool called TestPool
RUN powershell Remove-Item c:/inetpub/wwwroot/iisstart.htm -force
RUN powershell Remove-Item c:/inetpub/wwwroot/iisstart.png -force
RUN powershell Import-Module WebAdministration
RUN powershell New-WebAppPool -Name 'TestPool'

# Exposes port 80 on the new container image
# Used to open TCP port 80 for allowing an http connection to the website.
# However, this line is commented out, because the IIS container has this port
# already open by default.
#EXPOSE 80

# Sets the main command of the container image
# This tells the image to run a service monitor for the w3svc service.
# When this is specified the container will automatically stop running
# if the w3svc service stopped. This line is commented out because of the
# IIS container already has this entrypoint in place by default.
#ENTRYPOINT ["C:\\ServiceMonitor.exe", "w3svc"]

Costruzione di una nuova immagine Docker

Hai il Dockerfile pronto per l'uso e un'immagine IIS di base scaricata. Ora è il momento di creare la tua nuova immagine Docker utilizzando Dockerfile.

Per creare una nuova immagine, usa il docker build "tag" comando. Questo comando crea l'immagine. Per questo articolo, puoi vedere di seguito che stai utilizzando anche il -t ** opzione che sostituisce la parte “tag”. Questa opzione ti consente di assegnare alla tua nuova immagine un nome di tag descrittivo e anche di fare riferimento al Dockerfile specificando il percorso della cartella in cui risiede.

Di seguito puoi vedere un esempio per verificare che la console sia nella directory C:\Containers e quindi creare una nuova immagine dal Dockerfile in C:\Containers\Container1 directory.

PS51> cd C:\Containers
PS51> docker build -t container1 .\Container1

Una volta avviato, puoi vedere l'avanzamento del comando mentre attraversa ogni istruzione nel file docker riga per riga:

Una volta terminato, ora dovresti avere una nuova immagine Docker!

Ora esegui le docker images comando per visualizzare le immagini disponibili. Di seguito puoi vedere un esempio del container1 immagine creata.

Nota:la docker build —help command è un parametro utile per visualizzare informazioni dettagliate sul comando docker in esecuzione.

Esecuzione del Docker Container

A questo punto dovresti avere una nuova immagine creata. È ora di far girare un contenitore usando quell'immagine. Per visualizzare un nuovo contenitore, utilizza docker run comando.

La docker run comando farà apparire un nuovo contenitore Docker basato su container1 immagine che hai creato in precedenza. Puoi vederne un esempio qui sotto.

Si noti che il -d viene utilizzato il parametro. Questo indica al runtime docker di avviare l'immagine in modalità separata e quindi di uscire quando il processo di root utilizzato per eseguire il contenitore è terminato.

Quando docker run completa, restituisce l'ID del contenitore creato. L'esempio seguente sta acquisendo questo ID in un $containerID variabile in modo da poterla fare facilmente riferimento in seguito.

PS51> $containerID = docker run -d container1
PS51> $containerID

Una volta che il contenitore è stato aperto, ora esegui il docker ps comando. Questo comando ti consente di vedere quali contenitori sono attualmente in esecuzione utilizzando ciascuna immagine. Si noti di seguito che l'immagine in esecuzione viene generata automaticamente un nickname (busy_habit in questo caso). Questo nickname viene talvolta utilizzato al posto dell'ID contenitore per gestire il contenitore.

Codice in esecuzione all'interno di un container Docker

Un nuovo contenitore viene creato da una nuova immagine appena creata. Iniziamo ora a utilizzare effettivamente quel contenitore per eseguire il codice. L'esecuzione del codice all'interno di un container Docker viene eseguita utilizzando docker exec comando.

In questo esempio, esegui docker exec per visualizzare l'output di PowerShell per Get-ChildItem comando nel contenitore utilizzando la sintassi del comando seguente. Ciò garantirà che le istruzioni nel Dockerfile per rimuovere i file IIS predefiniti siano riuscite.

PS51> docker exec $containerID powershell Get-ChildItem c:\inetpub\wwwroot

Di seguito puoi vedere che l'unico file esistente è index.html il che significa che i file predefiniti sono stati rimossi.

Ora esegui ipconfig comando nel contenitore per ottenere l'indirizzo IP locale dell'immagine del contenitore in modo da poter provare a connetterti al sito Web IIS.

PS51> docker exec $containerID ipconfig

Puoi vedere sotto quel ipconfig è stato eseguito nel contenitore proprio come se fosse in esecuzione sul tuo computer locale e ha restituito tutte le informazioni IP.

Ispezione del sito Web IIS

Ora è il momento di rivelare i frutti del tuo lavoro! È ora di vedere se il server IIS in esecuzione nel contenitore 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 Hello World!! messaggio come di seguito.

Revisione della cronologia Docker

Un comando utile da utilizzare quando si lavora con i container Docker è la docker history comando. Sebbene non sia necessariamente correlato alla creazione di un'immagine o di un contenitore stesso, la docker history command è un comando utile che ti consente di rivedere le modifiche apportate all'immagine del contenitore.

PS51> docker history container1

Di seguito puoi vedere quella docker history restituisce tutte le attività Dockerfile e PowerShell eseguite sul container1 contenitore con cui hai lavorato.

Ripulire le immagini Docker in esecuzione

I passaggi seguenti vengono utilizzati per ripulire tutti i contenitori interrotti in esecuzione sul computer. Ciò libererà spazio su disco e risorse di sistema.

Esegui il docker ps comando per visualizzare un elenco dei contenitori in esecuzione sul tuo sistema:

PS51> docker ps

Ora interrompi i contenitori in esecuzione utilizzando docker stop comando:

PS51> docker stop <image nick name: busy_haibt in my case>
PS51> docker stop <image nick name: unruffled_driscoll in my case>

Infine puoi rimuovere definitivamente i contenitori fermi utilizzando il docker system prune comando.

PS51> docker system prune

Ulteriori letture

  • Creazione del tuo primo contenitore Windows Server Docker
  • Come gestire i volumi Docker su Windows


Docker
  1. Come creare, elencare ed eliminare contenitori Docker su Linux

  2. Come costruire il contenitore Docker Anaconda Python Data Science

  3. Crea, tagga e carica la tua immagine Docker

  4. Come utilizzare un Dockerfile per creare un'immagine Docker

  5. Come distribuire un container nginx con Docker su Linode

Come ispezionare il contenuto di un'immagine Docker senza avviare un contenitore

Come creare un'immagine Docker da un contenitore in esecuzione

Come creare un contenitore dell'applicazione Django Docker

Come creare volumi Docker su Windows in modo semplice

Come copiare file con Docker cp nel tuo Docker Container

Come creare un'immagine Docker personalizzata con Dockerfile