Podstawy obsługi kontenerów docker

Na początku wyjaśnijmy – co to jest Docker?

Docker jest narzędziem pozwalającym umieścić aplikacje w kontenerze – lekkim, przenośnym środowisku które możemy w szybki sposób tworzyć, usuwać i skalować.
Niewątpliwie największą zaletą dockera w porównaniu do znanych nam wirtualizacji ( openvz,xen,kvm) jest to, że nie potrzebuje on specjalnym konfiguracji, instalowania całych systemów operacyjnych tylko korzysta z systemu serwera i tworzy na nim dodatkowe warstwy.
Kontenery są bardzo lekkie gdyż domyślnie nie mają zainstalowanych żadnych pakietów poza tymi które wskażemy podczas instalacji, lub które doinstalujemy samodzielnie. Z zasady kontenery są zawsze bezstanowe, tj nie przechowywują żadnych istotnych danych a przeważnie ich cykl pracy to:

  1. Uruchomienie kontenera z wymaganą konfiguracją
  2. Wykonanie zadania/zestawu zadań
  3. Usunięcie kontenera

Warto zapamiętać by nie traktować kontenerów na równi z wirtualnymi maszynami na których z reguły przechowujemy i składujemy dane.

Instalacja dockera na systemie CentOS 7:

Instalacja wymaganych pakietów:

Dodanie repozytorium dockera:

Instalacja i uruchomienie docker:

Możemy sprawdzić czy nasz docker działa poprawnie uruchamiając ponadczasowe “Hello World”

W odpowiedzi dostaniemy:

na marginesie można dodać, że mimo iż docker wymaga wersji jądra minimum 3.1 i pełnej wirtualizacji, to istniały wersje które mogliśmy uruchomić na Openvz z jądrem 2.6

Uruchomienie kontenera

Stwórzmy nasz pierwszy kontener:

–name=”testowy” ustawia nazwę dla naszego kontenera na “testowy”
–rm – kontener zostanie skasowany po zakończeniu działania
-t –  docker przygotuje dla kontenera pseudo TTY
-i – wskazuje, że ma być to sesja interaktywna, tj pozostawiamy otwarte wejście STDIN
ubuntu:latest – informacja jaka dystrybucja ma być pobrana/uruchomiona ( w tym przypadku najnowsza Ubuntu)
/bin/bash – nawa powłoki jaką chcemy mieć po utworzeniu kontenera

Jak widać na serwerze nie było dostępnego obrazu ubuntu – został więc on pobrany, kontener utworzony i zostaliśmy odrazu zalogowani do niego na powłokę /bin/bash

Poleceniem “exit” możemy wyjść z kontenera – ponieważ podaliśmy parametr “–rm” po wyjściu kontener zostanie usunięty.

Inne przydatne parametry przy tworzeniu kontenera to:

–hostname=”mojhostname” – ustawia hostname serwera
-p 80:80  przekierowanie z portu 80 serwera docker na port 80 kontenera
–dns=”8.8.8.8″ – jeśli chcemy używać innych serwerów DNS niż te ustawione na serwerze
-v /mnt/kopia:/kopia – montujemy katalog /mnt/kopia na kontenerze w katalogu /kopia. Uwaga: kontenery to twory ulotne, więc nie zalecam montowania stałych zasobów, gdyż związujemy się w tym momencie z danym serwerem. Polecam używać tej opcji np jeśli chcemy stosować cache w przestrzeni wymiany
–read-only=true – montujemy kontener tylko w trybie do odczytu
–tmpfs /tmp – w przypadku użycia opcji read-only możemy dodatkowo ustawić katalog /tmp jako jedyny zapisywalny
–cpu-shares=1024 – określamy moc cpu. 1024 traktujemy jako 100% wszystkich rdzeni cpu, i w zależności od tego ile chcemy przydzielić mocy ustawiamy ilość punktów cpu
–cpuset=0 – przypisanie kontenera do konkretnego rdzenia cpu ( rdzenie cpu liczymy od zera, w przypadku serwera z 4 rdzeniami cpu możemy ustawić na 0,1,2,3 )
-m 512m – ustawienie ilości pamięci ram i ilości pamięci swap dla kontenera. Obsługiwane jednostki to b,k,m,g. Uwaga: Pamięć ram jest “sztywna”, więc jak serwer ma 64 GB ram a ustawimy dla kontenera 12, to nie użyje więcej niż te 12
–memory-swap=1024m – ustawienie tego parametru wraz z powyższym pozwala na ustawienie osobnej ilości pmięci ram i pamięci wymiany. Ustawienie memory-swap na “-1” wyłącza swap dla kontenera.

