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 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: -t assegna 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: -d esecuzione in background -p 8080:80 mappatura porta host → container --name assegna 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 latest in 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.