Co się dzieje wewnątrz uruchomionego kontenera?

Dowiedz się jak wyświetlić listę procesów uruchomionych w kontenerze i statystyki zużycia zasobów

Co się dzieje wewnątrz uruchomionego kontenera?

Wstęp

Podstawowe operacje na kontenerach poznaliśmy w poniższym artykule:

Jak zacząć pracę z Dockerem?
Poznaj Dockera i jego kontenery. Naucz się je uruchamiać, zatrzymywać, usuwać oraz wyświetlać ich listę. Tutaj dowiesz się także skąd brać obrazy dockerowe

W tym artykule skupię się na opisaniu metod sprawdzania co się dzieje wewnątrz uruchomionego kontenera, czyli komend:

  • docker container top
  • docker container stats

Zanim rozpoczniemy omawianie tych komend, musimy uruchomić kontenery, na których przeprowadzimy operacje:

docker container run -d --name tomcat tomcat
Uruchomienie kontenera w tle o nazwie tomcat z obrazu tomcat
  • Bazę danych PostgreSQL - przy uruchamianiu musimy zdefiniować do niej hasło przy pomocy zmiennej środowiskowej POSTGRES_PASSWORD. Zmienną środowiskową możemy ustawić przy pomocy flagi --env lub -e w skróconej wersji jak poniżej:
docker container run -d --name postgres -e POSTGRES_PASSWORD=password postgres
Uruchomienie kontenera w tle o nazwie postgres ze zmienną środowiskową POSTGRES_PASSWORD z obrazu postgres

Następnie możemy sprawdzić, czy kontenery zostały poprawnie uruchomione komendą:

docker container ls

STATUS powinien być Up X minutes, czyli "Uruchomiony od X minut":

Wyświetlenie listy uruchomionych kontenerów

Lista procesów

W systemie operacyjnym Linux listę procesów możemy wyświetlić komendą ps (process status) lub top (table of processes). Komenda top wyświetli dodatkowo statystyki zużycia zasobów:

Wyświetlenie listy procesów i statystyk zużycia zasobów na Ubuntu komendą top
Wyświetlenie listy procesów na Ubuntu komendą ps

W podobny sposób możemy użyć komendę ps lub top przechodząc do środka kontenera poleceniem:

docker container exec -it <nazwa-kontenera> /bin/sh

Jednakże nie w każdym kontenerze są one zainstalowane.

Na szczęście w bardzo prosty sposób możemy wyświetlić listę procesów uruchomionych w danym kontenerze komendą docker container top:

Opis komendy docker container top służącej do wyświetlania listy procesów
UWAGA!
Opcje w komendzie docker container top pochodzą z komendy ps (np. flaga -e sprawi, że lista procesów zostanie wyświetlona w standardowym formacie). Wszystkie możliwe opcje możesz sprawdzić w manualu komendą man ps. Komenda docker container top domyślnie uruchamia komendę ps -ef wewnątrz kontenera.

Lista procesów składa się z kolumn:

  • UID - identyfikator użytkownika, który uruchomił proces
  • PID - unikalna liczba identyfikująca proces, czyli identyfikator procesu
  • PPID - identyfikator procesu-rodzica, który go uruchomił
  • C - wykorzystanie procesora przedstawione w procentach jako liczba całkowita
  • STIME - czas uruchomienia procesu
  • TTY - terminal powiązany z procesem. Znak zapytania ? oznacza, że żaden terminal nie jest powiązany
  • TIME - czas przez który wykorzystywano procesor
  • CMD - komenda jaka została użyta do uruchomienia procesu
Wyświetlenie listy procesów kontenera tomcat
Wyświetlenie listy procesów kontenera postgres

Widzimy, że kontener tomcat posiada uruchomiony jeden proces, zaś kontener postgres siedem, z czego sześć zostało uruchomionych przez proces z PID równym 967744 (posiadają ten sam PPID).

Statystyki zużycia zasobów

Do wyświetlenia statystyk zużycia zasobów dla wszystkich kontenerów służy komenda docker container stats:

Opis komendy docker container stats służącej do wyświetlania statystyk zużycia zasobów

Uruchomi ona podgląd, który będzie odświeżać się na bieżąco. Podgląd składa się z kolumn:

  • CONTAINER ID - unikalny, alfanumeryczny ciąg znaków, który identyfikuje kontener
  • NAME - nazwa kontenera, którą nadaliśmy podczas jego uruchamiania
  • CPU % - procent wykorzystania procesora hosta
  • MEM USAGE / LIMIT - wykorzystanie pamięci RAM i limit, który może osiągnąć kontener. Jeżeli limit nie został ustawiony, będzie nim całkowita pamięć RAM hosta
  • MEM % - procent wykorzystania pamięci RAM hosta
  • NET I/O - całkowita liczba bajtów, która została odebrana i wysłana przez sieć
  • BLOCK I/O - całkowita liczba bajtów odczytana i zapisana przez system plików kontenera
  • PIDS - liczba działających procesów wewnątrz kontenera
Wyświetlenie statystyk zużycia zasobów uruchomionych kontenerów

Aby podgląd nie był odświeżany na bieżąco, należy użyć komendy:

docker container stats --no-stream

Jeżeli chcemy wyświetlić statystyki tylko dla konkretnych kontenerów, możemy w komendzie podać ich nazwy oddzielone spacją.

UWAGA!
Może się zdarzyć, że liczba PIDS z komendy docker container stats nie będzie zgadzać się z liczbą procesów wyświetlonych przez komendę docker container top. Oznacza to, że niektóre procesy tworzą wiele wątków.

Podsumowanie

W tym artykule pokazałem Ci jak wyświetlić listę procesów uruchomionych w danym kontenerze poprzez komendę docker container top oraz jak sprawdzić statystyki zużycia zasobów poprzez komendę docker container stats.

Komendy te są proste do zapamiętania i bardzo pomocne przy sprawdzaniu co się dzieje wewnątrz uruchomionego kontenera.

Postarałem się także objaśnić kolumny, które są wyświetlane przez te komendy (dokumentacja dockera, w trakcie pisania tego artykułu, nie posiadała do nich opisu dla komendy docker container top).

Wspomniałem także, że komenda docker container top korzysta z flag komendy ps, z czego nie każdy zdaje sobie sprawę.

Rozwiąż Quiz i utrwal wiedzę

Liczba komentarzy:

Zaloguj się lub dołącz do społeczności Javowców, aby móc uczestniczyć w dyskusji 🙂