Do napisania tego wpisu skłonił mnie artykuł na medium o problemie braku miejsca…
Przypomniałem sobie, jak parę lat temu (jako początkujący programista) zostałem kolejny raz wrzucony na głęboką wodę i dołączyłem do projektu, gdzie był używany Docker. Było to mniej więcej w roku 2015 (małe przypomnienie: Docker powstał 20 marca 2013). Mało było informacji o tej technologii. No ale cóż zrobić – trzeba się nauczyć (bo pracować trzeba). Moje początki wyglądały mniej więcej tak: uruchamiam ulubioną wyszukiwarkę -> hasło 'Docker’ -> pierwszy artykuł -> instalacja -> pierwsze komendy: „docker run ...
„, „docker build ...
„. Próbuje coś z tego zrozumieć. I co? Brak miejsca na dysku. Ale jak to? Przecież jeszcze parę godzin temu miałem 10 GB. Zaczynam szukać, gdzie jest problem. Mam Cię ty Dockerze! Tylko co teraz?
Docker system
Docker udostępnia nam kilka poleceń, które umożliwiają szybkie zorientowanie się, w jakich warunkach pracujemy. Wszystkie one znajdują się pod poleceniem „docker system
„. Zdecydowanie warto sprawdzić polecenie „docker system info
„. Pokaże nam ono wszystkie informacje o systemie, w którym działamy. Jednak, gdy borykamy się z brakiem miejsca, warto sprawdzić polecenie:
docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 77 2 12.09GB 12.09GB (99%)
Containers 2 2 43.99kB 0B (0%)
Local Volumes 96 1 6.789GB 6.714GB (98%)
Build Cache 0 0 0B 0B
Jak widać, pokaże nam ono, ile miejsca na dysku zajmują poszczególne elementy. Kolejne komponenty to:
- images – obrazy Dockera pobrane z repozytorium zdalnego oraz te zbudowane lokalnie,
- containers – kontenery uruchomione w systemie,
- local volumes – trwałe lokalne magazyny danych zapisane na komputerze hoście poza systemem plików kontenera,
- build cache – cache wygenerowany w trakcie budowania obrazów.
Poszczególne kolumny powinny być jasne, oprócz ostatniej. Oznacza ona ilość miejsca, które może zostać odzyskane, ponieważ nie jest w tym momencie używane przez działające kontenery. Wszystko to, co jest tutaj wypisane, standardowo jest zapisane na dysku hosta w katalogu „/var/lib/docker
„.
Jak widać, z mojego systemu w razie potrzeby mogłoby zniknąć około 18 GB danych. Oczywiście w razie nagłej potrzeby można zatrzymać oraz usunąć wszystkie kontenery poleceniem: "docker stop $(docker ps -a -q) && docker rm $(docker ps -a -q)"
, a następnie poleceniem "docker rmi $(docker images -q)"
usunąć wszystkie obrazy z systemu. Te dwa polecenia powinny zostawić nam system w trochę lepszym stanie, ale najprawdopodobniej przyjdzie nam budować lub pobierać jeszcze raz te same obrazy. Jest to jakieś rozwiązanie, ale ja polecam użyć:
docker system prune
WARNING! This will remove:
- all stopped containers
- all networks not used by at least one container
- all dangling images
- all dangling build cache
Polecenie to usunie wszystkie:
- zatrzymane kontenery (zrobi to samo co „
docker rm -f $(docker ps -a -q)
„), - sieci, które nie są używane przez żaden kontener,
- odłączone obrazy, czyli takie, które nie są powiązane z żadnym otagowanym obrazem (pamiętaj, że obrazy mają warstwy, jak ogry czy cebula),
- odłączony cache, czyli cache, który nie jest powiązany z żadnym buildem.
Sprawdźmy, co się stanie, jeżeli wykonam to polecenie na moim systemie:
docker system prune
WARNING! This will remove:
- all stopped containers
- all networks not used by at least one container
- all dangling images
- all dangling build cache
Are you sure you want to continue? [y/N] y
Deleted Containers:
...
Deleted Networks:
...
Deleted Images:
...
Total reclaimed space: 2.869GB
2.86 GB? Całkiem nieźle biorąc pod uwagę, że nic nie straciłem, jedynie usunąłem nieużywane rzeczy.
Co dalej? Wpisz "docker images"
, aby zobaczyć wszystkie Twoje obrazy. Nie wiem jak Ty, ale ja często buduje/pobieram obrazy, żeby coś przetestować, a później już ich nigdy nie używam. Przed wyczyszczeniem moja lista zawierała 49 pozycji. Sprawdź, które Ci się więcej nie przydadzą i wpisz: "docker rmi image_name:tag"
. Operacja jest bardzo monotonna, ale u mnie po paru minutach zostało 16 obrazów, których regularnie używam. Stan mojego systemu wygląda teraz tak:
docker system df
TYPE TOTAL ACTIVE SIZE RECLAIMABLE
Images 16 2 2.268GB 1.984GB (87%)
Containers 2 2 9.238MB 0B (0%)
Local Volumes 97 1 6.865GB 6.789GB (98%)
Build Cache 0 0 0B 0B
Została ostatnia część: wolumeny. Aby je wyczyścić, zatrzymałem i usunąłem wszystkie działające kontenery oraz wykonałem ostatnie już polecenie:
docker volume prune
WARNING! This will remove all local volumes not used by at least one container.
Are you sure you want to continue? [y/N] y
Usuwa ono wszystkie lokalne wolumeny, które nie są używane przez żaden kontener. Po wszystkich tych operacjach w naszym systemie zostaje tylko to, co jest nam potrzebne do codziennej pracy. Mam nadzieję, że teraz już wiesz co zrobić, gdy zaczyna brakować miejsca na dysku. Daj znać w komentarzu, ile miejsca udało Ci się zaoszczędzić.
0 komentarzy