Capitolo 4 – Gestione delle Immagini Docker e Dockerfile
In questo capitolo vedremo come:
- Cercare immagini Docker
- Scaricare e gestire immagini locali
- Creare immagini personalizzate
- Scrivere un Dockerfile
- Ottimizzare le immagini
4.1 Cosa sono le immagini Docker
Un'immagine Docker è un template immutabile utilizzato per creare container.
Le immagini:
- Sono composte da layer (livelli)
- Sono versionate tramite tag
- Possono essere archiviate in registry pubblici o privati
Il registry pubblico predefinito è Docker Hub:
https://hub.docker.com/
4.2 Ricerca di un'immagine
Per cercare un'immagine nel registry:
docker search nginx
L'output mostrerà:
- NAME
- DESCRIPTION
- STARS
- OFFICIAL
Le immagini ufficiali sono contrassegnate come OFFICIAL.
4.3 Scaricare un'immagine
Per scaricare un'immagine:
docker pull nginx
Per scaricare una versione specifica:
docker pull nginx:1.25
Se non si specifica un tag, Docker utilizza automaticamente latest.
4.4 Visualizzare le immagini locali
Per vedere le immagini presenti nel sistema:
docker images
Oppure:
docker image ls
L'output mostra:
- REPOSITORY
- TAG
- IMAGE ID
- CREATED
- SIZE
4.5 Eliminare un'immagine
Per rimuovere un'immagine:
docker rmi nginx
Oppure tramite ID:
docker rmi <image_id>
Per forzare la rimozione:
docker rmi -f nginx
4.6 Creare un'immagine personalizzata con Dockerfile
Un Dockerfile è un file di testo che contiene le istruzioni per costruire un'immagine personalizzata.
Esempio base:
FROM debian:12
RUN apt update && apt install -y nginx
EXPOSE 80
CMD ["nginx", "-g", "daemon off;"]
Salvare il file con nome:
Dockerfile
4.7 Costruire un'immagine
Dalla directory dove si trova il Dockerfile:
docker build -t mio-nginx:1.0 .
Spiegazione:
-tassegna nome e tag.indica il contesto di build (directory corrente)
Verifica:
docker images
4.8 Avviare un container dalla propria immagine
docker run -d -p 8080:80 --name webtest mio-nginx:1.0
Parametri utilizzati:
-desecuzione in background-p 8080:80mappatura porta host → container--nameassegna un nome al container
Aprire nel browser:
http://localhost:8080
4.9 Comprendere i layer delle immagini
Ogni istruzione come:
- RUN
- COPY
- ADD
genera un layer.
Per visualizzare la cronologia:
docker history mio-nginx:1.0
Meno layer inutili significano immagini più leggere ed efficienti.
4.10 Ottimizzazione delle immagini
Unire i comandi RUN
Meglio scrivere:
RUN apt update && \
apt install -y nginx && \
apt clean && \
rm -rf /var/lib/apt/lists/*
Usare immagini leggere
Esempi:
- alpine
- debian:slim
Multi-stage build (concetto base)
Permette di costruire in uno stage e copiare solo il necessario nell'immagine finale.
Esempio:
FROM golang:1.22 AS builder
WORKDIR /app
COPY . .
RUN go build -o app
FROM debian:12-slim
WORKDIR /app
COPY --from=builder /app/app .
CMD ["./app"]
Questo riduce la dimensione finale dell'immagine.
4.11 File .dockerignore
Permette di escludere file dal contesto di build.
Esempio:
.git
node_modules
*.log
4.12 Best Practice
- Specificare sempre il tag dell'immagine
- Evitare
latestin produzione - Ridurre il numero di layer
- Eliminare file temporanei durante la build
- Utilizzare immagini ufficiali quando possibile
Conclusione
Ora sai:
- Gestire immagini Docker
- Creare Dockerfile
- Costruire immagini personalizzate
- Ottimizzare le build
Nel prossimo capitolo vedremo la gestione avanzata dei container, inclusi volumi, reti e limiti di risorse.
No comments to display
No comments to display