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:
- Uruchomienie kontenera z wymaganą konfiguracją
- Wykonanie zadania/zestawu zadań
- 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:
Jeśli jesteś już zapisany - Kliknij "Zaloguj się" i podaj swojego maila - treść zostanie odblokowana:
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:
–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:
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):
Robimy porządki, czyli usuwanie kontenerów i obrazów
Listę wszystkich kontenerów uzyskamy wpisując:
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:
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:
zapisywać je na zdalny serwer:
lub wyłączyć zapisywanie jakichkolwiek logów:
Sieć
Sprawdzenie ustawionych portów dla danego kontenera:
Lista sieci:
Szczegółowe informacje o danej sieci:
Utworzenie sieci
Utworzenie sieci podczas tworzenia kontenera:
Dodanie istniejącego kontenera do danej podsieci:
Usunięcie sieci z kontenera:
Usunięcie sieci:
Usunięcie wszystkich nieużywanych sieci:
Statystyki
Podstawowe statystyki ( analogiczne do programu top), czyli użycie cpu,ram i łącza otrzymamy wpisując:
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:
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 🙂
[…] pierwszej części opisałem proces instalacji, tworzenia i usuwania kontenerów docker. W tej części natomiast […]