Docker: immagini e Dockerfile
Pull, build, multi-stage, scansione vulnerabilità e pulizia delle immagini. Ogni comando è verificato e copiabile; in chat basta descrivere cosa vuoi fare.
12 comandi in questa pagina
- Come vedo le immagini scaricate?
- Come scarico una versione precisa di un'immagine?
- Come costruisco un'immagine da un Dockerfile?
- Come forzo una build senza cache (e con build-arg)?
- Come costruisco un'immagine multi-architettura (amd64+arm64)?
- Come taggo e pubblico un'immagine su un registry?
- Come vedo i layer e il peso di un'immagine?
- Come pulisco le immagini inutilizzate?
- Come scansiono un'immagine per vulnerabilità?
- Come sposto un'immagine senza registry (tar)?
- Come snellisco un'immagine con la build multi-stage?
- Come controllo un Dockerfile con un linter?
# Come vedo le immagini scaricate?
docker images
Con --filter dangling=true vedi gli strati orfani che occupano spazio.
Approfondisci: Come si mette in sicurezza un container (e le sue immagini)?
# Come scarico una versione precisa di un'immagine?
docker pull nginx:1.27
# blindata al byte: docker pull nginx@sha256:<digest>
Mai latest in produzione: il tag si muove, il digest no.
Approfondisci: Come si mette in sicurezza un container (e le sue immagini)?Come si aggiornano automaticamente i container (Watchtower e alternative)?
# Come costruisco un'immagine da un Dockerfile?
docker build -t miaapp:1.0 .
Il . è il build context: tienilo piccolo con un .dockerignore, o ogni build spedisce gigabyte al daemon.
Approfondisci: Come si mette in sicurezza un container (e le sue immagini)?
# Come forzo una build senza cache (e con build-arg)?
docker build --no-cache --build-arg VERSIONE=2 -t miaapp:2.0 .
--no-cache serve quando un RUN scarica risorse che cambiano fuori dal Dockerfile.
Approfondisci: Come si mette in sicurezza un container (e le sue immagini)?
# Come costruisco un'immagine multi-architettura (amd64+arm64)?
docker buildx build --platform linux/amd64,linux/arm64 -t utente/app:1.0 --push .
Serve buildx con QEMU; --push è obbligatorio: il manifest multi-arch non vive nello store locale.
Approfondisci: Come si mette in sicurezza un container (e le sue immagini)?
# Come taggo e pubblico un'immagine su un registry?
docker tag miaapp:1.0 registry.example.com/miaapp:1.0
docker push registry.example.com/miaapp:1.0
Il nome dell'immagine È l'indirizzo del registry: il tag decide dove finisce il push.
Approfondisci: Come si mette in sicurezza un container (e le sue immagini)?
# Come vedo i layer e il peso di un'immagine?
docker history <immagine>
Dimensione per layer: il posto dove scoprire perché l'immagine pesa 2 GB (di solito un COPY o un apt senza pulizia).
Approfondisci: Come si mette in sicurezza un container (e le sue immagini)?
# Come pulisco le immagini inutilizzate?
docker image prune # solo dangling
docker image prune -a # tutte le non usate
-a rimuove OGNI immagine non riferita da un container: il prossimo up riscarica tutto.
Approfondisci: Storage pieno su Proxmox: come liberare spazio senza disastri
# Come scansiono un'immagine per vulnerabilità?
trivy image nginx:1.27
# oppure: docker scout cves nginx:1.27
Da mettere in CI, non da lanciare una volta l'anno: le CVE arrivano dopo la build.
Approfondisci: Come si mette in sicurezza un container (e le sue immagini)?Cos'è la supply chain security del software (SBOM, SLSA)?
# Come sposto un'immagine senza registry (tar)?
docker save -o app.tar miaapp:1.0
docker load -i app.tar
save/load per le immagini; export/import (diverso!) è per il filesystem di un container.
Approfondisci: Come si mette in sicurezza un container (e le sue immagini)?
# Come snellisco un'immagine con la build multi-stage?
FROM golang:1.23 AS build
WORKDIR /src
COPY . .
RUN go build -o app
FROM gcr.io/distroless/static
COPY --from=build /src/app /
ENTRYPOINT ["/app"]
Compili nel primo stage, spedisci solo il binario: immagini 10-100 volte più piccole e molta meno superficie d'attacco.
Approfondisci: Come si mette in sicurezza un container (e le sue immagini)?
# Come controllo un Dockerfile con un linter?
hadolint Dockerfile
Intercetta i classici: latest, apt senza pulizia della cache, USER mancante (container che gira da root).
Approfondisci: Come si mette in sicurezza un container (e le sue immagini)?Container privilegiati o non privilegiati: quale usare?