‫Der Docker Health Check-Befehl. Es wurde eine neue Funktion in 1 hinzugefügt. 12, das Mitte 2016 herauskam, zur gleichen
‫Zeit, als Swarm Kit und Swarm Mode in Docker verfügbar waren. Es wurde wirklich als Teil dieses
‫Toolkits hinzugefügt, funktioniert aber immer noch in allen verschiedenen Dateien, wie der Docker-Datei, der
‫Compose-Datei, dem Docker-Run-Befehl, der Stack-Dateien-Unterstützung, der Service-Aktualisierung und dem Service-Create-Befehl .
‫Es ist überall.
‫Ich empfehle dringend, dass Sie in der Produktion die Testoptionen für diesen Integritätsprüfungsbefehl
‫aktivieren.
‫Es wird sofort mit einer Führungskraft funktionieren.
‫Dieser Befehl wird im Container ausgeführt, so als ob Sie Ihren eigenen exec-Befehl ausführen
‫würden.
‫Es wird also nicht von außerhalb des Containers ausgeführt. Es wird nur innerhalb ausgeführt, was
‫bedeutet, dass auch einfache Worker, die keine freigegebenen Ports haben, einen einfachen Befehl ausführen können, um zu überprüfen, ob
‫sie gute Daten zurückgeben oder was auch immer.
‫Es ist eine einfache Ausführung eines Befehls, was bedeutet, dass er eine einfache Rückgabe erhält. Es erwartet eine 0 oder eine 1.
‫In Linux und Windows haben Sie Exit-Codes von Befehlen und eine 0 ist eine gute Sache.
‫Es bedeutet, dass alles in Ordnung war.
‫Alles andere als eine 0 ist in den meisten Anwendungen ein Fehler.
‫In Docker benötigen wir diese Anwendung jedoch, um eine 1 zu beenden. Wir werden gleich zeigen, wie Sie
‫das machen.
‫Es gibt nur drei Zustände für einen Gesundheitscheck in Docker. Es beginnt mit dem Starten. Der Start erfolgt standardmäßig in
‫den ersten 30 Sekunden, in denen noch kein Healthcheck-Befehl ausgeführt wurde.
‫Dann wird es eines geben.
‫Wenn dies eine 0 ergibt, beginnt es mit der gesunden. Es ändert sich in die gesunde Option.
‫Dieser Befehl wird benötigt und standardmäßig alle 30 Sekunden erneut ausgeführt. Wenn es jemals eine fehlerhafte Rückgabe erhält,
‫wie bei einem Exit 1, wird es als fehlerhafter Container markiert.
‫Wir haben Optionen, um all dies zu steuern, einschließlich Wiederholungsversuchen.
‫Wir werden das gleich sehen.
‫Dies ist eine viel bessere Option als in der Vergangenheit, da Docker bisher nur dafür gesorgt hat,
‫dass die Anwendung noch ausgeführt wird.
‫Es gab keinen Einblick, ob diese Anwendung das tat, was sie sollte.
‫Jetzt können wir das im Docker-Container selbst tun.
‫Dies ist jedoch kein Ersatz für Ihre Überwachungslösung von Drittanbietern.
‫Dies gibt Ihnen keine Grafiken, keinen Status im Laufe der Zeit oder andere Tools von Drittanbietern, die Sie von
‫einer Überwachungslösung erwarten würden.
‫Hier geht es um das Verständnis von Docker, wenn der Container selbst ein grundlegendes Gesundheitsniveau aufweist.
‫In einem Nginx wird möglicherweise ein lokaler Host der Stammindexdatei zurückgegeben. Eine Rückgabe von 200 oder 300 ist in Ordnung und gibt einen
‫Exit-Code von 0 und erachtet es als fehlerfrei.
‫Das ist kein überaus fortschrittliches Monitoring-Tool.
‫Wenn es jedoch einen 404- oder 500-Fehler gibt, wird es als ungesund eingestuft, und wir können etwas
‫dagegen tun.
‫Wo werden wir diesen Docker-Healthcheck in der GUI sehen?
‫Der erste Platz ist im Container ls.
‫Es wird nur als diese neue Option angesehen.
‫Es ist in der Mitte. Wir werden in einer Sekunde sehen, wo es uns einen der drei Zustände
‫zeigt, wenn der Gesundheitscheck läuft, und so wissen wir tatsächlich, dass es einen Gesundheitscheck gibt.
‫Zumindest ist das der einfachste Weg, es zu wissen. Wir werden sehen, wie der Verlauf, die letzten
‫fünf dieser Gesundheitsprüfung, bei der Inspektion für diesen Container angezeigt werden. Und wir können dort im Laufe der Zeit einen grundlegenden Trend erkennen.
‫Der docker run-Befehl wird jedoch nicht für einen fehlerhaften Container ausgeführt.
‫Sobald der Healthcheck einen Container als fehlerhaft ansieht, zeigt der Docker-Lauf nur an, dass dies im Befehl ls und in
‫inspect der Fall ist, aber es werden keine Maßnahmen ergriffen.
‫Hier erwarten wir, dass die Swarm Services Maßnahmen ergreifen.
‫Die Stacks und Services ersetzen also tatsächlich diesen Container durch eine neue Aufgabe, möglicherweise auf einem neuen Host,
‫abhängig vom Scheduler.
‫Selbst im Befehl update sehen wir einen kleinen zusätzlichen Bonus durch die Verwendung der Integritätsprüfungen, da die
‫Aktualisierungen die Integritätsprüfung als Teil der Bereitschaft für diesen Container betrachten, bevor er ausgeführt wird und den
‫nächsten ändert.
‫Wenn ein Container auftaucht, aber seine Integritätsprüfung nicht besteht, wird das Service-Update nicht
‫mit dem nächsten fortgesetzt. Oder es wird Maßnahmen ergreifen, die auf den Änderungen basieren, die Sie vornehmen.
‫Schauen wir uns ein paar Beispiele an, bevor wir zur Befehlszeile gehen.
‫Dies ist eine, die wir auf Docker-Run verwenden.
‫Auf diese Weise können wir ein vorhandenes Image ohne Integritätsprüfung verwenden und die
‫Integritätsprüfung zur Laufzeit hinzufügen.
‫In diesem Fall verwenden wir das Bild von Elasticsearch. Sie können sehen, dass der Befehl ein cURL localhost
‫9200 ist. Dies ist der Port, auf dem Elasticsearch im Container ausgeführt wird, nicht der veröffentlichte Port, sondern
‫der im Container. Für Elasticsearch
‫gibt es eine aktuelle Integritäts-URL.
‫Also können wir das hier verwenden.
‫Am Ende dieses Befehls werden Sie die beiden Pipes mit dem false bemerken.
‫Und das wird ziemlich
‫häufig sein, wenn Sie so etwas wie cURL oder ein anderes Tool verwenden, das einen anderen Fehlercode als 1 ausgibt.
‫Erinnerst du dich, als ich das vor einiger Zeit erwähnte? Wir müssen es mit 1 beenden, wenn es ein Problem gibt. Denn das ist der
‫einzige Fehlercode, gegen den Docker etwas unternehmen wird.
‫Wir müssen sicherstellen, dass in diesem Fall eine Shell immer den falschen Exit-Code 1 zurückgibt, wenn
‫aus diesem Befehl etwas anderes als 0 herauskommt.
‫Es ist ein guter Weg, um dieses Problem zu umgehen.
‫Es passiert einfach so mit cURL, cURL gibt andere mögliche Fehlercodes aus und wir möchten nicht, dass es
‫das tut.
‫In den eigentlichen Docker-Dateien können wir den gleichen Befehl hinzufügen. Das Format ist ein bisschen anders. Aber Sie sehen,
‫dass wir diese Optionen hier haben. Wir haben das Intervall, das Timeout, die Startperiode (die neu ist) und Wiederholungsversuche.
‫Das Intervall ist das, was Sie denken. Standardmäßig alle 30 Sekunden.
‫Wie oft wird dieser Gesundheitscheck durchgeführt? Die Zeitüberschreitung gibt an, wie lange gewartet wird, bis ein Fehler
‫auftritt und ein fehlerhafter Code zurückgegeben wird, wenn die App möglicherweise langsam ist. Die Startperiode ist eine neue Funktion, die
‫uns jetzt in 17 erlaubt. 09 und neuer, um eine längere Wartezeit als die ersten 30 Sekunden der Dauer zu geben. Vorher würde es immer nur
‫lange warten ... die Intervallzeit, bevor der Healthcheck gestartet wurde.
‫Aber vielleicht haben Sie eine Java-App oder -Datenbank oder etwas, dessen Start viel länger dauert.
‫Vielleicht dauert es fünf Minuten.
‫Sie können diese Startperiode dort hinzufügen. Es wird immer noch Gesundheitschecks machen. Aber was es tun wird,
‫ist, dass es bei einem ungesunden Scheck keinen Alarm auslöst, bis diese Zeit abgelaufen ist.
‫Wenn Sie also alle 30 Sekunden zwei Minuten einplanen, wird die Integritätsprüfung erst nach Ablauf
‫dieser zwei Minuten als ungesund eingestuft. Der letzte Versuch bedeutet, dass
‫wir diesen Zustandstest x-mal durchführen, bevor wir ihn für ungesund halten.
‫Dies gibt einer möglicherweise instabilen App möglicherweise die Chance, mit einer gesunden App zurückzukehren und sich von selbst
‫zu erholen, bevor wir dies als einen wirklich ungesunden Container betrachten.
‫Der grundlegende Healthcheck-Befehl, den Sie in einer Docker-Datei verwenden würden,
‫heißt HEALTHCHECK und wird dort in Großbuchstaben geschrieben. Das gleiche Format existiert, wenn wir nur eine einfache CURL des localhost machen, weil
‫es vielleicht eine PHP-App oder so ist. Wir können das schaffen.
‫Auf diese Weise würden Sie alle diese Optionen zu einer Docker-Datei hinzufügen, damit Sie
‫sehen, wie ich das Zeitlimitintervall und die Wiederholungsversuche vor dem Befehl selbst hinzufüge.
‫Der erste Befehl für den Basisbefehl. Beachten Sie, dass ich keine CMD eingeben muss, wenn ich
‫ihm nur den Befehl zum Ausführen erteile. Aber wenn ich Optionen anzeigen möchte, wenn
‫ich benutzerdefinierte Optionen mit dem Zeitlimit angeben möchte usw., muss ich angeben, welches der Befehle ist.
‫Nun, das sind nicht zwei verschiedene Zeilen.
‫Beachten Sie den umgekehrten Schrägstrich am Ende der ersten Zeile.
‫Also nicht verwirren.
‫Hier sehen Sie ein einfaches Beispiel dafür, wie es aussehen könnte, wenn eine statische Anwendung auf einem
‫Nginx-Server ausgeführt wird.
‫Sie können das Intervall und die Zeitüberschreitung in Ihrer Docker-Datei festlegen und einfach einen
‫cURL-Befehl auf dem localhost ausführen lassen.
‫Wenn 200 oder 300 zurückgegeben werden, wird dies als ausreichend angesehen. Wenn es eine 4 oder 5 oder etwas anderes zurückgibt, wird dies als
‫Fehler gewertet.
‫Sie bemerken hier, dass ich einen Ausgang 1 habe, was dasselbe ist wie ein falscher.
‫Ich habe das getan, um Ihnen zu zeigen, dass bestimmte Beispiele im Internet falsch sind. Bestimmte Beispiele haben einen
‫Ausgang 1.
‫Sie machen beide dasselbe.
‫Hier ist ein etwas fortgeschritteneres Beispiel.
‫In diesem Fall verwenden wir eine PHP-App, die mit Nginx kombiniert ist.
‫Was ich getan habe, ist, dass Sie in den Ressourcen einen Link zu diesem PHP-Beispiel finden. Ich habe eine benutzerdefinierte
‫Nginx-Konfigurationsdatei hinzugefügt, die Nginx- und PHP-FPM-Status-URLs verwendet.
‫Beide Anwendungen verfügen über eine eigene Statusseite und eine Art Ping-URL für die Integritätsprüfung.
‫Sie können diese in Ihren Apps verwenden, wenn Sie PHP oder Nginx verwenden. Es gibt zwei verschiedene URLs, aber
‫Sie können beide innerhalb desselben Healthchecks verwenden.
‫In diesem Fall verwenden wir nur einen von ihnen und geben den localhost /
‫ping ein, der
‫eigentlich ein PHP-FPM-Statusbefehl ist. Sie müssen diesen Befehl jedoch in Ihrem PHP-FPM aktivieren. Auch in den Ressourcen dieser Vorlesung befindet sich ein
‫Link zu einem PHP Docker Good Defaults.
‫Sie können das auf einem GitHub nachlesen, wo ich in diesem Beispiel etwas detaillierter gezeigt habe.
‫Als nächstes haben wir ein Postgres-Beispiel, damit ich in der Docker-Datei eine andere URL verwenden kann.
‫Hier haben wir eine Postgres-Anwendung, in der ich im Befehl healthcheck den Befehl pg isready verwende.
‫Jetzt gibt es mit verschiedenen Apps verschiedene Tools. In Postgres ist ein Tool integriert, mit dem
‫die Verbindung zu einem Postgres-Server auf einfache Weise getestet werden kann.
‫Es wird nicht überprüft, ob Sie über gute Daten verfügen oder ob Ihre Datenbank ordnungsgemäß bereitgestellt wurde. Es wird einfach gesagt: "Erlaubt dieser
‫Datenbankserver Verbindungen?" Ja oder Nein? Â »Das ist
‫eine nette Sache, die Sie sofort erledigen kÃ¶nnen.
‫So würde es in einer Composer / Stack-Datei aussehen.
‫Sehr ähnlich.
‫Sie werden feststellen, dass für den Startzeitraum unten eine andere Version erforderlich ist.
‫Da der Healthcheck-Befehl in 1 herauskam. 12 wurde es tatsächlich in 2 unterstützt. 1 dieser Compose-Datei.
‫Wenn Sie jedoch den Startzeitraum verwenden möchten, müssen Sie Ihre Compose-Datei auf
‫Version 3 aktualisieren. 4, um das zu unterstützen. Weil die Startperiode über
‫ein Jahr später nach dem Healthcheck-Befehl herauskam.
‫Beginnen wir mit einigen einfachen Run-Befehlen.
‫Wir werden hier einen Postgres-Datenbankserver ohne Integritätsprüfung starten, da dieser
‫standardmäßig nicht enthalten ist.
‫Dann führen wir es erneut mit einem manuellen Healthcheck-Befehl aus,
‫der in der Befehlszeile hinzugefügt wird, und wir werden den Unterschied sehen.
‫Hier nennen wir nur die erste p1. Wir lassen es losgelöst vom offiziellen Postgres-Image
‫laufen.
‫Wenn ich einen Docker-Container verwende, werden Sie feststellen, dass hier nichts auf einen Healthcheck hinweist.
‫Wenn wir denselben Befehl erneut ausführen und diesmal p2 aufrufen, fügen wir einen Integritätsbefehl hinzu.
‫Dieses Mal verwenden wir das bereits erwähnte pg isready, um zu testen, ob
‫die Verbindungen auf diesem Postgres-Server verfügbar sind. Wir werden sagen, dass der Benutzer, den wir
‫brauchen, der Postgres-Benutzer ist. Wir müssen ihm eigentlich kein Passwort geben. Es wird
‫nicht versucht, sich anzumelden. Es wird nur versucht zu validieren. Wir werden das Postgres-Bild verwenden.
‫Wenn wir jetzt einen Docker-Container erstellen und etwas verkleinern, werden Sie feststellen, dass die Meldung "Up 4 seconds health is starting" angezeigt
‫wird. 'Jetzt erhalten
‫wir diese zusätzliche Funktion in unserem Status unseres ls-Befehls. Es bleibt 30 Sekunden lang im Ausgangszustand,
‫bis es
‫den Befehl healthcheck zum ersten Mal ausführt.
‫Jetzt, da wir über 30 Sekunden gewartet haben, werden Sie feststellen, dass der Status in "Gesund" geändert wurde.
‫Wenn wir eine Docker-Container-Inspektion auf diesem p2 durchführen, werden wir ganz oben sehen, dass wir diese neue Option
‫für den Gesundheitsstatus hatten. In diesem Fall konnte ich es nur zweimal ausführen.
‫Sie können dort die Ausgabe sehen, die zeigt, dass Verbindungen akzeptiert werden.
‫Gut. Lassen Sie uns einige Befehle zum Erstellen von Diensten für dieselbe Datenbank in derselben Testintegritätsprüfung ausführen.
‫Was wir hier sehen werden, wenn wir dies tun, ist, dass es drei verschiedene Zustände gibt, die ein Dienst
‫beim Starten durchläuft.
‫Es wird vorbereitet, was normalerweise bedeutet, dass das Bild heruntergeladen wird. Es beginnt, was bedeutet, dass der Container ausgeführt
‫und aufgerufen wird. Dann läuft es.
‫Ohne den Befehl healthcheck ist das Starten und Ausführen sehr schnell. Sie sind fast augenblicklich.
‫Wir werden sehen, dass hier mit einem Docker-Dienst der Name p1 postgres erstellt wird.
‫Sobald die Vorbereitung abgeschlossen ist, indem Sie das Image herunterladen, werden Sie feststellen, dass es sofort
‫ausgeführt wird, da es keine Integritätsprüfung gibt. Es hat nichts anderes zu tun, als den Container zu starten und
‫zu sagen: 'Ja. Die Binärdatei wird ausgeführt. 'Wenn wir
‫jedoch denselben Befehl ausführen, erstellt der Docker-Dienst den Befehl p2 und gibt ihm denselben
‫Integritätsbefehl.
‫Wir starten diesen Service mit dem eingebauten Befehl healthcheck.
‫Was wir sehen werden, ist, dass es von der Vorbereitung bis zum Start geht und 30 Sekunden
‫lang im Startzustand bleibt, bis der erste Healthcheck ausgeführt wird.
‫Dies ist jetzt der Docker-Dienst, der einen fehlerfreien Zustand erwartet, bevor dieser Dienst als
‫vollständig ausgeführt betrachtet wird. Nach Ablauf der 30 Sekunden wechselt es in den Betriebszustand. Dann bekommen wir die letzte kleine Bestätigung,
‫nur um sicherzustellen, dass es als stabil gilt, und dann sind wir fertig.
‫Sie können bereits erkennen, dass wir mit Services und Service-Updates
‫diesen zusätzlichen Bonus für das Gesundheitskonzept erhalten, wenn wir diese Befehle verwenden, wann immer wir können.