Cum să enumerați și să eliminați imaginea Docker?

Publicat: 2021-08-03

Docker este o platformă binecunoscută care vă permite să gestionați rularea și expedierea aplicațiilor dvs. ca containere care împachetează sistemul de operare și bibliotecile dependente împreună cu aplicația dvs.

Vom acoperi gestionarea imaginilor Docker, în principal informarea despre modalitățile de a enumera imaginile Docker și de a obține informațiile necesare și apoi de a învăța să eliminați una sau mai multe imagini într-un mod eficient.

Deci sa începem.

Listarea imaginilor Docker

Pentru a lista imaginile Docker extrase, utilizați:

 abhisheknair@geekflare:~$ docker image ls REPOSITORY TAG IMAGE ID CREATED SIZE redis latest aa4d65e670d6 9 days ago 105MB mysql latest c60d96bd2b77 10 days ago 514MB ubuntu latest c29284518f49 2 weeks ago 72.8MB nginx latest 4cdc5dd7eaad 3 weeks ago 133MB hello-world latest d1165f221234 4 months ago 13.3kB redis 4.0 191c4017dcdd 15 months ago 89.3MB abhisheknair@geekflare:~$

Ca și în cazul altor comenzi docker , acceptă comanda images cu mai multe opțiuni.

 $ docker images [OPTIONS] [REPOSITORY[:TAG]]

Dacă rulați docker images fără opțiuni, vă vor afișa imaginile de nivel superior, cum ar fi docker image ls , depozitul și etichetele lor și dimensiunea lor pe disc.

 abhisheknair@geekflare:~$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE mysql latest c60d96bd2b77 10 days ago 514MB ubuntu latest c29284518f49 2 weeks ago 72.8MB nginx latest 4cdc5dd7eaad 3 weeks ago 133MB hello-world latest d1165f221234 4 months ago 13.3kB redis 4.0 191c4017dcdd 15 months ago 89.3MB abhisheknair@geekflare:~$

Aceste imagini au straturi intermediare care cresc gradul de utilizare, accelerează procesul de construire și reduc utilizarea discului, ceea ce nu este afișat de comanda de mai sus. SIZE este spațiul combinat ocupat de imagine și de toate imaginile părinte ale acesteia. Dacă salvați conținutul imaginii ca fișier Tar atunci când save o imagine prin docker, aceasta va fi egală cu această dimensiune listată.

O imagine este listată de mai multe ori dacă are mai multe nume de depozit sau etichete, deși singura imagine identificată prin IMAGE ID utilizează SIZE listată o singură dată.

Listează cele mai recente imagini

 abhisheknair@geekflare:~$ docker images REPOSITORY TAG IMAGE ID CREATED SIZE mysql latest c60d96bd2b77 10 days ago 514MB ubuntu latest c29284518f49 2 weeks ago 72.8MB nginx latest 4cdc5dd7eaad 3 weeks ago 133MB hello-world latest d1165f221234 4 months ago 13.3kB redis 4.0 191c4017dcdd 15 months ago 89.3MB abhisheknair@geekflare:~$

Listați imaginile după depozit și etichetă

Pentru a lista toate imaginile care aparțin unui anumit depozit, specificați numele depozitului ca:

 abhisheknair@geekflare:~$ docker images redis REPOSITORY TAG IMAGE ID CREATED SIZE redis latest aa4d65e670d6 9 days ago 105MB redis 4.0 191c4017dcdd 15 months ago 89.3MB abhisheknair@geekflare:~$

În plus, puteți specifica numele depozitului cu o etichetă pentru o ieșire mai filtrată:

 abhisheknair@geekflare:~$ docker images redis:4.0 REPOSITORY TAG IMAGE ID CREATED SIZE redis 4.0 191c4017dcdd 15 months ago 89.3MB abhisheknair@geekflare:~$

Listați ID-uri de imagine pe lungime completă

