Docker Automation con Dockerfile

Durante alcuni precedenti articoli, abbiamo visto come creare un container tramite Docker, sia in ambito Linux che Windows. In entrambe le soluzioni si è sempre analizzata la problematica di dover costruire il master template, attraverso l’editing manuale dell’oggetto, andando a perdere del tempo che si potrebbe dedicare ad altre attività.

In questo articolo vedremo come automatizzare questa fase attraverso il Dockerfile. La logica è molto semplice: il Dockerfile ha al suo interno una serie di istruzioni che vengono eseguite passo-passo per evitare di doverle eseguire manualmente, riducendo quindi il margine d’errore a zero….sempre che il file sia scritto correttamente!

Sintassi

I comandi utilizzabili all’interno del Dockerfile sono i seguenti:

  • ADD
  • CMD
  • ENTRYPOINT
  • ENV
  • EXPOSE
  • FROM
  • MAINTAINER
  • RUN
  • USER
  • VOLUME
  • WORKDIR

Esempio

Ecco un esempio di Dockerfile che può essere utilizzato all’interno di Container Host basato su Windows Server 2016:

FROM microsoft/iis
RUN mkdir C:\temp
RUN powershell -Command \
Install-WindowsFeature -Name NET-Framework-45-ASPNET ; \
Install-WindowsFeature -Name Web-Asp-Net45 ; \
wget -uri http://10.10.1.8/image01-docker.zip -OutFile C:\temp\webmodel.zip ; \
Expand-Archive -Path 'C:\temp\webmodel.zip' -DestinationPath 'C:\inetpub\wwwroot' -Force ; \
Remove-Item C:\temp\webmodel.zip -Force

Quello che lo script sta andando a fare, attraverso la sintassi FROM, è utilizzare l’immagine microsoft/iis (se l’immagine non è presente nel nostro catalog, sarà scaricata dal Docker Hub). Successivamente saranno eseguiti due comandi, attraverso la sintassi RUN, il primo per creare una cartella ed il secondo con un subset di comandi in PowerShell, che vanno ad attivare i ruoli di ASP.Net, scaricare un file contenente un sito web da un repository esterno, espandere questo file nella cartella di default di IIS ed infine eliminare il file compresso.

Per copiare un file avrei anche potuto utilizzare la sintassi COPY, con l’unica variabile che il file source si sarebbe dovuto trovare all’interno del Container Host e nello specifico nella stessa cartella in cui eseguo il comando docker run.

Una volta completato il Dockerfile, potrò creare il mio container tramite il comando docker build -t containername .

Il punto finale indica di utilizzare il Dockerfile nella stessa cartella in cui il prompt PowerShell è posizionato. Nel caso vogliate usare un file posizionato in una cartella diversa, dovrete specificare il path come mostra la figura 1.

2016_11_08_docker-01
Figura 1 – Uso Dockerfile Esterno

Terminata la configurazione, sarà possibile visualizzare la propria immagine tramite il comando docker images, pronta per essere utilizzata per creare nuovi container.

Conclusioni

Ecco un altro esempio di come Docker può semplificare il deployment dei vostri workload, rispetto al classico modello basato su macchine virtuali. Inoltre Dockerfile si presta alla perfezione in presenza di più Container Host che servono per erogare servizi uguali, per esempio un web server.

Link Utili