‫Polecenie Kontrola stanu Docker. To była nowa funkcja dodana w 1. 12, który ukazał się w połowie 2016 roku, w
‫tym samym czasie, w którym w sklepie Docker dostępne były opcje Swarm Kit i Swarm. Został dodany jako część tego zestawu narzędzi, ale
‫nadal działa we wszystkich różnych plikach, takich jak plik Dockerfile, plik tworzenia, polecenie uruchamiania w docku używa
‫go, pliki Stack to obsługują, aktualizacja usługi i usługa create command obsługują to
‫.
‫To jest wszędzie.
‫Zdecydowanie zalecam, aby w momencie rozpoczęcia produkcji zaangażować się w opcje testowania tego polecenia kontroli
‫stanu.
‫Będzie działać natychmiast po uruchomieniu z execem.
‫Wykona to polecenie wewnątrz kontenera, tak jak w przypadku uruchamiania własnego polecenia
‫exec.
‫Nie uruchamia go z zewnątrz kontenera; to po prostu działa wewnątrz, co oznacza,
‫że nawet prości pracownicy, którzy nie mają odsłoniętych portów, możesz uruchomić w nich proste polecenie, aby sprawdzić,
‫czy zwracają dobre dane lub cokolwiek innego.
‫Jest to proste wykonanie polecenia, co oznacza, że otrzymuje prosty zwrot. Oczekuje 0 lub 1.
‫W systemach Linux i Windows masz kody wyjścia z komend, a 0 to dobrze.
‫Oznacza to, że wszystko było w porządku.
‫Wszystko inne niż 0 będzie błędem w większości aplikacji.
‫Ale w Docker potrzebujemy tej aplikacji, aby konkretnie zakończyć 1. Za chwilę pokażemy, jak to
‫robisz.
‫W Dockerze są tylko trzy stany kontroli zdrowia. Zaczyna się od uruchomienia. Uruchamianie to domyślnie pierwsze
‫30 sekund, w którym nie uruchomiono jeszcze polecenia kontrolera kondycji.
‫Wtedy to uruchomi jeden.
‫Jeśli to zwróci 0, zacznie się od zdrowych. To zmieni się w zdrową opcję.
‫Potrwa to polecenie i domyślnie uruchomi je co 30 sekund. Jeśli kiedykolwiek otrzyma niezdrowy powrót,
‫jak wyjście 1, oznacza to niezdrowy pojemnik.
‫Mamy opcje kontrolowania tego wszystkiego, łącznie z ponownymi próbami.
‫Zobaczymy to za chwilę.
‫Jest to znacznie lepsza opcja niż w przeszłości, ponieważ Docker do tej pory upewniał się,
‫że aplikacja wciąż działa.
‫Nie miał żadnego wglądu w to, czy aplikacja robi to, co powinna.
‫Teraz możemy to zrobić wewnątrz samego kontenera Docker.
‫Ale to nie jest zamiennik dla twojego rozwiązania monitorującego innej firmy.
‫To nie da ci wykresów, ani statusu w czasie, ani żadnych narzędzi firm trzecich, których oczekujesz
‫od rozwiązania monitorującego.
‫Dotyczy to zrozumienia przez Docker, czy sam kontener ma podstawowy poziom zdrowia.
‫Tak więc w Nginx może zwrócić localhost pliku indeksu głównego. Zwrot w wysokości 200 lub 300 jest w porządku i daje kod
‫wyjścia równy 0 i uważa, że jest zdrowy.
‫To nie jest super zaawansowane narzędzie monitorujące.
‫Ale jeśli zwróci błąd 404 lub 500, wtedy uzna to za niezdrowe i możemy coś z
‫tym zrobić.
‫Gdzie zobaczymy kontrolę stanu Dockera w GUI?
‫Pierwsze miejsce w pojemniku ls.
‫Po prostu zobaczy to jako nową opcję.
‫Jest w środku. Zobaczymy w sekundę, gdzie pokaże nam jeden z trzech stanów, jeśli
‫kontrola stanu jest uruchomiona, i tak właśnie wiemy, że istnieje kontrola stanu.
‫To najprostszy sposób, przynajmniej wiedzieć. Zobaczysz historię, ostatnie pięć z tej
‫kontroli stanu, pojawi się w kontroli dla tego pojemnika. Z czasem widzimy pewien podstawowy trend.
‫Jednak polecenie uruchamiania dokiem nie podejmuje działań w przypadku niezdrowego pojemnika.
‫Po sprawdzeniu stanu zdrowia jako niezdrowego kontenera, procedura dokowania pokaże to w komendzie ls
‫oraz w inspekcji, ale nie podejmie działania.
‫Właśnie tam spodziewamy się, że Usługi Swarm będą działać.
‫Tak więc stosy i usługi faktycznie zastąpią ten kontener nowym zadaniem, prawdopodobnie na nowym hoście, w
‫zależności od harmonogramu.
‫Nawet w komendzie aktualizacji widzimy niewielką dodatkową premię, korzystając z kontroli stanu, ponieważ
‫aktualizacje będą uwzględniały kontrolę kondycji jako część gotowości do tego kontenera, zanim przejdzie i
‫zmieni następną.
‫Jeśli pojawi się kontener, ale nie przejdzie kontroli stanu, aktualizacja usługi
‫nie przejdzie do następnej. Lub podejmie działania w oparciu o zmiany, które mu dajesz.
‫Spójrzmy na kilka przykładów, zanim przejdziemy do linii poleceń.
‫To jest ten, który używamy w czasie dokowania.
‫Dzięki temu możemy użyć istniejącego obrazu, który nie zawiera sprawdzenia poprawności, a my dodamy
‫sprawdzenie poprawności w czasie wykonywania.
‫W tym przypadku używamy obrazu Elasticsearch. Możesz zobaczyć polecenie cURL localhost 9200, który
‫jest portem, w którym Elasticsearch działa wewnątrz kontenera, a nie opublikowany port, ale
‫wewnątrz kontenera. W przypadku
‫Elasticsearch istnieje rzeczywisty URL ze zdrowiem.
‫Więc możemy tego użyć tutaj.
‫Zauważycie dwie rury z fałszem na końcu tego polecenia.
‫I będzie to dość
‫powszechne, jeśli użyjesz czegoś takiego jak cURL lub innego narzędzia, które wyśle kod błędu inny niż 1.
‫Pamiętasz, kiedy wspominałem o tym wcześniej? Potrzebujemy go, aby wyjść z 1, jeśli wystąpił problem. Ponieważ jest to jedyny
‫kod błędu, z którym Docker zamierza coś zrobić.
‫Musimy się upewnić, że w tym przypadku powłoka zawsze zwróci fałszywy 1 kod wyjścia, jeśli
‫coś wychodzi z tego polecenia poza 0.
‫To dobry sposób na obejście tego problemu.
‫Tak samo dzieje się z cURL, cURL poda inne potencjalne kody błędów i nie chcemy, aby
‫to zrobił.
‫W rzeczywistych plikach Docker możemy dodać to samo polecenie. Format jest trochę inny. Ale widzisz,
‫że mamy tutaj te opcje. Mamy interwał, limit czasu, okres początkowy (który jest nowy) i ponawianie.
‫Interwał jest taki, jak myślisz. Jest domyślnie co 30 sekund.
‫Jak często będzie to sprawdzać. Limit czasu określa, jak długo będzie czekać, zanim
‫wystąpi błąd i zwróci zły kod, jeśli może aplikacja jest wolna. Okres początkowy to nowa funkcja, która
‫pozwala nam już w 17. 09 i nowsze, aby dać dłuższy czas oczekiwania niż pierwsze 30 sekund trwania. Wcześniej zawsze czekał długo
‫... przedział czasu, zanim rozpoczęto kontrolę stanu.
‫Ale może masz aplikację Java lub bazę danych lub coś, co zajmuje dużo więcej czasu.
‫Może to zajmuje pięć minut.
‫Możesz tam dodać ten okres początkowy. Będzie nadal robić testy stanu. Ale to, co
‫zrobi, to nie zaalarmuje niezdrowego czeku, dopóki ten czas się nie skończy.
‫Jeśli więc ustawisz tam dwie minuty, nawet jeśli sprawdzasz stan zdrowia co 30 sekund, to uznasz to
‫za niezdrowe, gdy minie już dwuminutowy znak. Ostatni, ponawia próbę, oznacza, że
‫spróbujemy tej oceny zdrowia x razy, zanim uznamy to za niezdrowe.
‫To daje potencjalnie niestabilnym aplikacjom szansę powrotu do zdrowia i samodzielnego powrotu do
‫zdrowia, zanim uznamy to za naprawdę niezdrowy pojemnik.
‫Podstawowe polecenie kontrolne, którego można użyć w pliku Dockerfile,
‫nosi nazwę HEALTHCHECK, wszystkie są tam wielkie litery. Ten sam format istnieje tam, gdzie robimy prosty plik cURL lokalnego hosta, ponieważ może
‫jest to aplikacja PHP lub coś podobnego. Możemy to zrobić.
‫W ten sposób dodasz wszystkie te opcje do pliku Docker, aby zobaczyć, jak
‫dodaję przedział limitu czasu i liczbę ponownych prób przed samym poleceniem.
‫Pierwszym z nich dla podstawowego polecenia, proszę zauważyć, że nie muszę wstawiać CMD, jeśli
‫po prostu daję komendę do uruchomienia. Ale jeśli chcę pokazać opcje, jeśli chcę nadać im
‫niestandardowe opcje po wyjęciu z pudełka z przekroczeniem limitu czasu i tak dalej, to muszę określić, który z nich jest poleceniem.
‫Teraz nie są to dwie różne linie.
‫Zwróć uwagę na tylny ukośnik na końcu pierwszej linii.
‫Więc nie zrozumcie tego.
‫Oto prosty przykład tego, jak mogłoby to wyglądać, gdybyś miał statyczną aplikację działającą
‫na serwerze Nginx.
‫Możesz ustawić interwał i czas z pliku Dockerfile, a po prostu
‫wykonasz polecenie cURL na localhost.
‫Jeśli zwraca 200 lub 300, uważa, że grzywna. Jeśli zwraca 4, 5 lub coś innego, uważa, że
‫błąd.
‫Zauważyłeś tutaj, że mam wyjście 1, które jest tym samym co fałsz.
‫Zrobiłem to tylko po to, aby pokazać, że pewne przykłady w Internecie będą fałszywe. Niektóre przykłady będą miały
‫wyjście 1.
‫Obaj robią to samo.
‫Oto nieco bardziej zaawansowany przykład.
‫W tym przypadku używamy aplikacji PHP połączonej z Nginx.
‫To, co zrobiłem, to w zasobach link do tego przykładu PHP. Dodałem niestandardowy plik konfiguracyjny
‫Nginx, który używa adresów statusu Nginx i PHP-FPM.
‫Obie te aplikacje mają swoją własną stronę statusu i rodzaj adresu URL sprawdzania poprawności.
‫Możesz używać tych w swoich aplikacjach, jeśli używasz PHP lub Nginx. Istnieją dwa różne adresy URL, ale możesz
‫użyć ich obu w ramach tego samego testu kondycji.
‫W tym przypadku używamy tylko jednego z nich i wrzucamy localhost / ping,
‫który jest
‫właściwie poleceniem statusu PHP-FPM, ale musisz włączyć to w swoim PHP-FPM. Ponownie, w zasobach tego wykładu znajduje się
‫link do Docker dobrego domyślnego PHP.
‫Możesz sprawdzić to na GitHubie, gdzie pokazałem w tym przykładzie trochę więcej szczegółów.
‫Następnie mamy przykład Postgres, więc w Dockerfile mogę użyć innego adresu URL.
‫Tutaj mamy aplikację Postgres, w której w komendzie kontroli poprawności używam polecenia pg isready.
‫Teraz w różnych aplikacjach dostępne są różne narzędzia. W PostgreScie dostarczane jest z wbudowanym
‫narzędziem, które jest bardzo prostym testowaniem połączenia z serwerem Postgres.
‫Nie sprawdza poprawności danych lub prawidłowego zamontowania bazy danych. Po prostu powie: "Czy ten serwer bazy
‫danych zezwala na połączenia? Tak lub nie? "To schludny, który
‫możesz zrobić po wyjęciu z pudełka.
‫Oto, jak to będzie wyglądać w pliku kompozytor / stos.
‫Bardzo podobna.
‫Zauważysz, że początkowy okres w tym okresie wymaga innej wersji.
‫Ponieważ polecenie kontroli poprawności pojawiło się w 1. 12, był obsługiwany w 2. 1 tego pliku redagowania.
‫Ale jeśli masz zamiar użyć okresu początkowego, oznacza to, że musisz zaktualizować swój plik
‫do wersji 3. 4 w celu wsparcia tego. Ponieważ okres początkowy pojawił
‫się ponad rok później po wykonaniu polecenia kontrolnego.
‫Zacznijmy od kilku prostych poleceń uruchamiania.
‫Mamy zamiar uruchomić serwer bazy danych Postgres bez kontroli stanu, ponieważ domyślnie
‫nie jest on dostępny.
‫Następnie uruchomimy go ponownie za pomocą ręcznego polecenia
‫sprawdzania kondycji, które zostanie dodane w wierszu poleceń, a zobaczymy różnicę.
‫Tutaj po prostu nazwiemy pierwszy p1. Uruchomimy go oderwane od oficjalnego obrazu
‫Postgres.
‫Jeśli zrobię kontener dokera ls, zobaczysz, że tutaj nic nie wskazuje na test kondycji.
‫Jeśli ponownie wykonamy to samo polecenie i tym razem nazwiemy to p2, dodamy polecenie zdrowia.
‫Tym razem użyjemy pg isready, o którym rozmawialiśmy wcześniej, aby przetestować, czy
‫połączenia są dostępne na tym serwerze Postgres. Powiemy, że użytkownik, którego potrzebujemy,
‫to użytkownik postgresu. W rzeczywistości nie musimy podawać tego hasła. Nie
‫spróbuje się zalogować. Po prostu spróbuje zatwierdzić. Wykorzystamy obraz Postgres.
‫Teraz, jeśli zrobimy kontener dokera ls, a trochę pomniejszę, zobaczysz, że jest napisane: "Upłynie 4 sekundowe
‫zdrowie. "Teraz otrzymujemy
‫tę dodatkową funkcję w naszym statusie naszego polecenia ls. Pozostanie on w stanie początkowym przez domyślne
‫30 sekund, dopóki
‫po raz pierwszy nie uruchomi polecenia sprawdzania poprawności.
‫Teraz, gdy czekaliśmy ponad 30 sekund, zobaczysz, że zmieniło się to na zdrowe.
‫Jeśli zrobimy kontener w doku, sprawdzimy na tej stronie P2, zobaczymy na samym szczycie, że mamy nową
‫opcję stanu zdrowia. W tym przypadku mogłem uruchomić go tylko dwa razy.
‫Możesz zobaczyć tam wyjście, które pokazuje, że akceptuje połączenia.
‫W porządku. Zróbmy jakąś usługę, aby utworzyć polecenia do tej samej bazy danych w tym samym sprawdzianiu kondycji testowej.
‫Kiedy to zrobimy, zobaczymy, że istnieją trzy różne stany, które przechodzi serwis
‫po uruchomieniu.
‫Przygotowuje się, co zwykle oznacza, że pobiera obraz. To się zaczyna, co oznacza, że wykonuje kontener
‫i podnosi go. To działa.
‫Bez polecenia kontrolera poprawności uruchomienie i działanie są bardzo szybkie. Są prawie natychmiastowe.
‫Zobaczymy, że tutaj z usługą dokańczenia utworzymy nazwę p1 postgres.
‫Po zakończeniu przygotowań przez pobranie obrazu zobaczysz, że od razu zaczyna działać,
‫ponieważ nie ma kontroli stanu. Nie ma nic innego, jak tylko uruchomić kontener i
‫powiedzieć: "Tak. Binarny działa. "Ale jeśli wykonamy
‫to samo polecenie, usługa dokowania utworzy i wywoła to p2 jak poprzednio, i nadać mu tę samą komendę
‫zdrowia.
‫Zaczynamy tę usługę z wbudowanym komendą kontrolera kondycji.
‫Zobaczymy, że przejdzie od przygotowania do uruchomienia, a stan początkowy będzie domyślny
‫przez 30 sekund, aż do pierwszego testu stanu.
‫To jest teraz usługa Docker oczekująca zdrowego stanu, zanim uzna pełną
‫obsługę tej usługi. Po 30 sekundach nastąpi przejście do stanu pracy. Potem otrzymujemy ostatnią weryfikację,
‫aby upewnić się, że jest stabilna, i gotowe.
‫Już teraz możesz zobaczyć, że dzięki usługom, a także
‫aktualizacjom usług, otrzymamy dodatkowy bonus koncepcji zdrowia, jeśli użyjemy tych poleceń, kiedy tylko możemy.