Pentru a lista toate imaginile fără a trunchia IMAGE ID , utilizați:

 abhisheknair@geekflare:~$ docker images --no-trunc REPOSITORY TAG IMAGE ID CREATED SIZE redis latest sha256:aa4d65e670d6518e5da96ca9d1a76370a942970a8802e6d5cc6bcf058ab12ca7 9 days ago 105MB mysql latest sha256:c60d96bd2b771a8e3cae776e02e55ae914a6641139d963defeb3c93388f61707 10 days ago 514MB ubuntu latest sha256:c29284518f497b8c5f49933e74e43ca5221e69c8251e780427f7d12f716625ff 2 weeks ago 72.8MB nginx latest sha256:4cdc5dd7eaadff5080649e8d0014f2f8d36d4ddf2eff2fdf577dd13da85c5d2f 3 weeks ago 133MB hello-world latest sha256:d1165f2212346b2bab48cb01c1e39ee8ad1be46b87873d9ca7a4e434980a7726 4 months ago 13.3kB redis 4.0 sha256:191c4017dcdd3370f871a4c6e7e1d55c7d9abed2bebf3005fb3e7d12161262b8 15 months ago 89.3MB abhisheknair@geekflare:~$

Listează Rezumate de imagini

Imaginile Docker care utilizează formatul v2 sau o versiune ulterioară au un identificator adresabil la conținut cunoscut sub numele de digest . Pentru a lista valorile rezumatelor imaginii, utilizați --digest ca:

 abhisheknair@geekflare:~$ docker images --digests REPOSITORY TAG DIGEST IMAGE ID CREATED SIZE redis latest sha256:cd0c68c5479f2db4b9e2c5fbfdb7a8acb77625322dd5b474578515422d3ddb59 aa4d65e670d6 9 days ago 105MB mysql latest sha256:8b928a5117cf5c2238c7a09cd28c2e801ac98f91c3f8203a8938ae51f14700fd c60d96bd2b77 10 days ago 514MB ubuntu latest sha256:b3e2e47d016c08b3396b5ebe06ab0b711c34e7f37b98c9d37abe794b71cea0a2 c29284518f49 2 weeks ago 72.8MB nginx latest sha256:c5aab9d8e259d54af91e0548abf1fa8188a43079eb86b6ba8df9f482a5380720 4cdc5dd7eaad 3 weeks ago 133MB hello-world latest sha256:df5f5184104426b65967e016ff2ac0bfcd44ad7899ca3bbcf8e44e4461491a9e d1165f221234 4 months ago 13.3kB redis 4.0 sha256:2e03fdd159f4a08d2165ca1c92adde438ae4e3e6b0f74322ce013a78ee81c88d 191c4017dcdd 15 months ago 89.3MB abhisheknair@geekflare:~$

Cu un registru 2.0 , puteți utiliza aceste rezumate cu comenzile push , pull , create , run și rmi . Acest lucru funcționează și cu comanda FROM într-un Dockerfile .

Filtrarea ieșirii

Comanda docker acceptă filtrarea cu images utilizând flag --filter . Filtrele acceptate în prezent sunt:

  • atârnând (boolean – adevărat sau fals)
  • etichetă ( label=<key> sau label=<key>=<value> )
  • înainte ( <image-name>[:<tag>] , <image id> sau <image@digest> ) – filtrează imaginile create înainte de identificarea sau referințele date
  • întrucât ( <image-name>[:<tag>] , <image id> sau <image@digest> ) – filtrează imaginile create de la ID-ul sau referințele date
  • referință (modelul unei referințe de imagine) – filtrează imaginile a căror referință se potrivește cu modelul specificat

În plus, puteți utiliza mai multe filtre combinându-le, cum ar fi:

 $ docker images --filter "<key1>=<value1>" --filter"<key2>=<value2>"

Exemplu:

 abhisheknair@geekflare:~$ docker images --filter "before=redis" --filter "since=hello-world" REPOSITORY TAG IMAGE ID CREATED SIZE mysql latest c60d96bd2b77 10 days ago 514MB ubuntu latest c29284518f49 2 weeks ago 72.8MB nginx latest 4cdc5dd7eaad 3 weeks ago 133MB abhisheknair@geekflare:~$

Formatarea ieșirii

docker images acceptă ieșirea de formatare care poate fi necesară pentru imbricarea cu alte comenzi, scripturi sau altfel. Acestea sunt substituenții acceptați pentru --format :