Wyłączenie kontenera
Istnieją trzy sposoby na zatrzymanie działania kontenera:
Pierwszy – zatrzymanie “miękkie”, czyli wysłanie sygnału SIGTERM:

Drugi – zatrzymanie miękkie, a w przypadku gdy po x ( poniżej x=20) sekundach kontener się nie zatrzymał – zatrzymanie “twarde” czyli wysłanie sygnału SIGKILL

Trzeci – zatrzymanie twarde, czyli zmuszenie do zakończenia procesów:

Szukanie obrazów dockera

Jeśli chcemy znaleść obraz docker możemy wyszukać go w bazie po nazwie – np w przypadku wyszukiwania obrazów debiana ( screen by zachować odpowiednie formatowanie wyniku):

docker

Robimy porządki, czyli usuwanie kontenerów i obrazów
Listę wszystkich kontenerów uzyskamy wpisując:

Jeśli chcemy usunąć konkretny kontener:

Listę wszystkich obrazów uzyskamy poleceniem:

Usuwanie obrazu:

Uwaga: Jeśli spróbujemy usunąć obraz używany przez działający kontener otrzymamy komunikat błędu “cannot delete”

Korzystanie z kontenera

Tworzymy i uruchamiany nasz kontener:

Aby wejść w kontener podajemy komendę docker exec wraz z id kontenera i powłoką:

Jeżeli chcemy wydać jakieś polecenie dla kontenera podajemy je w argumencie -c:

Ważnym jest by argumenty podawać w cudzysłowiu – inaczej drugi i kolejny argument będą wykonywane na serwerze dockera a nie wewnątrz kontenera co zwróci błędny wynik:

Logi

Aby sprawdzić logi wygenerowane przez aplikacje uruchomione w kontenerze podajemy:

Jeśli nie chcemy korzystać z systemu logowania dockera możemy przy tworzeniu kontenera kazać zapisywać logi do syslog-u serwera:

zapisywać je na zdalny serwer:

lub wyłączyć zapisywanie jakichkolwiek logów:

Statystyki

Podstawowe statystyki ( analogiczne do programu top), czyli użycie cpu,ram i łącza otrzymamy wpisując:

Szczegółowe statystyki kontenera można wyciągnąć z poziomu api, a dla osób które chciałyby szybko zobaczyć statystyki w formie graficznej najlepsze będzie wdrożenie…. obrazu dockera 🙂

Jak widać pobraliśmy i uruchomiliśmy obraz cadvisor – darmowego narzędzia od google do monitorowania kontenerów.
Podczas uruchomienia przekierowaliśmy port 8080 naszego serwera na port 8080 kontenera.

Po wpisaniu adresu http://ip_serwera:8080 przekieruje Nas na  http://ip_serwera:808/containers/ i zobaczymy takie oto ładne wykresy:

docker-cadvisor

 

Podsumowanie

Zainstalowaliśmy dockera, uruchomiliśmy pierwsze kontenery, wiemy już też jak się na nie logować i monitorować.
Jeżeli chciałbyś poznać więcej szczegółów dotyczących konfiguracji dockera – przejrzyj koniecznie jego dokumentację.
W kolejnym wpisie omówimy tworzenie i korzystanie z własnych obrazów – stay tuned 🙂

5 (100%) Ocen: 2

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *