‫In diesem Abschnitt haben wir viel über Swarm berichtet. Swarm, Stacks und Secrets sind eine Art
‫Trilogie mit großartigen Funktionen, die uns die Produktion erheblich erleichtern können.
‫Ich möchte Ihnen zeigen, wie es sein könnte, wenn Sie Ihre Compose-Dateien tatsächlich aufgenommen und auf verschiedene Arten
‫organisiert haben, und das
‫nenne ich im Grunde das Leben des Traums.
‫Es stellt sich heraus, dass Sie tatsächlich eine einzelne Datei verwenden können, um eine Menge Dinge zu erledigen,
‫aber manchmal wächst Ihre Komplexität und Sie werden mehrere Compose-Dateien benötigen.
‫Ich möchte nur ganz schnell durchlaufen.
‫Sie müssen dies nicht selbst tun, wenn Sie dies nicht möchten. Ich zeige Ihnen nur ein
‫Beispiel dafür, wie diese Compose-Dateien zusammenarbeiten können, um Ihre Umgebung währenddessen aufzubauen.
‫In diesem Szenario verwenden wir Docker Compose für unsere lokale Entwicklungsumgebung.
‫Wir werden eine Docker-Konfigurationsdatei für unsere CI-Umgebung verwenden, um Integrationstests durchzuführen.
‫Wenn wir dann in der Produktion sind, werden wir diese Dateien für die Docker-Stapelbereitstellung verwenden,
‫um die Produktionsumgebung tatsächlich mit einem Stapel bereitzustellen. Ich befinde mich also auf meinem lokalen Computer und
‫werde das vorhergehende Beispiel des Drupal-Szenarios mit einem Datenbankserver und einem Web-Frontend verwenden.
‫Wir haben das Dockerfile, das wir in unseren vorherigen Aufträgen verwendet haben. Wir erstellen eine benutzerdefinierte, aber einfache
‫Drupal-Konfiguration mit einer Vorlage.
‫Dann haben wir diese Standard-Compose-Datei.
‫Dies wird als
‫Überschreibung bezeichnet, was wir jetzt tun werden. Bei einer Überschreibung habe ich die Standarddatei von Docker Compose
‫und es werden die Standardeinstellungen festgelegt, die in allen meinen Umgebungen gleich sind.
‫Dann habe ich diese Override-Datei, die standardmäßig Docker Compose, wenn sie genau diesen Namen
‫trägt, Docker Compose. überschreiben. yml, dies wird automatisch angezeigt, wenn ich einen Docker zusammenstelle.
‫Sie werden sehen, dass wir in diesem Szenario von einer lokalen Entwicklung ausgehen, da wir wirklich möchten, dass die
‫handschriftlichen Befehle, die wir eingeben, lokal am einfachsten sind.
‫Normalerweise ist in Ihrer CI-Umgebung alles automatisiert, sodass es uns egal ist, ob diese Befehle
‫etwas länger sind.
‫Aber wir wollen wirklich vor Ort ist die einfache Docker zusammenstellen.
‫Die coole Sache ist, dass Docker Compose diese Datei
‫automatisch liest und diese Einstellungen in der Docker Compose-yml-Datei überschreibt oder überschreibt.
‫Beachten Sie, dass
‫ich hier keinen Bildnamen habe, da dieser hier bereits angegeben ist. In dieser Überschreibungsdatei überschreibe ich, indem
‫ich sage, dass ich das Image lokal mithilfe der Docker-Datei in diesem aktuellen Verzeichnis erstellen möchte.
‫Ich möchte einen Port auf 8080 für die lokale Entwicklung erstellen. Und ich richte ein paar Bände ein, und Sie werden sogar bemerken, dass ich Ihnen hier ein
‫Beispiel für ein Bind-Mount gegeben habe, bei dem ich möglicherweise ein benutzerdefiniertes Thema mache. Und ich möchte mein Thema auf meinem Host
‫wie in den vorherigen Abschnitten in den Container mounten, damit ich es lokal ändern und dann
‫sofort auf dem Server anzeigen kann.
‫Übrigens weiß ich in diesem Beispiel nicht, wie man Themen in Drupal entwickelt.
‫Ich bin mir nicht ganz sicher, ob eine Datei, die ich dort ändere, automatisch übernommen wird.
‫Ich wollte nur ein Beispiel zeigen, wie Sie beim Entwickeln im Web in der Regel so vorgehen, ohne
‫das Compose jedes Mal anhalten und starten zu müssen. Unter postgres haben wir hier unten die
‫Umgebungsvariable und die Secret-Einstellungen wie zuvor. Wir haben die definierten Volumes und Sie werden
‫unten
‫sehen, dass ich tatsächlich das dateibasierte Geheimnis habe, da wir bei der lokalen Entwicklung das dateibasierte
‫Geheimnis verwenden müssen.
‫Die Dinge werden ein wenig interessant, wenn ich mir diese Produkte oder Testdateien ansehe. Die Art und Weise, wie dies funktionieren wird,
‫ist, daran zu erinnern, dass die. überschreiben. yml wird automatisch von der
‫Docker Compose-Befehlszeile abgerufen. In Prod
‫oder Test muss ich sie manuell angeben.
‫Zum Testen müssen wir also den Befehl -f verwenden.
‫Wenn Sie sich an frühere Abschnitte erinnern, bedeutet -f, dass wir beim Erstellen eines Andockfensters eine benutzerdefinierte
‫Datei angeben möchten. Das zeige ich dir gleich.
‫Da wir in der Produktion die Docker Compose-Befehlszeile nicht
‫auf einem Produktionsserver haben, verwenden wir hier einen Docker Compose-Konfigurationsbefehl.
‫Der Befehl config führt tatsächlich eine Ausgabe durch, indem er die Ausgabe mehrerer Konfigurationsdateien
‫zusammenfasst oder kombiniert.
‫Das wird wirklich cool.
‫Ganz schnell, die Testdatei enthält nur Drupal und Postgres.
‫Stellen Sie sich vor, dies wäre Ihre Jenkins CI- oder Codeship CI-Lösung, bei der das Image jedes Mal
‫erstellt werden soll, wenn ich meinen Code festschreibe, und ich möchte, dass es sich zu
‫Testzwecken auf diesem Port befindet. Dann werde ich ein falsches Passwort verwenden. Ich muss jedoch keines der Volumes definieren, da
‫ich nicht wirklich versuchen werde, die Daten für benannte Volumes zu speichern, da es sich wiederum nur um eine CI-Plattform handelt.
‫Sobald es Tests besteht oder nicht besteht, wird es alles los.
‫In diesem Szenario wird möglicherweise das folgende Beispielszenario angezeigt: In Ihrer CI-Lösung
‫befinden sich möglicherweise nur Datenbanken, die aus einem benutzerdefinierten Git-Repository stammen, oder es handelt
‫sich möglicherweise um einen FTP-Download. Oder es passiert etwas während der Initialisierung
‫Ihres CI, wo es tatsächlich eine Datenbankdatei herunterlädt. Und anstatt dass wir unsere Datenbank jedes Mal erstellen
‫müssen, wenn wir CI-Tests durchführen, mounten wir einfach dieses Verzeichnis mit Beispieldaten dort, wo sich unsere Postgres-Daten befinden
‫sollen.
‫Auf diese Weise können wir garantieren, dass wir jedes Mal, wenn wir einen CI-Test durchführen, die gleichen Beispieldaten haben.
‫Ich werde nicht weiter darauf eingehen. Ich wollte nur zeigen, dass diese Datei
‫für CI möglicherweise anders ist.
‫Dann haben wir in der Produktion all unsere normalen Produktionsprobleme. Wir geben die Volumina für unsere
‫spezifischen Daten an. Wir geben unser Geheimnis an. Und siehe unten, wir haben das äußere Geheimnis.
‫Weil wir das Geheimnis bereits über die Kommandozeile eingegeben haben, wie wir es in der vorherigen
‫Aufgabe getan haben.
‫Der Punkt hier ist, dass alle drei dieser Konfigurationen in irgendeiner Weise unterschiedlich sind,
‫aber sie beziehen sich alle auf die Kernkonfiguration oder die Basiskonfiguration, die nur die beiden Dienste und ihre Images definiert.
‫Sie können hier sehen. Hier ist eine Erinnerung daran, wie es aussieht.
‫Verlassen wir dies und führen ein paar Befehle aus.
‫Wenn ich in dieses Verzeichnis schaue, werden Sie feststellen, dass ich die Basisdatei und dann die drei Überschreibungsdateien habe.
‫Denken Sie auch hier daran, dass die Außerkraftsetzung. yml ist die Standardeinstellung.
‫Wenn ich eine Docker-Zusammenstellung mache, wird hier tatsächlich die Docker-Zusammenstellung verwendet. yml zuerst, und dann wird die
‫Überschreibung überlagert. yml eins oben drauf. Ich möchte ein -d einfügen, damit
‫wir einen kurzen Blick darauf werfen können, wie es angefangen hat. Ich werde das Drupal-Bild einer Docker-Inspektion unterziehen.
‫Und was ich dir zeigen wollte, war hier, es sind alle Reittiere aufgelistet.
‫Wir wissen also, dass die Override-Datei benötigt wurde, da in der Override-Datei alle diese Mounts definiert
‫wurden.
‫Wir wissen also, dass es das aufgefangen hat.
‫Es ist klar, dass es nicht wissen würde, welche Bilder es verwenden soll, wenn es nicht die
‫Basis-Datei aufgreift. Daher würde es sich bei uns beschweren und sagen, dass die Compose-Datei unvollständig ist.
‫Das hat funktioniert.
‫Lass uns schnell einen Down machen.
‫Wenn wir den für unsere CI-Lösung erforderlichen Befehl tatsächlich ausführen würden, müssten wir
‫bei unserer CI-Lösung sicherstellen, dass Docker Compose dort vorhanden, installiert und verfügbar ist, damit wir
‫Docker Compose-Befehle ausführen können. Dann können wir das -f angeben,
‫und dann ist die Reihenfolge der fs die Basisdatei, die immer zuerst sein muss.
‫Also erst Docker-Compose-yml, dann Docker-Compose-Test.
‫Wenn wir dies mit einem up am Ende und einem -d machen und dann denselben Drupal inspizieren, werden Sie
‫feststellen, dass es keine Bind-Reittiere gibt.
‫Sie fehlen vollständig, da wir sie in der Testdatei nicht angegeben haben.
‫Wir brauchten Drupal eigentlich nicht, um Informationen zu speichern, da sie am Ende
‫unseres CI-Laufs weggeworfen würden.
‫Und drittens haben wir die Produktionskonfiguration.
‫Die Produktionskonfiguration wird ein bisschen anders sein.
‫Ich drücke den Aufwärtspfeil und dann mache ich hier den Anstoß. Anstelle eines Befehls up
‫möchte ich hier eine Konfiguration ausführen.
‫Wenn Sie sich die Hilfe für die Konfiguration ganz schnell ansehen, stehen Ihnen nur zwei Optionen zur Verfügung, von denen
‫in dieser Situation keine wirklich relevant ist.
‫Was wir einfach machen wollen, ist, config von selbst auszuführen. Was es tatsächlich tun wird,
‫ist, beide Dateien zu betrachten und sie zu einem einzigen Compose-Dateiäquivalent zusammenzufügen.
‫Was wir hier also tun könnten, ist, diesen Befehl irgendwo in unserer CI-Lösung auszuführen. Dann lassen Sie es in
‫eine Datei ausgeben, vielleicht wissen Sie, so etwas. Diese Ausgabedatei wäre diejenige, die wir offiziell in der
‫Produktion verwenden würden, um unseren Stack zu erstellen oder zu aktualisieren.
‫Ich möchte hier jedoch einen kleinen Vorbehalt einlegen.
‫Das ist alles relativ neues Zeug.
‫Wir wissen, dass Geheimnisse und Schwarmstapel relativ neu sind.
‫Sie sind nur ein paar Monate alt.
‫Ab dieser Aufnahme.
‫Es gibt also ein paar Ecken und Kanten.
‫Wir haben gerade den Befehl config ausgeführt, und Sie werden feststellen, dass die Geheimnisse dort nicht aufgeführt waren.
‫Das ist momentan ein Fehler.
‫Ich arbeite gerade mit dem Docker-Team zusammen, um zu sehen, ob wir diesen Fehler nicht unterdrücken können.
‫Wenn Sie dies lesen, ist es möglicherweise bereits behoben.
‫Stellen Sie sicher, dass Sie diese Ausgabe der Konfigurationszeile überprüfen, bevor Sie mit der Bereitstellung
‫in der Produktion beginnen.
‫Zweitens ist die Option "Erweiterungen erstellen", auf die ich hier nicht eingegangen bin, eine weitere Möglichkeit, diese
‫Compose-Dateien zu überschreiben, wenn Sie die Überschreibungsdatei tatsächlich verwenden und dort tatsächlich einen Erweiterungsabschnitt
‫definieren.
‫Es ist etwas aussagekräftiger, daher ist es leichter zu verstehen. Ich werde einen Link in den
‫Referenzen für diesen Abschnitt bereitstellen. Beachten Sie jedoch, dass diese Option "Erweitert" in Swarms-Stapeln noch nicht funktioniert.
‫Ich habe es hier nicht erwähnt, weil es Ihnen nicht wirklich den vollständigen Lebenszyklus der App gibt, auf
‫den wir gehofft haben, aber ich erwarte, dass sie irgendwann etwas dagegen unternehmen.
‫Fügen Sie es entweder in Swarm hinzu oder erstellen Sie einen besseren Workflow. Denn genau das ist die Idee,
‫die wir mit all diesen Tools erreichen wollen: einen vollständigen und einfachen Lebenszyklus von der
‫Entwicklung über den Test bis zur Produktion mit denselben Konfigurationen und Bildern .
‫Ich hoffe, Sie haben sich Gedanken darüber gemacht, wie Sie Ihre Apps auf diese Weise erstellen und
‫wie Sie Ihre eigenen Compose-Dateien für komplexe Szenarien erweitern können.
‫Denn nichts zaubert mir mit Docker schneller ein Lächeln ins Gesicht, als wenn ich jemanden sehe, der einen einzeiligen Befehl
‫ausführt, um etwas zu tun, für dessen Ausführung zuvor mehrere Skripts erforderlich waren.