Substituent Descriere
.ID ID imagine
.Repository Depozitul de imagini
.Tag Etichetă imagine
.Digest Rezumat imagini
.CreatedSince Timp scurs de la crearea imaginii
.CreatedAt Ora la care a fost creată imaginea
.Size Dimensiunea discului de imagine

Ca exemplu, comanda de mai jos imprimă rezultatul fără antete și scoate ID -ul și Repository separate prin două puncte ( : ) pentru toate imaginile:

 abhisheknair@geekflare:~$ docker images --format "{{.ID}}: {{.Repository}}" aa4d65e670d6: redis c60d96bd2b77: mysql c29284518f49: ubuntu 4cdc5dd7eaad: nginx d1165f221234: hello-world 191c4017dcdd: redis abhisheknair@geekflare:~$

Sau pentru a lista toate imaginile cu depozitul și eticheta lor într-un format de tabel, puteți utiliza:

 abhisheknair@geekflare:~$ docker images --format "table {{.ID}}\t{{.Repository}}\t{{.Tag}}" IMAGE ID REPOSITORY TAG aa4d65e670d6 redis latest c60d96bd2b77 mysql latest c29284518f49 ubuntu latest 4cdc5dd7eaad nginx latest d1165f221234 hello-world latest 191c4017dcdd redis 4.0 abhisheknair@geekflare:~$

Eliminarea imaginilor Docker

Pentru a elimina una sau mai multe imagini Docker din sistem, folosim:

 $ docker image rm [OPTIONS] IMAGE [IMAGE...]

Pentru a elimina o singură imagine, trebuie doar să specificați numele imaginii:

 abhisheknair@geekflare:~$ docker image rm redis Untagged: redis:latest Untagged: redis@sha256:cd0c68c5479f2db4b9e2c5fbfdb7a8acb77625322dd5b474578515422d3ddb59 Deleted: sha256:aa4d65e670d6518e5da96ca9d1a76370a942970a8802e6d5cc6bcf058ab12ca7 Deleted: sha256:3bd00d38f5ca70200050477c527cc60cfdf82911d6fe03932e2bcae31a95cfa2 Deleted: sha256:22722fde392d188cfbe5bbd0c2451cc71cf5b000afc0e5114c1066bb5e113ec9 Deleted: sha256:38212b55ef525e86cd726cd83c1a82a6009c68d24771d6e93d439fdc88e66f0e Deleted: sha256:188c498579cef37b65a93d6448c6b129fa07d5740fc213a18843ff22d80cd10d Deleted: sha256:2117165cd53c98f13ec7af36c9d8acd239fc541c847efaccb49885decf615d68 abhisheknair@geekflare:~$

Sau pentru a elimina mai multe imagini, specificați mai multe nume de imagini separate prin spațiu:

 abhisheknair@geekflare:~$ docker image rm redis mariadb Untagged: redis:latest Untagged: redis@sha256:cd0c68c5479f2db4b9e2c5fbfdb7a8acb77625322dd5b474578515422d3ddb59 Deleted: sha256:aa4d65e670d6518e5da96ca9d1a76370a942970a8802e6d5cc6bcf058ab12ca7 Deleted: sha256:3bd00d38f5ca70200050477c527cc60cfdf82911d6fe03932e2bcae31a95cfa2 Deleted: sha256:22722fde392d188cfbe5bbd0c2451cc71cf5b000afc0e5114c1066bb5e113ec9 Deleted: sha256:38212b55ef525e86cd726cd83c1a82a6009c68d24771d6e93d439fdc88e66f0e Deleted: sha256:188c498579cef37b65a93d6448c6b129fa07d5740fc213a18843ff22d80cd10d Deleted: sha256:2117165cd53c98f13ec7af36c9d8acd239fc541c847efaccb49885decf615d68 Untagged: mariadb:latest Untagged: mariadb@sha256:3b6f9fa1d406e168998d62501b2ee4f27d53138bebfcdac03540758996c5ff1d Deleted: sha256:fd17f57768027456cc17987058474fb21d3c51e9dd764e4497c1dfe92ff058db Deleted: sha256:a638f04e531b032c81a84bda59a36d1df3c4cec62560c403bc2edb642bce79ba Deleted: sha256:af7a7e7bf72e7ad0c5227995f219d9094fafbe0ac973dbe7eb4ab190a5a58ba5 Deleted: sha256:a0cfd81b291e8da6bca0731c9db70fe1b61d176906b1cf05ade1cd61572ffaaa Deleted: sha256:38b00cb5dab64398092fab2b18563af1ef4a9445dec8a531ac725059dc218f41 Deleted: sha256:6e60d29d2d76125f989f503a78729984f7ba3e26bfbf7038d5ab644b8755b7c2 Deleted: sha256:1dafdd60e471b4c1f5244cfe1d20d79f934f504ef42180b637886be2b0b74370 Deleted: sha256:2fffe8e736cdb99359084e297f4bb54a4cac879366bd3e4333d3dbe966f8e9a6 Deleted: sha256:f728037697805db453111266541c202c74971484ef359ea29b9c60064ed9e47e Deleted: sha256:28155a13db3520201db576bf6d56b68fc08ef27b1c4c49dbfeadef523d35c5f0 Deleted: sha256:7555a8182c42c7737a384cfe03a3c7329f646a3bf389c4bcd75379fc85e6c144 abhisheknair@geekflare:~$

