Cilat janë imazhet e varura Docker?


Imazhet e varura Docker janë shtresa të paetiketuara dhe të papërdorura që ekzistojnë në sistemin e skedarëve të hostit tuaj. Ju mund të mos jeni të vetëdijshëm për praninë e tyre dhe ato zakonisht janë mbeturina të padëshiruara.

Në këtë artikull do të mësoni se si lindin imazhet e varura dhe çfarë mund të bëni për t'i pastruar ato. Është një ide e mirë të inspektoni periodikisht sa imazhe të varura keni, në mënyrë që të shmangni humbjen e kapacitetit të diskut.

Çfarë është një imazh i varur?

Një imazh i varur është thjesht një imazh i papërdorur që nuk ka emër dhe etiketë. Ju mund t'i dalloni lehtësisht imazhet e varura kur përdorni komandën imazhe docker sepse ato shfaqen si :.

Në këtë shembull, imazhi i parë në listë është një imazh i varur:

$ docker images
<none>                              <none>    509bc96b727d   2 months ago    55.3MB
mysql                               5.7       f26e21ddd20d   4 months ago    450MB
gcr.io/k8s-minikube/kicbase         v0.0.30   1312ccd2422d   6 months ago    1.14GB
hello-world                         latest    feb5d9fea6a5   11 months ago   13.3kB

Imazhi është i pa etiketuar, por ende mbetet në sistemin tuaj. Në këtë rast, 55.3 MB hapësirë në disk harxhohet.

Mund të verifikoni që imazhi është i varur dhe jo thjesht i papërdorur duke kontrolluar nëse ndonjë kontejner i referohet asaj:

$ docker ps -a
CONTAINER ID   IMAGE                                      COMMAND                  CREATED          STATUS                   
2aa683500ee0   gcr.io/k8s-minikube/kicbase:v0.0.30        "/usr/local/bin/entr..."   18 hours ago     Exited (130) 18 hours ago

Asnjë kontenier nuk i referohet imazhit : me ID 509bc96b727d kështu që është padyshim i varur. Vini re se imazhet e MySQL dhe Hello World nuk klasifikohen si të varura – pavarësisht se nuk përdoren nga kontejnerët, ato janë etiketuar siç duhet, kështu që supozohet se do të dëshironi t'i mbani ato.

Si krijohen imazhet e varura?

Imazhet e varura zakonisht krijohen kur një imazh ekzistues zëvendësohet nga një ndërtim i ri. Këtu është një Dockerfile e thjeshtë për të demonstruar se çfarë ndodh:

FROM alpine:latest
COPY demo.txt /demo.txt

Krijoni një skedar të quajtur demo.txt në drejtorinë tuaj të punës dhe shtoni disa përmbajtje në të:

$ echo 1 > demo.txt

Tani ndërtoni imazhin tuaj me docker build:

$ docker build -t demo:latest .

Ekzekutoni komandën imazhe docker për të parë imazhin tuaj të ri:

REPOSITORY                          TAG       IMAGE ID       CREATED          SIZE
demo                                latest    40395b6c1362   24 seconds ago   5.54MB

Tani modifikoni përmbajtjen e demo.txt dhe rindërtoni imazhin tuaj:

$ echo 2 > demo.txt
$ docker build -t demo:latest .

Përdoret i njëjti etiketë imazhi – demo: fundit – kështu që ky ndërtim zëvendëson të parin. Ekzekutoni imazhet docker për të parë efektin:

REPOSITORY                          TAG       IMAGE ID       CREATED         SIZE
demo                                latest    3d5052e52b4c   3 seconds ago   5.54MB
<none>                              <none>    40395b6c1362   59 seconds ago   5.54MB

Imazhi i ri është krijuar me ID 3d5052e52b4c dhe etiketën demo:latest. Imazhi i parë, ID 40395b6c1362, ekziston ende, por nuk është etiketuar. Tani shfaqet si :. Ky imazh është bërë një imazh i varur pasi asnjë kontejnerë nuk e përdor atë.

Mund të përdorni një imazh të varur?

Imazhet e varura funksionojnë si çdo imazh tjetër. Dallimi i vetëm është etiketa që mungon. Ju mund të nisni një kontejner nga një imazh i varur duke iu referuar drejtpërdrejt ID-së së imazhit:

