‫In dieser Vorlesung geht es darum, Bilder in Ihre Compose-Dateien einzufügen, damit automatisch sichergestellt
‫ist, dass Sie ein Bild bereit
‫haben, wenn Sie Compose-Befehle ausführen. Wie bei anderen Dozenten
‫in diesem Abschnitt müssen Sie sich mit den Funktionen der Docker-Container- und Docker-Image-Befehlszeile auskennen.
‫Eine weitere Möglichkeit, die Compose für Sie bietet, besteht darin, Ihre Images zur Laufzeit zu erstellen. Es sucht im Cache nach Bildern
‫und wenn es Erstellungsoptionen enthält, erstellt es dieses Bild, wenn Sie den Befehl up verwenden.
‫Das Image wird nicht jedes Mal erstellt.
‫Es wird nur gebaut, wenn es es nicht findet.
‫Sie müssen entweder den Docker-Compose-Build verwenden, um Ihre Images neu zu erstellen, wenn
‫Sie sie ändern, oder Sie können den Docker-Compose-Up-Build verwenden.
‫Das werden wir gleich sehen.
‫Dies ist besonders hilfreich, wenn Sie Compose lokal verwenden und Bilder erstellen möchten. Möglicherweise möchten Sie die Datenträgermontage
‫nicht verwenden. Sie möchten tatsächlich Dateien in das Image kopieren.
‫Ihr Build-Befehl ist möglicherweise recht komplex. Es kann einige benutzerdefinierte Umgebungsvariablen oder
‫Buildargumente enthalten.
‫Bauen Sie übrigens Argumente auf, über die wir noch nicht gesprochen haben. Das sind wirklich nur Umgebungsvariablen, die nur
‫während der Erstellung verfügbar sind. Sie können sich die Dokumente ansehen. Docker. com Dokumentation zu
‫Dockerfiles und es wird ausführlich über Build-Argumente gesprochen.
‫Hier sehen wir uns ein Beispiel dafür an, wie Sie das lokal verwenden können.
‫Ich bin im Verzeichnis compose sample 3. Sie können hier sehen, dass ich hier eine vorgefertigte Docker
‫Compose-Datei habe.
‫Ich habe tatsächlich ein Dockerfile namens Nginx. Dockerfile. Dann eine ähnliche Nginx-Konfiguration
‫wie zuvor, in der wir Nginx tatsächlich als Reverse-Proxy für unsere Website verwenden.
‫Wenn wir uns mit Docker Compose befassen, können Sie sehen, wie ich diese Lösung aufgebaut habe.
‫Ich habe eigentlich zwei Dienste.
‫Einer ist wie zuvor der Nginx-Proxy und einer ist wie zuvor der Apache-Webserver.
‫Aber ein paar Dinge sind anders.
‫Anstatt das Standard-Image für Nginx anzugeben, erstelle ich ein benutzerdefiniertes Image.
‫Sie können hier sehen, dass ich ihm tatsächlich einige Argumente gegeben habe, in denen ich erkläre, dass
‫das Dockerfile, das es verwenden muss, ein speziell benanntes Dockerfile ist.
‫Ich möchte, dass dieses Dockerfile in dem aktuellen Verzeichnis erstellt wird, in dem es sich befindet. Ich möchte, dass das Image beim
‫Erstellen einen Namen erhält,
‫nginx -custom. Das wird in meinem lokalen Cache gespeichert. Unten haben wir einen
‫Webserver mit Apache.
‫Was ich hier gemacht habe, ist, dass ich tatsächlich einige HTML-Quelldateien, die ich habe, in den Apache-Server eingebunden habe.
‫Das Szenario hier ist also, dass ich vielleicht ein
‫Webentwickler bin. Ich habe hier eine statische Website
‫unter diesem HTML-Verzeichnis, über die ich mir keine großen Sorgen machen muss.
‫Es wird nur eine kleine Bootstrap-Vorlage verwendet.
‫Ich werde das lokal bearbeiten, in meinem Editor hier, aber ich weiß, wenn ich damit in die Produktion
‫gehe, wird es tatsächlich hinter einem Nginx-Proxy sitzen.
‫Deshalb möchte ich diese Produktionsumgebung so weit wie möglich lokal emulieren, um sicherzustellen, dass ich alle Fehler
‫oder Probleme ausgemerzt habe. In diesem Fall möchte
‫ich dieses Nginx und ich weiß, dass diese Nginx-Konfiguration diejenige ist, die sie auf dem
‫Produktionsserver verwenden werden, so dass ich sie hier nur verwenden werde.
‫Dies ist eigentlich die gleiche Nginx-Konfiguration wie zuvor.
‫Wenn ich den Docker-Befehl compose up ausführe, wird zunächst in meinem Cache nach
‫dem Namen dieses Bildes gesucht. Wenn es es nicht findet, wird es diese Erstellungsbefehle hier verwenden, um
‫das Dockerfile nachzuschlagen und dann mein Image zu erstellen. Sie können aus diesem Dockerfile sehen, es ist eigentlich ziemlich einfach.
‫Es wird nur eine bestimmte Version von Nginx verwendet und dann wird nur eine Datei kopiert.
‫Der Rest der Informationen wird aus dieser Nginx-Konfiguration von Docker Hub abgerufen und
‫dann in meine Nginx-Konfiguration kopiert.
‫Wenn Sie sich an ein vorheriges Beispiel erinnern, haben wir tatsächlich ein Bind-Mount durchgeführt, um diese Nginx-Konfiguration über
‫unsere Compose-Datei abzurufen.
‫In diesem Fall möchten wir nur, dass das gesamte Image erstellt wird.
‫Wir müssen diese Proxy-Konfiguration nicht wirklich ändern, also muss ich sie nicht wirklich mounten, damit ich sie die
‫ganze Zeit ändern kann.
‫Ich möchte nur, dass es läuft. Richtig? Also werde ich es bauen. Lass es im Bild-Cache liegen. Sobald es das erste
‫Mal gebaut wurde, muss es nicht mehr sehr oft umgebaut werden.
‫Also werde ich einfach dort gehen.
‫Wenn ich dann meine Website bearbeite und entwickle, wird diese Konfiguration verwendet,
‫damit ich Live-Änderungen vornehmen kann. Wenn wir hierher zurückkehren und ich einen Hafenarbeiter zusammenstelle, lassen
‫Sie uns durchgehen, was passiert ist.
‫Es wurde zuerst das Netzwerk erstellt.
‫Das ist normal. Das macht es.
‫Dann wird tatsächlich festgestellt, dass der Proxy-Dienst nicht das gesuchte Image hat. Also wird es das
‫bauen.
‫Es ruft also die Docker-Datei auf und erstellt sie so, wie es bei einem normalen Docker-Build-Befehl der Fall wäre.
‫Dann gibt es mir diesen hilfreichen Tipp, um mich wissen zu lassen, dass diesmal das Image erstellt wurde, weil es nicht
‫gefunden werden konnte.
‫Wenn ich dieses Image jedoch in Zukunft ändern muss, muss ich den
‫Docker-Compose-Build oder den Docker-Compose-Up-Build-Befehl verwenden. Jetzt, da das Image
‫vorliegt, können die Container erstellt werden. Dann startet es meinen Webserver und meinen Proxyserver.
‫Wenn alles richtig funktioniert hat, sollte ich in der Lage sein, einen Localhost zu bekommen. Hier wurde meine Standardvorlage aufgerufen, die eigentlich
‫eine Bootstrap-Vorlage ist.
‫Es sieht so aus, als ob alles funktioniert.
‫Eigentlich gehe ich hier rüber und sehe alle meine Protokolle und offensichtlich gibt es eine Menge Vermögenswerte. Für jeden gibt es
‫einen Protokolleintrag, der den Proxy und den Webserver durchläuft.
‫Da ich dieses Verzeichnis zum Bearbeiten gebunden habe, kann ich in meinen Editor zurückkehren. Als Webentwickler könnte ich einsteigen und vielleicht
‫etwas auf der Website bearbeiten. Vielleicht gehe ich in
‫den Start-Bootstrap-Titel, der dieser kleine Titel hier oben sein sollte.
‫Ich werde nur diese Datei speichern. Wenn ich dann eine Aktualisierung vornehme, wird meine Website aufgrund dieser Bindung erneut aktualisiert.
‫Dies ist ein großartiges Beispiel für ein sehr verbreitetes Entwickler-Setup, bei dem Sie einige benutzerdefinierte Images
‫lokal erstellen müssen.
‫Sie müssen auch einige Dateien in Ihre Anwendung einbinden, damit Sie sie zur Laufzeit bearbeiten können.
‫Und wenn dies eine datenbankgestützte Anwendung sein sollte, würde ich hier unten nur einen
‫dritten Dienst für den Datenbankserver hinzufügen. Dann gehe ich zurück und räume auf.
‫Sie werden feststellen, dass dieses Bild standardmäßig nicht gelöscht wird.
‫Sie werden oben hier feststellen, dass wir das Nginx-Custom haben, das es gebaut hat. Es gibt jedoch einen Docker-Befehl zum Verfassen
‫eines Abwärtsbefehls.
‫Wenn Sie sich die Hilfe ansehen, sehen Sie, dass es eine rmi-Option gibt, mit der tatsächlich Images entfernt werden, die möglicherweise erstellt
‫wurden oder die möglicherweise verwendet werden.
‫Hier steht die aktuelle Option: 'Nur Bilder entfernen, für die im Bildfeld kein benutzerdefiniertes Tag festgelegt
‫wurde. „Eine
‫Sache, die ich hier tun könnte, wenn ich das etwas automatisierter machen möchte, ist, dass ich den Image-Befehl
‫einfach direkt dort ausführen könnte. Lassen Sie uns das einfach entfernen. Dann möchte ich ganz schnell aufräumen. Ich
‫werde nur mein Bild entfernen. Docker-Bild rm Benutzerdefiniert. Wie Sie sehen können, ist es dort verschwunden.
‫Gut. Ich möchte Docker wieder zusammenstellen.
‫Und dieses Mal machen wir ein -d.
‫In diesen Compose-Beispielen werden Sie feststellen, dass Container, Volumes und Netzwerke tatsächlich mit dem
‫Namen des Verzeichnisses als Projektnamen benannt werden.
‫Um Namenskonflikte zu vermeiden, wird in Compose immer der
‫Verzeichnisname am Anfang aller Assets hinzugefügt, sodass keine Konflikte mit anderen Assets
‫auftreten.
‫Sie können diesen Proxy-Namen tatsächlich über die Befehlszeile ändern.
‫Wenn Sie fortfahren, lesen Sie die Dokumentation zu Compose.
‫Aber der Punkt, den ich hier ansprechen wollte, ist, wenn ich ein Docker-Image hier mache, wirst du sehen, dass es tatsächlich mein Image für
‫mich benannt hat.
‫Daher muss ich diese Bildoption technisch nicht verwenden.
‫Aber wenn ich einen bestimmten Namen dafür haben wollte, damit ich ihn später identifizieren kann, könnte ich.
‫Der Grund, warum ich das angesprochen habe, ist, dass es eigentlich ein bisschen
‫sauberer ist, denn was ich dann tun kann, ist, Docker-Komposition nach unten zu bringen. Wenn ich es also aufräumt und meine
‫Docker-Umgebung sauber halten möchte, kann ich rmi local ausführen.
‫Damit werden auch diese Bilder gelöscht.
‫Sie sehen hier unten, dass das Bild gelöscht wurde.
‫Nicht etwas, das ich die ganze Zeit mache, aber wenn ich ein großes Projekt mit vielen benutzerdefinierten Bildern habe und nicht
‫möchte, dass es mein System in die Luft jagt, wenn ich nicht an diesem Projekt arbeite, verwende ich rmi
‫local und es wird immer den Überblick über die benutzerdefinierten Bilder behalten, die es erstellen musste.
‫Wenn ich hier "all" verwende, löscht es natürlich tatsächlich jedes Bild, das in diesem Projekt verwendet
‫wurde, was Sie möglicherweise nicht möchten, da in diesem Fall möglicherweise der httpd Apache-Webserver gelöscht wird und Sie dies
‫auch möchten bleib eine Weile hier. OKAY.
‫In diesem Abschnitt haben Sie viel über Compose gelernt.
‫Im weiteren Verlauf dieses Kurses werden wir Compose verwenden.
‫Wir werden diese Fähigkeiten weiter ausbauen.