Îndepărtarea forțată

Este posibil să ruleze containere care utilizează imaginile pe care încercați să le ștergeți. În astfel de cazuri, Docker vă va emite un avertisment atunci când încercați să ștergeți o imagine de referință.

 abhisheknair@geekflare:~$ docker image rm nginx Error response from daemon: conflict: unable to remove repository reference "nginx" (must force) - container ce908eadf829 is using its referenced image 4cdc5dd7eaad abhisheknair@geekflare:~$

Puteți opri mai întâi containerul asociat și apoi reîncercați sau utilizați -f care forțează eliminarea imaginii (ai grijă).

 abhisheknair@geekflare:~$ docker image rm nginx -f Untagged: nginx:latest Untagged: nginx@sha256:c5aab9d8e259d54af91e0548abf1fa8188a43079eb86b6ba8df9f482a5380720 Deleted: sha256:4cdc5dd7eaadff5080649e8d0014f2f8d36d4ddf2eff2fdf577dd13da85c5d2f abhisheknair@geekflare:~$

Prune Imagini

Există anumite situații în care imaginile neutilizate consumă spațiu pe disc sau aveți nevoie doar de o curățare a imaginilor vechi atârnate. Puteți curăța astfel de imagini neutilizate utilizând:

 $ docker image prune

Exemplu:

 abhisheknair@geekflare:~$ docker image prune WARNING! This will remove all dangling images. Are you sure you want to continue? [y/N] y Total reclaimed space: 0B abhisheknair@geekflare:~$

Dacă doriți să curățați toate imaginile care nu sunt folosite și de niciun container, utilizați -a flag:

 abhisheknair@geekflare:~$ docker image prune -a WARNING! This will remove all images without at least one container associated to them. Are you sure you want to continue? [y/N] y Deleted Images: untagged: mariadb:latest untagged: mariadb@sha256:3b6f9fa1d406e168998d62501b2ee4f27d53138bebfcdac03540758996c5ff1d deleted: sha256:fd17f57768027456cc17987058474fb21d3c51e9dd764e4497c1dfe92ff058db deleted: sha256:a638f04e531b032c81a84bda59a36d1df3c4cec62560c403bc2edb642bce79ba deleted: sha256:af7a7e7bf72e7ad0c5227995f219d9094fafbe0ac973dbe7eb4ab190a5a58ba5 deleted: sha256:a0cfd81b291e8da6bca0731c9db70fe1b61d176906b1cf05ade1cd61572ffaaa deleted: sha256:38b00cb5dab64398092fab2b18563af1ef4a9445dec8a531ac725059dc218f41 deleted: sha256:6e60d29d2d76125f989f503a78729984f7ba3e26bfbf7038d5ab644b8755b7c2 deleted: sha256:1dafdd60e471b4c1f5244cfe1d20d79f934f504ef42180b637886be2b0b74370 deleted: sha256:2fffe8e736cdb99359084e297f4bb54a4cac879366bd3e4333d3dbe966f8e9a6 deleted: sha256:f728037697805db453111266541c202c74971484ef359ea29b9c60064ed9e47e deleted: sha256:28155a13db3520201db576bf6d56b68fc08ef27b1c4c49dbfeadef523d35c5f0 deleted: sha256:7555a8182c42c7737a384cfe03a3c7329f646a3bf389c4bcd75379fc85e6c144 untagged: redis:latest untagged: redis@sha256:cd0c68c5479f2db4b9e2c5fbfdb7a8acb77625322dd5b474578515422d3ddb59 deleted: sha256:aa4d65e670d6518e5da96ca9d1a76370a942970a8802e6d5cc6bcf058ab12ca7 deleted: sha256:3bd00d38f5ca70200050477c527cc60cfdf82911d6fe03932e2bcae31a95cfa2 deleted: sha256:22722fde392d188cfbe5bbd0c2451cc71cf5b000afc0e5114c1066bb5e113ec9 deleted: sha256:38212b55ef525e86cd726cd83c1a82a6009c68d24771d6e93d439fdc88e66f0e deleted: sha256:188c498579cef37b65a93d6448c6b129fa07d5740fc213a18843ff22d80cd10d deleted: sha256:2117165cd53c98f13ec7af36c9d8acd239fc541c847efaccb49885decf615d68 Total reclaimed space: 445.2MB abhisheknair@geekflare:~$

