Pustťe si do dockeru uklízečku

Nemáte na svém čistě pracovním počítači dost místa na fotky, hry, hudbu, filmy a jiné důležité věci? Zkusíme s tím něco udělat...

Adam Lindenthal

Photo by Oliver Hale on Unsplash

Při vývoji je to někdy podobné jako v dílně domácího kutila. V zápalu tvořivosti se prostě neřeší, kam upadne nějaký odřezek, kousek bužírky, kam ukápne trocha cínu nebo oleje a kde všude jsou piliny. Stejně tak s vidinou blížícího se cíle programátor stahuje další a další docker images, pouští containery, aby je za chvilku vyměnil za jiné, lepší... 

Jenže stejně jako kutil dnes obvykle nemá pro sebe celou stodolu, ale jen koutek někde ve sklepě či garáži, tak i developer se v dnešní době SSD disků nemůže roztahovat donekonečna. A zrovna Docker umí být po čase, zvlášť když se člověk zabývá povícero projekty najednou, na disku pěkný bumbrlíček. Znáte to, jako základ svého Dockerfile použijete skvěle vypadající base image, který má umět vykonávat nějakou triviální činnost, něco "málo" k tomu přihodíte, a až když nastartujete výsledný container, tak zjistíte, že obsahuje celou "dospělou", zcela neosekanou linuxovou distribuci a že ten krám teď už má jeden a půl giga.

Zatímco v dílně ale nakonec nezbývá než věchno pěkně sesbírat a pak vzít do ruky smeták nebo vysavač, s provozním nepořádkem kolem dockeru máme naštěstí po ruce něco lepšího.

Pryč s tím

Docker nabízí několik příkazů pro čištění různých zombíků - images, containerů, sítí... Zjistil jsem, že zdaleka ne všichni jsou o téhle možnosti vědí, tak pokud k nim patříte i vy, pojďmě rovnou na to.

docker container prune - čistí, přesně jak název napovídá, nepoužívané kontejnery

docker image prune - ani zde asi netřeba vysvětlovat; smaže všechny nepoužívané images (obdoba ručního volání docker rmi); tato volba obvykle uvolní nejvíce místa

docker network prune - hádejte :-)

A nakonec varianta pro chladnokrevné tvrďáky:

docker system prune - provede všechno výše uvedené

Ještě krátce o tom, co se vlastně bude mazat. V základních, výše uvedených, variantách se odstraňují "dangling" objekty. Znamená to například images, které nemají žádné pojmenování - žádný tag. Jedná se obvykle o starší verze daného image, které byly nahrazeny čerstvější, popřípadě "mezivýsledky" - nějaké vrstvy (shards) daného filesystému, které byly použity pro sestavení finálního image, zároveň slouží jako cache. 

S přepínačem -a je pak promazání ještě drsnější, smažou se pak i všechny images, které nevyužívá žádný container. 

Příkaz prune nabízí přidanou variabilitu prostředníctvím přepínače --filter, kterým lze přesněji specifikovat, co vlastně chceme čistit, např. podle štítků (labels) nebo data vytvoření.

Nakonec každý příkaz hrdě zahlásí, kolik ušetřil místa. Pokud si s dockerem hrajete už delší dobu, nebo tvrdě dřete na projektu a nekoukáte doprava, doleva, napoprvé možná budete překvapeni, kolik místa máte zase k dispozici :-)

docker
programování
Zpět →