‫Dieser Abschnitt konzentriert sich ausschließlich auf Docker Compose, eine Kombination
‫aus einem Befehlszeilentool und einer Konfigurationsdatei. Voraussetzung für diesen Abschnitt ist, dass
‫Sie die Grundlagen der letzten Abschnitte zu Bildern und Containern genau kennen.
‫Während wir diesen Kurs durchlaufen, werden Sie wahrscheinlich anfangen zu hören, wie ich
‫immer aufgeregter werde, weil die Dinge immer besser werden.
‫Richtig?
‫Wenn Sie eine Komponente erlernen, denken Sie: „Mann, Binden Sie Reittiere und Volumen sind wirklich cool. Das spart mir Zeit.
‫Ich kann mir vorstellen, wie ich das nutzen werde. Bla bla bla bla.
‫Dann werde ich mit der nächsten Sache kommen, die noch besser sein wird als das, was Sie gerade gelernt haben.
‫In diesem Fall könnte es nicht wahrer sein.
‫Docker Compose. Also, was ist es? Und warum interessiert es uns? So wenige Softwaredienste sind wirklich eigenständig.
‫Wenn Sie an Ihre Container denken, handelt es sich um eine Einzelprozesslösung, und wir werden selten nur einen einzigen
‫Container verwenden, um ein Problem zu lösen oder unseren Kunden einen Service zu bieten.
‫Unsere Container erfordern häufig andere Container wie SQL oder einen Schlüsselwert. Und andere Anwendungen, die wir in
‫Containern ausführen müssen, wie Proxies oder Web-Frontends oder Backend-Worker und so weiter.
‫Was wäre, wenn wir alle Teile unserer Lösung so miteinander verbinden könnten, dass wir
‫uns nicht alle Docker-Ausführungsoptionen merken müssten, um sie dann in diskrete, virtuelle Netzwerke mit Beziehungen zwischen ihnen zu
‫integrieren und nur die Öffentlichkeit zu entlarven Ports, und drehen Sie sie alle auf und reißen Sie sie mit
‫einem Befehl.
‫Das ist Docker Compose.
‫Bevor wir eintauchen, müssen wir klären, dass Docker
‫Compose aus zwei Teilen besteht. Der erste Teil ist die YAML-Datei und ist sehr einfach zu verstehen.
‫Es ist in YAML geschrieben, und wenn Sie sich noch nie mit YAML befasst haben, ist das eine sehr einfache Konfigurationssprache.
‫Es ist fast so einfach wie eine INI-Datei.
‫Ich denke eigentlich, es ist einfacher, weil es Hierarchie zeigt.
‫Wir werden darauf eingehen. In dieser Datei legen Sie alle Container
‫fest, die Sie ausführen müssen, die benötigten Netzwerke, die benötigten Volumes, Umgebungsvariablen, Images und alle möglichen anderen
‫Konfigurationsoptionen.
‫Dann ist der zweite Teil von Docker Compose ein CLI-Tool, das Docker-Compose ist und das
‫wir normalerweise nur für lokale Entwickler und Testzwecke verwenden. Dabei verwenden wir die YAML-Datei, die wir zur Vereinfachung unserer Docker-Befehle erstellt haben.
‫Lassen Sie uns über diese Docker Compose-Datei sprechen.
‫Es gibt tatsächlich Versionen für die Dinge, die Sie in die Erstellungsdatei einfügen können. Als Docker Compose vor Jahren erstellt wurde, hieß es tatsächlich
‫"Fig" und es wurde nur Version 1 angenommen. Es wurde nicht einmal
‫eine Version in der Datei aufgeführt. Da die Datei ausgereift ist und der
‫Datei neue Funktionen wie Netzwerke und Volumes hinzugefügt wurden, haben sie die Versionsanweisung erstellt, die eigentlich die
‫erste Zeile in der Datei ist. Diese Datei kann tatsächlich mit einer Docker Compose-CLI verwendet werden, über die wir gleich
‫sprechen werden.
‫Dies ist wiederum hauptsächlich für das lokale Entwicklungsmanagement gedacht und erleichtert lediglich das Navigieren in Ihrer
‫Umgebung auf Ihrem lokalen Computer.
‫Ab Anfang 2017 liegt nun Version 1 vor. 13 und darüber hinaus können diese Dateien jetzt direkt mit der
‫Docker-Befehlszeile in der Produktion mit Swarm verwendet werden. Natürlich gibt es eine große Hilfe in
‫der Befehlszeile mit der --Hilfe.
‫Wenn wir uns einige Beispiele ansehen, sollten Sie wissen, dass die Docker Compose-Datei ein Standardname ist. Sie
‫können jedoch jeden gewünschten Dateinamen verwenden, sofern es sich um die richtige YAML-Datei handelt und Sie mit -f angeben, welche Datei Sie verwenden.
‫Ich versuche es zu benutzen.
‫Wenn ich meinen Editor öffne und mir die Vorlage hier ansehe, möchte ich nur einen Ausschnitt davon zeigen, wie
‫das aussehen soll.
‫Wir haben den Versionswert am Anfang.
‫Die neueste Version im ersten Quartal 2017 ist 3. 1.
‫Aber ich mache es immer mindestens Version 2. Wenn Sie diese Zeile dort nicht hinzufügen, wird immer von Version 1
‫ausgegangen.
‫Aber ich empfehle das nicht, weil Sie viele der Funktionen verlieren.
‫Also fange ich normalerweise mit Version 2 an. Dann, wenn ich bestimmte Funktionen aus Version 3 und 3 benötige. 1, am Ende
‫tippe ich dort die Versionsnummer ein. Sie werden sehen, dass die anderen drei Hauptabschnitte
‫Dienste, Volumes und Netzwerke sind, richtig?
‫Das ist also hierarchisch.
‫Bei Diensten kann alles aus zwei oder vier Leerzeichen bestehen, es muss jedoch konsistent sein.
‫Wenn Sie YAML nur im Internet nachschlagen, finden Sie einige Websites, auf denen Sie Informationen zum
‫Formatieren dieser Datei finden.
‫Wenn Sie einen modernen Editor verwenden, spricht dieser die YAML-Sprache und weiß, wie man mit diesen
‫Dateien und ihrer Formatierung umgeht.
‫In der Regel haben Sie hier mindestens Services, bei denen es sich eigentlich nur um Container handelt.
‫Der Grund, warum sie sie Services nennen, ist, dass Sie für jeden Container, den Sie hier erstellen,
‫tatsächlich mehrere dieser Container aus Redundanzgründen haben könnten. Also mussten sie sich ein anderes Wort
‫einfallen lassen.
‫Ich finde Dienstleistungen großartig, weil Sie das im Grunde genommen tun. Richtig?
‫Jeder Container oder alle Container, die identisch sind und die Sie verwenden, bieten normalerweise einen Dienst für
‫etwas an.
‫Unterhalb des Dienstnamens können Sie ihn erneut wie gewünscht aufrufen.
‫Es muss nicht der Name des Bildes sein oder es muss überhaupt nichts damit zu tun haben.
‫Es könnte Barney für den Dienstnamen sein, aber es wird der DNS-Name sein, den wir später herausfinden werden und
‫der in Ihren Docker-Netzwerken verwendet wird.
‫Ähnlich wie bei der Angabe von --name für einen Docker-Ausführungsbefehl.
‫Hier habe ich gezeigt, dass wir das Bild optional angeben können. Wir können den alternativen Befehl angeben,
‫der ausgeführt werden soll. Wenn wir den tatsächlichen Befehl überschreiben wollten, der beim Ausführen im Image angegeben
‫wurde, können wir dies hier tun.
‫Grundsätzlich können Sie alle Aktionen, die Sie mit dem docker run-Befehl ausführen, hier speichern. Denn genau darum geht
‫es, wenn Sie sich die verschiedenen Dinge im docker run-Befehl für die
‫Dinge merken, die Sie ständig ausführen.
‫Wenn Sie über eigene Entwicklungsumgebungen oder eigene Tools verfügen, möchten Sie diese Befehle
‫wahrscheinlich nicht immer wieder eingeben. Und Shell-Skripte können nur so viel.
‫Richtig?
‫Diese Datei würde also tatsächlich ein Shell-Skript ersetzen, das Ihre Docker-Ausführungsbefehle automatisiert.
‫Dies ist ein viel besserer Weg, um es zu tun.
‫Es ist einfacher zu lesen und besser dokumentiert.
‫Sie werden feststellen, dass hier Leerzeichen zulässig sind.
‫Sie können in Kommentaren Leerzeichen einfügen, wo immer Sie möchten.
‫Wenn Sie mehrere Dienste hatten, müssen Sie nur sicherstellen, dass sie eindeutige Namen haben.
‫Die anderen Teile, die wir angeben, sind Volumes und Netzwerke. Auch dies ist optional.
‫Grundsätzlich gelten dieselben Regeln wie bei der Ausführung über die Befehlszeile.
‫Wenn Sie jemals den Befehl docker volume create oder docker network create verwenden mussten, müssen Sie
‫dies nicht immer tun.
‫Es hängt nur von Ihrer Situation ab.
‫Sie können sie auch hier ablegen.
‫Schauen wir uns ein einfaches Beispiel aus der realen Welt an.
‫Sie erinnern sich, dass wir im letzten Abschnitt einen Vortrag gehalten haben, in dem wir Jekyll sehr schnell verwendet haben, um nur ein Bind
‫Mount-Beispiel zu erstellen.
‫So würde die Compose-Datei für diesen Docker-Ausführungsbefehl aussehen, und Sie werden sehen, dass ich das
‫Bild hier angegeben habe.
‫Ich habe es Jekyll genannt.
‫Ich habe es eine Lautstärke gegeben. Sie werden bemerken, dass Compose anstelle der pwd den Punkt versteht, was bedeutet,
‫dass dies das aktuelle Arbeitsverzeichnis ist, in dem ich mich befinde.
‫Verwenden Sie einfach dieses Verzeichnis, aus dem ich die Compose-Datei ausführe. Dann die Ports oder die Option -p.
‫Sie werden einige kleine Dinge an YAML bemerken, bei denen etwas nur eine Option hat, z.
‫B. wenn es nur ein Bild für jeden Dienst geben würde, wäre es normalerweise ein Schlüssel- und Wertformat wie dieses.
‫Wenn es sich um eine Liste von Elementen handelt, z. B. Volumes und Ports, in denen mehrere vorhanden sein können, werden Sie
‫feststellen, dass die Erstellungsdatei in der Regel einen Plural enthält. Anstelle von Volumen sind es Volumen. Und statt Hafen sind es Häfen.
‫Und dann wird es ein Listenformat mit einem - geben.
‫Wenn wir ganz schnell in ein anderes Beispiel springen.
‫Sie werden sehen, dass dies
‫in diesem Beispiel ein WordPress-Setup ist, in dem Sie den Datenbankdienst hier unten haben, der
‫einen Datenbankcontainer ausführt.
‫Und dann der WordPress-Webserver-Container ganz oben.
‫Sie werden bemerken, dass das Besondere daran ist, dass wir Umgebungsvariablen verwenden, die
‫mit einem -e in der Befehlszeile identisch sind. Aber anstatt eines Listenformats, in dem wir
‫ein - haben,
‫ist dies wieder eine andere Schlüssel- und Wertanweisung.
‫In diesem Format verwenden wir nicht das -, sondern listen nur den Schlüssel und den Wert auf.
‫Wenn ich noch einen hinzufügen müsste, würde ich das einfach hier tun. Alle diese Befehle werden bei der
‫Ausführung über die Compose-Befehlszeile an den Container übergeben.
‫Zum Schluss haben wir noch ein Beispiel. Dieser ist etwas komplizierter. Es ist tatsächlich
‫eines, an dem ich kürzlich gearbeitet habe, um einen Cluster mit drei Datenbankservern hinter einem Ghost-Webserver einzurichten.
‫Ghost ist eigentlich ein Blog-System ähnlich wie WordPress. Sie werden sehen, dass ich
‫für jeden dieser Container mehrere Umgebungsvariablen habe.
‫Also habe ich meinen Ghost-Container oben. Dann habe ich dieses Ding tatsächlich
‫als SQL-Proxy bezeichnet, der sich vor MySQL-Servern befindet und als Lastausgleichs- und Failover-Lösung fungiert.
‫Dann habe ich jeden meiner beiden MySQL-Server. Hier unten werden Sie eine weitere Option bemerken, die sagt:
‫"abhängig von" und abhängig von ist ziemlich häufig.
‫Im Grunde hilft es Compose, die Beziehung zwischen diesen Diensten zu verstehen. Es weiß, dass ich, wenn
‫ich meinen Ghost starten muss, auch andere starten muss.
‫Sie können hier oben sehen, dass mein Ghost One tatsächlich davon abhängt. Wir werden in späteren Vorlesungen auf die
‫Details eingehen, wie dies funktioniert.
‫Aber im Moment ist dies wahrscheinlich eine Menge zu verdauen, und all diese verschiedenen Befehle und so weiter, aber vertrauen
‫Sie darauf, dass Docker einige wirklich großartige Dokumentationen auf seiner Website hat. Wenn Sie bei Google nur nach Docker Compose-Dateien
‫suchen, werden Sie diese wahrscheinlich bei den ersten Treffern finden.
‫Es wird unter den Dokumenten sein. Docker. com Website, wie gewohnt, und
‫es wird Dokumentation über jeden einzelnen kleinen Schlüssel und Wert Option sein, die Sie haben.
‫Sie werden sehen, was davon abhängt, was ich gerade erwähnt habe. Hier sehen Sie die Umgebung, in der verschiedene Möglichkeiten zum
‫Einfügen von Umgebungsvariablen gezeigt werden. Das Tolle an dieser Dokumentation ist, dass sie
‫zahlreiche Beispiele enthält.
‫Persönlich bin ich jeden Tag auf dieser Site, genau wie auf der Seite mit den Docker-Ausführungsbefehlsoptionen oder der Seite
‫mit den Compose-Befehlsoptionen.
‫Ich beziehe mich ständig darauf, weil es heutzutage einfach so viele Funktionen gibt, dass ich mich nicht an
‫alle erinnern kann.
‫Also behalte ich sie in meinen Lesezeichen.
‫Nachdem wir eine allgemeine Vorstellung davon haben, wie das Compose-Dateiformat aussehen könnte, wechseln wir
‫zur Befehlszeile und lernen das Docker Compose CLI-Tool kennen.