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.