‫Nachdem Sie die Grundlagen des Erstellens eines Multiknoten-Schwarms und des Erstellens von Overlay-Netzwerken und Docker-Diensten verstanden haben, werden wir uns
‫mit der nächsten wirklich coolen Sache bei Swarm befassen, nämlich Stacks. Keine Stapel von Pfannkuchen, sondern
‫Stapel von Dienstleistungen. In 1. 13, Docker hat dieses wirklich großartige Feature
‫hinzugefügt, das eine weitere Abstraktionsebene über die Stapel hinzufügt. Grundsätzlich ist es Compose-Dateien für die Produktion von Swarm. Jetzt akzeptieren Stapel
‫Compose-Dateien.
‫Im Inneren gibt es eine deklarative Definition, in der wir sagen, dass ich
‫das Endergebnis haben möchte.
‫Und es ist die Aufgabe des Schwarms, all das herauszufinden. Jetzt sind es nicht nur Dienstleistungen; Es sind auch Netzwerke
‫und Volumes.
‫Und ein kleiner Vorgeschmack.
‫Es wird tatsächlich Geheimnisse beinhalten, über die wir in den nächsten Vorträgen sprechen werden.
‫Wir können einen neuen Befehl verwenden, nämlich docker stack deploy, um diese Compose-Datei zu importieren und den darin enthaltenen
‫Befehl auszuführen.
‫Der Stack verwaltet dies alles.
‫Wir müssen nicht erst Netzwerke oder Volumes erstellen, aber das können wir auch.
‫Wir können in unserer Compose-Datei etwas mit dem Namen External verwenden, um zu sagen, dass dies bereits Dinge sind, die
‫in meinem Schwarm existieren. Mach weiter und benutze diese, mach dir nicht die Mühe, sie zu erschaffen.
‫Aber in der Regel erledigen Ihre Stacks alles für Sie, weil es auf diese Weise einfacher ist.
‫Wir werden einige neue Funktionen in unsere Compose-Datei aufnehmen, also werden wir mit den Funktionen
‫beginnen, die denen sehr ähnlich sind, die wir zuvor hatten. Aber wir werden diesen neuen bereitgestellten Schlüssel oder Wörterbuch
‫erhalten, mit dem wir die für Swarm spezifischen Dinge spezifizieren können.
‫Wie viele Kopien wollen wir?
‫Was möchten wir beim Failover tun? Wie wollen wir fortlaufende Updates durchführen und
‫all diese Dinge, die uns auf unserer lokalen Entwicklungsmaschine nicht interessieren?
‫Dies hat jedoch den Preis, dass wir den Build-Befehl noch nicht ausführen können. Dies wird in Swarm möglicherweise niemals
‫passieren, da die Denkweise hier lautet, dass das Bauen auf Ihrem Produktionsschwarm nicht
‫passieren sollte. Das Bauen ist etwas, das Ihr CI-System tun sollte.
‫Vielleicht Jenkins oder so was wie Codeship.
‫Sobald Sie Ihre Images erstellt und in Ihrem Repository abgelegt haben, wird dieser Stapel tatsächlich derjenige sein,
‫der diese Images abruft und sie mit den Bereitstellungsoptionen bereitstellt.
‫Die gute Nachricht ist jedoch, dass sie tatsächlich miteinander auskommen.
‫Auf Ihrem lokalen Computer wird Compose beim Ausführen des Docker-Compose-Befehls ignoriert.
‫Tatsächlich werden alle Bereitstellungsinformationen ignoriert.
‫Tatsächlich heißt es: "Hey, Sie haben hier Informationen zur Bereitstellung."
‫Ich kann es nicht wirklich benutzen, also werde ich es ignorieren. Wenn Sie
‫auf Swarm sind und einen neuen Stack oder ein Update für einen Stack bereitstellen, heißt es
‫tatsächlich: „Hey, hier sind Build-Befehle enthalten.
‫Ich mache keine Builds, also werde ich sie ignorieren und weitermachen. »Das Schöne ist, dass
‫Sie Ihre Datei nicht ändern müssen. Wir werden später sehen, wie wir tatsächlich
‫eine einzelne Compose-Datei haben können, die alles tut, was wir auf der Entwicklungsseite und auf der
‫Produktionsbereitstellungsseite tun müssen.
‫Es ist ziemlich cool.
‫Schließlich benötigen Sie die Docker Compose CLI, die Binärdatei, nicht. Das muss nicht in
‫deinem Schwarm sein. Denn wieder komponieren, der eigentliche Befehl, ist kein Produktionswerkzeug.
‫Es war nicht als Produktion gedacht.
‫Es wurde als Entwickler- und Sysadmin-Hilfsprogramm entwickelt.
‫Es ist wirklich am besten für lokale Arbeiten an unseren Maschinen.
‫Der Schwarm, der im Grunde die Docker Engine ist. Die Docker Engine kann
‫jetzt Compose-Dateien mit diesem Stapelbefehl akzeptieren. Es liest die Compose-Dateien, ohne dass Docker Compose irgendwo auf dem Server benötigt wird.
‫Lassen Sie uns einen kurzen Rückblick auf unsere Dienstleistungen werfen.
‫So würde unser Service aussehen.
‫Wir würden einen Service schaffen ...
‫Nehmen wir an, es ist Nginx. Nehmen wir an, wir haben drei Kopien davon angegeben.
‫Dann werden drei Aufgaben im Orchestrator erstellt, und diese Aufgaben werden bestimmte Server oder
‫Knoten zum Anlegen finden und Container erstellen.
‫In den neuen Stacks geht es um mehrere Dienste, einen oder mehrere, richtig. Sie können dort Dutzende von
‫Diensten haben. In dieser einzelnen YAML-Datei.
‫Sie verhalten sich genauso wie die Dienste, die wir zuvor hatten. Erst jetzt können wir Volumes und Overlay-Netzwerke in
‫dieser Compose-Datei erstellen. Und das führt zu
‫dem, was wir als Stapel bezeichnen würden. Ein Stapel steuert all diese Dinge.
‫Und es wird tatsächlich seinen Namen richtig auf alle Objekte setzen, so dass Sie leicht erkennen
‫können, welche mit welchem Stapel zusammenhängen. Tatsächlich werden dort auch Labels eingefügt, auf die wir
‫später noch eingehen werden. Dies sind mehr Metadaten, mit denen Sie feststellen können, von welchem Stapel diese bestimmte Sache stammt.
‫Das ist also wirklich toll.
‫Wir können jetzt eine YAML-Datei verwenden, um all die Dinge zu tun, die wir nicht in
‫die Dienstbefehle eingeben wollten. Weil die Servicebefehle schon ziemlich unhandlich und lang wurden. Und dann haben wir
‫Bash-Skripte erstellt, um diese Befehle auszuführen, und dann wurde es einfach langweilig, richtig.
‫Nachdem wir Swarm nun seit acht Monaten im Einsatz haben, erhalten wir jetzt diese Stack-Funktion, mit der diese Dienste
‫verwaltet werden.
‫Beachten Sie, dass der Stapel nur für einen Schwarm ist.
‫Richtig? Es kann nicht viele Schwärme machen.
‫Es wird nur auf einem Schwarm ausgeführt, sodass alle Knoten gesteuert und alle diese Dienste, Netzwerke
‫und Volumes bereitgestellt werden können.
‫Ich sollte sagen, dass dieses Diagramm tatsächlich eine weitere Sache enthalten kann, nämlich Geheimnisse, da
‫der Stapel auch diese steuern kann. Wir werden das in einem späteren Vortrag in diesem Abschnitt sehen. OKAY.
‫Schauen wir uns die Stapel an und wie sie funktionieren.
‫Ich bin wieder in meinem 3-Knoten-Schwarm, den wir zuvor erstellt haben. Ich werde das Fenster auf Node1 maximieren, da ich
‫die anderen beiden Nodes nicht wirklich brauche.
‫Zumindest brauche ich ihre SSH-Kommandozeile nicht.
‫Wir werden das Beispiel der Abstimmungs-App verwenden, das wir in früheren Vorlesungen für diesen Abschnitt verwendet haben.
‫Wenn Sie sich an unser Design erinnern, waren es fünf verschiedene Dienste, die alle voneinander abhängig
‫waren.
‫Und es gab uns letztendlich zwei verschiedene Websites.
‫Sie haben die Liste der besten Dienstleistungen mit all den Werten und Optionen erstellt, die sie brauchten,
‫und sie war perfekt, oder?
‫Ich bin hier, um dir zu sagen, dass das jetzt nicht mehr gebraucht wird.
‫Es war wirklich wichtig für uns, sie zu verwenden, und nicht für alles wird eine Stack-Datei benötigt.
‫Aber jetzt habe ich eine Stapeldatei.
‫Werfen wir einen kurzen Blick darauf, denn Sie werden feststellen, dass es sehr
‫nach einer Compose-Datei aussieht, weil es so ist. Das einzige, was Sie wirklich ändern müssen, muss mindestens Version 3 oder
‫höher sein.
‫Die aktuellste Version ist Version 3. 1, aber ich bin sicher, das wird sich ändern, wenn es
‫sich weiter ändert und reift.
‫Sie benötigen jedoch Version 3, um Stapel verwenden zu können.
‫Sie werden feststellen, dass wir unsere Redis, unsere Db und unsere Stimme haben und all diese Dinge, die
‫Ihnen aus Ihrer eigenen Arbeit wahrscheinlich sehr ähnlich sind. Sie sind wahrscheinlich sehr vertraut mit denen und den Bildern, die sie benötigen,
‫und den Ports, die sie öffnen müssen, und all dem.
‫In diesem Fall werden Sie jedoch feststellen, dass die Bereitstellung erfolgt.
‫Hier bereitstellen ist eine neue Option. Hier sehen Sie, dass ich angegeben habe, wie viele
‫Replikate ich möchte, dh wie viele Kopien dieses Images gleichzeitig ausgeführt werden müssen.
‫Und was passiert, wenn ich ein Update mache.
‫Wenn ich also ein tatsächliches Stack-Update durchführe, werden dann Service-Updates durchgeführt.
‫Wie soll das rollen?
‫Richtig?
‫Möchte ich alle gleichzeitig untergehen? Will ich immer nur einen?
‫Wie viel Verspätung zwischen ihnen?
‫Hier gibt es alle möglichen Optionen.
‫Wir kratzen nur ein bisschen an der Oberfläche, aber Sie können sehen, dass ich hier eine Neustartrichtlinie
‫habe, die es automatisch neu startet, wenn der Container ausfällt.
‫Hier unten in der Datenbank
‫können Sie sehen, dass tatsächlich Einschränkungen festgelegt wurden, um sicherzustellen, dass es sich um einen bestimmten Knoten handelt.
‫Wir haben noch nicht wirklich viel über Einschränkungen gesprochen, aber es gibt für
‫uns Möglichkeiten, Objekte zu kennzeichnen, dh Container oder Bilder oder wirklich alles, was wir in Swarm oder in Docker selbst erstellen oder zerstören können.
‫Wir können tatsächlich jedem dieser Knoten Beschriftungen zuweisen, einschließlich Knoten, und ein Knoten, der ein Manager ist, erhält seine
‫eigenen Beschriftungen.
‫Dies ist sehr einfach zu tun, um nur zu sagen, hey, dieser Container muss auf einem Knoten ausgeführt werden, der
‫diese bestimmte Rolle hat.
‫Tolles Beispiel da. Während wir nach unten scrollen, haben wir einige Parallelitätsoptionen, die wir zuvor gesehen haben.
‫Diese Verzögerungsoption ist ziemlich cool. Wenn Sie eine Art Aufwärmzeit haben, wenn
‫Sie Behälter haben, die sich drehen. Vielleicht haben sie angefangen, aber vielleicht 60 Sekunden lang werden sie nicht live geschaltet oder so.
‫Sie können dort Verzögerungen hinzufügen. Wir werden uns diese später
‫während der produktiven blaugrünen Bereitstellungen genauer ansehen. Im Moment sieht man, dass das alles ziemlich normal ist.
‫Wir haben hier unten sogar noch mehr Optionen. Sie können tatsächlich sehen, dass ich dies ein bestimmtes Etikett zuweisen.
‫Ich habe ein Fenster und einen maximalen Versuch zum Neustart der Richtlinie.
‫Wenn es also versucht, neu zu starten, und es weiterhin fehlschlägt, wird es nicht mehr als dreimal versuchen.
‫Lass es uns ausprobieren.
‫Alles, was ich tun muss, ist ein Docker-Stack-Deployment -c zum Verfassen. Also werde ich eine Compose-Datei verwenden.
‫Jetzt werde ich es voteapp nennen. Und los geht's. Es hat nicht wirklich alles erschaffen und es so schnell
‫auf Touren gebracht.
‫Alles, was es getan hat, war, diese Objekte im Scheduler zu erstellen, die dann den Prozess der Erstellung
‫der Services durchlaufen, die dann die Aufgaben erstellen, die dann die Container erstellen.
‫Es muss auch die Netzwerke erstellen, wie Sie hier sehen werden. Denken Sie daran, wir hatten das Frontend
‫und das Backend, so dass diese erstellt wurden, sowie ein Standardnetzwerk, das von dieser bestimmten Stack-Datei, die ich hatte,
‫als Standardnetzwerk verwendet wurde.
‫Und dann sehen Sie diese Option für Visualizer, die eine neue ist, die wir zuvor nicht verwendet haben.
‫Wir werden das gleich sehen.
‫Schauen wir uns also den Befehl docker stack etwas genauer an.
‫Sie werden sehen, dass wir bereitstellen können. Das haben wir schon gemacht.
‫Dann haben
‫wir ein ls, ein ps, ein rm und Dienste.
‫Dieser Befehl hat also nicht viele Funktionen.
‫Es ist ziemlich einfach, da die gesamte Funktionalität in der Compose-Datei und in den von ihr
‫erstellten Objekten enthalten ist.
‫Da wir das alles schon getan haben, können wir Dinge wie ls tun, die uns nur alle unsere Stapel zeigen.
‫Es ist ein ziemlich grundlegender Befehl. Wir haben nur den einen. Wenn ich dann ein ps mache, zeigt es mir tatsächlich ... Hoppla, ich
‫muss den Namen angeben.
‫Abstimmung.
‫Es heißt Voteapp.
‫Ich muss das richtig machen.
‫OKAY.
‫Lassen Sie mich das belegen, damit Sie das etwas besser sehen können. Genau da.
‫Dies sind die eigentlichen Aufgaben. Dann können Sie sehen, auf welchem Knoten sie ausgeführt werden.
‫Es sind eigentlich nicht die Container. Es ist eigentlich die Aufgabe, die wir hier sehen. Denn wenn es der eigentliche Container
‫wäre, würden wir einen großen, langen Namen sehen. Denn wenn Sie sich erinnern, dass die Dienste, die wir früher erstellt
‫haben, diese wirklich langen Namen
‫hatten, wenn wir sie tatsächlich erstellt haben. Richtig? Wenn ich ein Docker-Container-ls
‫oder ein Docker-ps gemacht habe, bekommst du diese wirklich langen Namen. Und das, weil sie alle eine GUID bekommen, weil jeder Container
‫einen eindeutigen Namen haben muss.
‫So garantieren sie, dass sie immer einzigartig sind und niemals kollidieren.
‫Dann ist der letzte
‫hier Docker Stack Services Voteapp.
‫Ich mag dieses Modell am liebsten, weil es mir meine Repliken zeigt.
‫Es ist
‫wie ein Dienst ls. Es zeigt mir, wie viele Replikate ich gestartet habe, sodass ich weiß, ob
‫bereits die richtige Anzahl von Containern gestartet wurde. Wenn ich dann tiefer tauchen
‫möchte, könnte ich einen Docker-Stack ps machen. Wir bekommen hier die Aufgabennamen und sehen, auf welchen Knoten sie laufen.
‫Diese beiden zusammen geben Ihnen tatsächlich ein vollständiges Bild davon, wie diese gesamte Anwendung ausgeführt wird.
‫Wenn ich in das Netzwerk eintauchen wollte, könnte ich ein Docker-Netzwerk einrichten, wie
‫wir es normalerweise tun würden.
‫Und Sie können diese drei neuen Overlay-Netzwerke sehen, die für diese App erstellt wurden. Und beachten Sie, dass der
‫Name der App immer am Anfang steht. Der Stapel steht immer vor dem Namen des Dienstes.
‫So stellt jeder Stapel sicher, dass sein Name vorne steht.
‫Und dann schauen wir uns das an.
‫Lassen Sie mich meinen Browser aufrufen.
‫Gut.
‫Wir können sie auf Port 5000 sehen.
‫Ich habe die Abstimmungsseite in Betrieb genommen.
‫Ich gehe zu 5001.
‫Ich habe die Ergebnisseite, damit ich sie aufrufen und dann das Ergebnis sehen kann.
‫Dann heißt dieser neue Visualizer.
‫Es ist auf 8080. Der Visualizer ist eigentlich ein hübsches Tool für Demonstrationszwecke.
‫Das ist eigentlich gemacht ... all dies wird übrigens von Docker gemacht,
‫und dies sind alles Open-Source-Repos, die Sie im Abschnitt Ressourcen dieses Abschnitts sehen können.
‫Daher haben wir für jeden Dienst unterschiedliche Farben.
‫Das Voteapp-Ergebnis ist grün.
‫Und dann ist das Redis eine Art Senf, und die Abstimmung ist ein Rosa. Sie sehen, es gibt zwei Stimmen und es gibt
‫zwei Redises.
‫Es ist ziemlich gut zu zeigen, was passiert, wenn sich die Dinge im Schwarm bewegen.
‫Wenn ich tatsächlich in meine Akte gegangen bin und eine Änderung vorgenommen habe.
‫Gehen wir zur Abstimmungs-App und nehmen wir an, wir möchten die Replikate auf fünf ändern.
‫Wir könnten den Service aktualisieren. Aber das ist eine Art Anti-Muster. Wenn Sie manuell Befehle
‫in den Dienst eingeben, z. B.
‫docker service update, bedeutet dies, dass diese Änderungen beim nächsten Anwenden dieser YAML-Datei überschrieben werden.
‫Wenn Sie jemals eine Cloud-Formation in AWS oder einem anderen Konfigurationsmanagement durchgeführt haben, wissen Sie, dass Sie
‫diese Datei immer verwenden möchten, wenn Sie eine solche Konfigurationsdatei zum Verwalten Ihrer Infrastruktur verwenden, da
‫dies die Quelle sein wird der Wahrheit.
‫In der Produktion handelt es sich wahrscheinlich um eine Art Datei, die Sie in einem Git-Repository aufbewahren, für das
‫Sie die Versionskontrolle haben, und Sie steuern Änderungen, und auf diese Weise können Sie Änderungen rückgängig machen.
‫In diesem Fall werde ich diese Datei nur sehr schnell ändern und denselben Befehl ausführen, Docker Stack
‫Deployment.
‫Beachten Sie, dass wir kein Update haben. Weil wir auf demselben Stack bereitstellen und erkennen
‫werden, dass er vorhanden ist und dass wir ihn basierend auf diesen Änderungen aktualisieren werden.
‫Um es zu aktualisieren, müssen wir sicherstellen, dass wir den richtigen Namen verwenden.
‫Es ist also Voteapp. Beachten Sie dann, dass es darum geht, Dienste zu aktualisieren, aber zu erkennen, dass sie geändert werden müssen.
‫Wenn wir dann zu unserem Visualizer gehen, können Sie sehen, dass wir es bereits haben.
‫Wir sind heute einfach zu langsam, oder?
‫Wir können mit dem Schwarm nicht mithalten. Wir haben jetzt fünf dieser Abstimmungs-Apps, die bereits ausgeführt werden.
‫Wenn es eine Weile dauern würde, bis sie ausgeführt und gestartet werden, würden sich ihre Zustände hier tatsächlich ändern, wenn sie
‫online gehen.
‫Da es sich jedoch um eine einfache Web-App handelt, kann sie schnell gestartet werden.
‫Okay.
‫Das sind Stapel.
‫Lassen Sie uns nun die Geheimnisse zu unseren Stapeln hinzufügen.