Docker - Creare Immagini

in Architetture Software

Docker – Creare Immagini

Reading Time: 2 minutes

Ripartendo dal post precedente in cui veniva descritta l’architettura di docker, nel corso di questo post verrà descritta la modalità di creazione di immagini tramite DockerFile.

Quello che avviene durante le fasi di deploy di un container docker si basa sull’utilizzo di immagini create in precedenza da qualcuno. Individuata l’immagine, viene scaricata in locale e successivamente eseguita. In questo post analizzerò Dockerfile per la creazione di immagini customizzate.

DockerFile è un file di testo all’interno del quale sono indicate tutte le indicazioni per creare l’immagine (partendo ad esempio da una base-image) con all’interno il nostro software. Il linguaggio utilizzato per la scrittura del docker file è YAML.

DockerFile pipeline

Di seguito la pipeline per la creazione di una nuova immagine:

  • DockerFile: viene creato un file di testo denominato DockerFile all’interno del quale vengono specificati tutti i prerequisiti dell’immagine che dovrà essere creata
  • DockerClient: tramite il docker client (command line) verranno eseguiti i comandi in locale per la generazione dell’immagine
  • DockerServer: processerà i comandi impartiti tramite DockerClient per la generazione dell’immagine
  • Immagine: l’immagine finale risulta pronta per essere eseguita ed eventualmente deployata all’internod di un repository temporaneo

L’ultimo passo della pipeline è l’immagine generata.

Il flusso generico presente all’interno di un DockerFile è così composto:

  1. Specifica della base-image (presente all’interno del repository remoto/locale)
  2. Esecuzione di comandi aggiuntivi per installare software all’interno della base-image (anche il nostro software)
  3. Specificare il comando che deve essere eseguito al momento dell’avvio del container

Esempio: crezione di un’immagine custom che esegue Redis

Supponiamo di voler realizzare un’immagine custom che una volta istanziata cosenta di eseguire un container con redis. Il primo passo consiste nella creazione di una cartella dedicata al progetto, con al suo interno un file vuoto chiamato DockerFile. Utilizzando l’editor di testo preferito (Visual Studio Code 🙂 ) si può procedere con la crezione del DockerFile.

#Speciica della base-image
FROM alpine

#Esecuzione comandi aggiuntivi per installare software 
RUN apk add --update redis

#Definizione del comando da eseguire all'avvio
CMD ["redis-server"]

La definizione del DockerFile rispetta i passi del flusso generico definito in precedenza. A questo punto si può procedere con la generazione dell’immagine utilizzando il comando docker build . Posizionandoci all’interno della cartella in cui è presente il DockerFile, il comando da utilizzare è:

docker build .

Il comando eseguirà tutti i passaggi indicati all’interno del file: è da notare che se la base-image è già presente in locale (la versione indicata, in questo caso latest) non verrà scaricata dal repository.

A questo punto l’immagine è stata creata e sarà possibile mandarla in eseucuzione con il comando docker run <immagine>