docker history în Docker

Imagini Docker 1.0+

Afișează straturile unei imagini, cu instrucțiunea Dockerfile care a creat fiecare strat și mărimea lui.

Sintaxă comandă
docker history [opțiuni] <imagine>

Ce face docker history

Fiecare instrucțiune dintr-un Dockerfile care modifică fișiere (RUN, COPY, ADD) produce un strat; celelalte (ENV, CMD, EXPOSE) adaugă doar metadate, cu mărimea 0B. docker history listează aceste straturi de la cel mai nou la cel mai vechi, ca să vezi ce ocupă spațiu în imagine.

Coloana IMAGE arată <missing> pentru straturile intermediare: este normal pentru imaginile construite cu BuildKit sau descărcate dintr-un registru. Comanda arată și valorile scrise în Dockerfile (inclusiv ENV și ARG folosite în RUN), motiv pentru care parolele nu trebuie puse niciodată acolo.

Parametri

Parametru Descriere
--no-trunc Afișează comenzile complete, netrunchiate.
-H, --human Mărimi și date ușor de citit (implicit activ); --human=false afișează octeți și date exacte.
-q, --quiet Afișează doar ID-urile straturilor.
--format Șablon Go pentru coloane, de exemplu '{{.Size}}\t{{.CreatedBy}}'.

Exemple

Exemplul 1: Straturile unei imagini Node.js

Pasul npm ci este cel mai mare strat: acolo merită optimizat.

docker history magazin-api:1.3

Ieșire în terminal

IMAGE          CREATED       CREATED BY                                      SIZE      COMMENT
5d2e8f9a1c37   2 hours ago   CMD ["node" "server.js"]                        0B        buildkit.dockerfile.v0
<missing>      2 hours ago   USER app                                        0B        buildkit.dockerfile.v0
<missing>      2 hours ago   COPY --chown=app:app . . # buildkit             1.84MB    buildkit.dockerfile.v0
<missing>      2 hours ago   RUN /bin/sh -c npm ci --omit=dev # buildkit     48.2MB    buildkit.dockerfile.v0
<missing>      2 hours ago   COPY --chown=app:app package*.json ./ # buil…   312kB     buildkit.dockerfile.v0
<missing>      2 hours ago   WORKDIR /app                                    0B        buildkit.dockerfile.v0
<missing>      3 weeks ago   CMD ["node"]                                    0B        buildkit.dockerfile.v0
...

Exemplul 2: Doar mărimea și comanda, pentru straturile care ocupă spațiu

Cu --format și grep -v ascundem straturile de 0 octeți.

docker history --format '{{.Size}}\t{{.CreatedBy}}' magazin-api:1.3 | grep -v '^0B'

Ieșire în terminal

1.84MB	COPY --chown=app:app . . # buildkit
48.2MB	RUN /bin/sh -c npm ci --omit=dev # buildkit
312kB	COPY --chown=app:app package*.json ./ # buil…
...

Greșeli frecvente

  • Ștergerea fișierelor într-un pas RUN separat ca să micșorezi imaginea: stratul anterior rămâne, deci mărimea totală nu scade. Instalează și curăță în același RUN sau folosește un build în mai multe etape.
  • Încercarea de a ascunde un secret cu ENV și apoi unset: docker history --no-trunc afișează valoarea din instrucțiune. Folosește RUN --mount=type=secret.

Comenzi înrudite

  • docker manifest: Inspectează și creează liste de manifeste: o singură etichetă de imagine pentru mai multe arhitecturi (amd64, arm64).
  • docker search: Caută imagini în Docker Hub direct din terminal, cu filtre pentru imagini oficiale și număr minim de stele.