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
RUNseparat ca să micșorezi imaginea: stratul anterior rămâne, deci mărimea totală nu scade. Instalează și curăță în acelașiRUNsau folosește un build în mai multe etape. - Încercarea de a ascunde un secret cu
ENVși apoiunset:docker history --no-truncafișează valoarea din instrucțiune. FoloseșteRUN --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.