$ docker run -it 40395b6c1362 sh
/ #

Teknikisht, imazhi nuk është më i varur, sepse tani përdoret në mënyrë aktive nga një enë. Është e zakonshme që kontejnerët të përfundojnë me një imazh asnjë nëse heq ose rindërton etiketën që kanë përdorur. Kontejnerët me një imazh të pa etiketuar do të shfaqin ID-në e imazhit në kolonën IMAGE kur përdorni docker ps, në vend të etiketës së zakonshme.

$ docker ps
CONTAINER ID   IMAGE                                      COMMAND                  CREATED         STATUS        PORTS                NAMES
26d5609ba75c   40395b6c1362                               "sh"                     2 seconds ago   Up 1 second                        inspiring_lederberg
91ab866b59a2   portainer/portainer-ce                     "/portainer"             2 weeks ago     Up 2 days     8000/tcp, 9443/tcp   portainer_portainer_1

Pastrimi i imazheve të varura

Ju mund të fshini një imazh të vetëm të varur duke përdorur komandën docker rmi, ashtu si çdo imazh tjetër. Për shkak se imazhi nuk do të etiketohet, do t'ju duhet ta identifikoni atë me ID-në e tij.

$ docker rmi 40395b6c1362

Një mënyrë më e mirë për të pastruar shumë imazhe të varura është komanda docker image prune. Kjo do të heqë automatikisht të gjitha imazhet e varura në hostin tuaj Docker.

$ docker image prune
Total reclaimed space: 5.54 MB

Dalja e komandës tregon sasinë e hapësirës në disk që u lirua. Kontrolloni nëse imazhet tuaja janë vërtet të varura nëse asgjë nuk fshihet. Nuk është e mundur të hiqni imazhet e përdorura në mënyrë aktive nga kontejnerët. Së pari do t'ju duhet të fshini kontejnerët me docker rm, përpara se të përpiqeni të shkurtoni imazhet tuaja.

Mund të zbuloni se keni një imazh të varur që dëshironi ta ripërdorni në të ardhmen. Në këtë situatë mund ta ri-etiketoni me komandën etiketë docker. Kjo do ta bëjë më të lehtë identifikimin e imazhit dhe do të parandalojë që ai të synohet nga operacionet e ardhshme të krasitjes.

$ docker tag 40395b6c1362 demo:latest

Po në lidhje me shtresat e ndërmjetme?

Imazhet që shfaqen si : mund të mos jenë imazhe të varura. Në mënyrë konfuze, kjo situatë ndodh edhe për imazhet e krijuara si shtresa të ndërmjetme gjatë një ndërtimi.

Çdo hap në një Dockerfile rezulton në krijimin e një shtrese të re të ndërmjetme. Imazhi i prodhuar në fund të ndërtimit i caktohet etiketa që ju specifikoni. Shtresat e tjera të ndërmjetme mbeten të paetiketuara dhe mund të shikohen duke ekzekutuar imazhet e docker -a.

Këto shtresa nuk janë imazhe të varura sepse imazhet e mëvonshme në zinxhirin e ndërtimit varen prej tyre. Ato referohen nga çdo shtresë e njëpasnjëshme dhe nuk shkaktojnë problem në hapësirën e diskut. Ju mund të ndaloni që shtresat e ndërmjetme të vazhdojnë në disk duke përfshirë flamurin --rm në kohën e ndërtimit:

$ docker build --rm -t demo:latest .

Përmbledhje

Imazhet e varura janë imazhe Docker të paetiketuara që nuk përdoren nga një kontejner ose varen nga një pasardhës. Zakonisht nuk shërbejnë për asnjë qëllim, por ende konsumojnë hapësirë në disk. Ju do të grumbulloni imazhe të varura kur zëvendësoni një etiketë ekzistuese duke filluar një ndërtim të ri.

Të gjitha imazhet e varura shfaqen si : në Docker CLI. Të kesh shumë prej tyre mund të jetë dërrmuese kur ke dhjetëra imazhe pa asnjë informacion për identitetin e tyre të vërtetë. Ekzekutimi i rregullt i imazheve docker prune do të shmangë humbjen e hapësirës në disk dhe do të rezultojë në një listë më të shkurtër imazhesh.