Docker dla administratora – praktyczny przewodnik po monitoringu i diagnostyce kontenerów
W codziennej pracy administratora nie chodzi o to, żeby „tylko działało”. Chodzi o to, żeby wiedzieć dlaczego działa, kiedy może przestać działać, i jak szybko to naprawić, kiedy coś pójdzie nie tak.
Docker ułatwia zarządzanie środowiskami aplikacyjnymi, ale też wprowadza nowe sposoby myślenia o monitorowaniu, logach, sieciach i przestrzeni dyskowej. Ten wpis to zestaw narzędzi i komend przydatnych dla administratora, który chce mieć nad kontenerami kontrolę – zarówno w kontekście działania, jak i zasobów.
🔍 Sprawdzanie stanu kontenerów
Wszystkie kontenery, również te zatrzymane
docker ps -a
Zaczynam od tej komendy niemal zawsze, gdy coś nie działa. Pokazuje wszystkie kontenery – nie tylko te aktywne, ale też te zakończone. To pozwala szybko wychwycić, czy coś nie wystartowało albo się nie wykrzaczyło chwilę po uruchomieniu.
Lista dostępnych obrazów
docker images
Warto co jakiś czas rzucić okiem na to, co się zgromadziło na hoście. Nieużywane obrazy potrafią zająć gigabajty. Jeśli aplikacja korzysta ze starej wersji obrazu, to też szybko to zauważysz.
Diagnostyka kontenerów
Wejście do działającego kontenera
docker exec -it <ID> bash
Czasem żaden log nie powie Ci tyle, co zwykłe top
, ps
albo sprawdzenie pliku konfiguracyjnego. Dzięki exec
możesz wejść do środka i dokładnie przeanalizować, co się dzieje. To jedna z moich ulubionych metod diagnozy.
Szczegółowa inspekcja parametrów
docker inspect <nazwa>
Kiedy kontener nie może się połączyć z bazą albo coś nie działa sieciowo, najczęściej sięgam po inspect
. Pozwala zobaczyć IP kontenera, jego mounty, zmienne środowiskowe, sieć, a nawet dokładny entrypoint
.
Monitoring zasobów kontenerów
docker stats
To jak odpowiednik htop
dla Dockera. Widok w czasie rzeczywistym pokazuje, który kontener obciąża CPU, który zjada RAM i czy coś nie wymknęło się spod kontroli. Przydatne zarówno przy podejrzeniach o wycieki pamięci, jak i zwykłym profilowaniu.
Logi i analiza działania aplikacji
Podgląd logów z ostatniego okresu
docker logs --since 10m <ID>
Jeśli aplikacja padła przed chwilą – warto sięgnąć po logi z ostatnich minut. Można szybko złapać błędy inicjalizacji, stacktrace czy nieudane połączenia sieciowe.
Logi w czasie rzeczywistym
docker logs -f <nazwa>
Śledzenie logów „na żywo” jest nieocenione podczas restartów albo przy pracy z kontenerami, które są niestabilne. Dzięki temu możesz dosłownie patrzeć, jak kontener działa linijka po linijce.
Sieć i połączenia między kontenerami
Lista aktywnych sieci
docker network ls
Przyda się, jeśli masz więcej niż jedną aplikację i chcesz się upewnić, że wszystkie komponenty „siedzą” w tej samej sieci. Niejedna godzina została stracona na problemy z DNS-em w Dockerze…
Inspekcja połączenia sieciowego
docker run -it --network=nazwa_networku alpine ping nazwa_kontenera
Dobry, szybki sposób na przetestowanie połączenia między kontenerami. Jeśli ping
nie działa, to wiesz, że problem leży w sieci – i nie musisz zgadywać, czy to aplikacja, czy infrastruktura.
Kontrola przestrzeni i cleanup
Sprawdzenie zajętości przez Dockera
docker system df
To taki odpowiednik df -h
, ale dla Dockera. Pokazuje, ile miejsca zajmują obrazy, wolumeny, kontenery. Warto zaglądać tu co jakiś czas, zwłaszcza gdy host działa na SSD i miejsce szybko się kończy.
Bardziej szczegółowy podgląd zajętości
docker system df -v
Tu widać, które zasoby są aktualnie powiązane z kontenerami, a które tylko zalegają. Jeśli nie jesteś pewien, co można bezpiecznie usunąć – ta komenda rozwiewa wątpliwości.
Usuwanie nieużywanych danych
docker system prune -a
Z czasem robi się bałagan: zatrzymane kontenery, stare obrazy, zapomniane wolumeny. Ta komenda robi gruntowne porządki. Tylko warto wcześniej dwa razy pomyśleć, żeby nie wyrzucić czegoś potrzebnego.
Zarządzanie zasobami i bezpieczeństwo
Ograniczenie zużycia CPU i RAM
docker run --cpus=".5" --memory="100m" <nazwa>
Czasami aplikacja zaczyna zachowywać się jak „wirus” – zjada wszystkie zasoby i dusi inne procesy. Wtedy przydają się ograniczenia. Możesz też z góry je ustawić, jeśli kontener ma działać tylko jako pomocniczy proces lub worker.
Uruchamianie kontenera bez dostępu do sieci
docker run -d --network=none <nazwa>
Przy testach bezpieczeństwa lub kiedy masz kontener wykonujący zadania lokalnie, odcięcie od sieci pozwala zminimalizować ryzyko, że coś wymknie się na zewnątrz.
Zarządzanie kontenerami
Zatrzymanie problematycznego kontenera
docker stop <id/nazwa>
Jeśli coś się zawiesiło albo generuje zbyt duże obciążenie, można to natychmiast przerwać. To pierwsza reakcja w sytuacjach awaryjnych.
Usunięcie zbędnych kontenerów
docker rm $(docker ps -a -q -f "status=exited")
Po testach zostaje mnóstwo śmieciowych kontenerów. Usunięcie tych, które już się zakończyły, pozwala utrzymać środowisko w czystości i uniknąć chaosu.
Kilka końcowych wskazówek
- Monitoruj cyklicznie: nawet jeśli wszystko działa – warto regularnie zaglądać do
stats
,logs
,df
,inspect
. - Automatyzuj czyszczenie: w środowiskach testowych możesz dodać cotygodniowe
docker system prune
. - Zbieraj logi z poziomu hosta (np. przez
journald
, Fluentd, Promtail) – Dockerowe logi bywają ulotne. - Używaj nazw i tagów w sposób opisowy – np.
nginx-dev
,api-v1.2
. Ułatwia to identyfikację.
Na zakończenie
Z punktu widzenia administratora kontenery nie są magiczną czarną skrzynką – to po prostu nowa warstwa do monitorowania i zarządzania. Dobrze skonfigurowane środowisko kontenerowe może być bardziej przewidywalne i czystsze niż klasyczne podejście, ale tylko wtedy, gdy masz nad nim realną kontrolę.
Ten wpis to tylko zestaw startowy. Kursów w internecie jest naprawdę sporo. Ja mogę polecic KodeKlud.com . Chyba jest też dostępny na Udemy. Otworzył mi oczy na diagnozowanie dockerów czy pisania własnych Dockerfile.