De asemenea, puteți utiliza --force sau -f pentru a continua curățarea fără confirmare sau puteți utiliza --filter pentru a furniza valori de filtru (de exemplu, „until=<timestamp>”) la comanda prune .

Exemplu:

 $ docker image prune -a --force --filter "until=2021-01-04T00:00:00"

Sau

 $ docker image prune --filter="label=deprecated"

Folosind comanda rmi

De asemenea, puteți utiliza comanda rmi cu rmi pentru a elimina imaginile.

Îndepărtează (și anulează etichetarea) una sau mai multe imagini din nodul Docker. Dacă o imagine are mai multe etichete, utilizarea acestei comenzi cu eticheta ca parametru elimină doar eticheta. Dacă eticheta este singura pentru imagine, atât imaginea, cât și eticheta sunt eliminate.

Această comandă nu șterge imaginile dintr-un registru. De asemenea, nu puteți elimina o imagine a unui container care rulează decât dacă utilizați opțiunea -f ca la comanda docker image rm .

Exemplu:

 abhisheknair@geekflare:~$ docker rmi alpine Untagged: alpine:latest Untagged: alpine@sha256:adab3844f497ab9171f070d4cae4114b5aec565ac772e2f2579405b78be67c96 Deleted: sha256:d4ff818577bc193b309b355b02ebc9220427090057b54a59e73b79bdfe139b83 Deleted: sha256:72e830a4dff5f0d5225cdc0a320e85ab1ce06ea5673acfe8d83a7645cbd0e9cf abhisheknair@geekflare:~$

De asemenea, puteți utiliza --no-prune pentru a specifica să nu ștergeți părinții neetichetați.

Opriți containerul și eliminați imaginile

În multe ocazii, poate fi necesar să opriți toate containerele și să eliminați toate imaginile asociate. Puteți face asta pur și simplu cu:

 $ docker rm -vf $(docker ps -a -q)

Comanda de mai sus va opri și va elimina cu forță toate containerele care rulează. Apoi putem trece la eliminarea imaginilor legate folosind:

 $ docker rmi -f $(docker images -a -q)

rezumat

Docker este un instrument versatil care este o parte esențială din arsenalul inginerului DevOps de astăzi și face parte din alte tehnologii în vogă, cum ar fi Kubernetes. Gestionarea imaginilor Docker este una dintre părțile esențiale ale gestionării și depanării unei implementări Docker.

Acum ar trebui să aveți o idee de bază despre capacitățile pe care le oferă comanda docker CLI cu comenzile sale precum image , images și rmi . Steagurile lor oferă personalizare suplimentară și oferă opțiuni avansate de filtrare și personalizare care pot ajuta la automatizare și la utilizare avansată.

Folosiți ajutorul docker [COMMAND] help pentru mai multe detalii despre opțiunile disponibile și subiectele de ajutor conexe.