‫Lassen Sie uns in die Docker-Datei eintauchen, die eigentlich ein Rezept für die Erstellung Ihres Bildes ist.
‫Bisher wurden alle von uns verwendeten Docker-Images aus Docker-Dateien erstellt, die Sie in Docker Hub
‫anzeigen können.
‫Wenn Sie mein Repository aus den im ersten Abschnitt aufgelisteten Ressourcen geklont haben, sollte ein Docker-Beispieldateiverzeichnis 1 angezeigt werden,
‫und dort sollte nur eine Datei vorhanden sein. Ein Dockerfile.
‫Wir werden Zeile für Zeile über diese verschiedenen Strophen sprechen. Eine Docker-Datei scheint wie ein Shell-Skript auszusehen,
‫ist es aber nicht.
‫Es ist keine Batch-Datei, es ist kein Shell-Skript. Es ist eine völlig andere Dateisprache, die
‫nur in Docker verwendet wird. Der Standardname ist Dockerfile mit einem Großbuchstaben D.
‫Über die Befehlszeile können Sie jedoch immer dann, wenn Sie mit dem Docker-Befehl
‫eine Docker-Datei bearbeiten müssen, den Bindestrich f verwenden. Was bei vielen Docker-Tools häufig vorkommt, ist, dass Sie
‫mit dem Strich f eine andere Datei als die Standarddatei angeben können.
‫Also, zuerst ist der from Befehl. Der from-Befehl ist in jeder Docker-Datei enthalten. Es muss da sein.
‫Es ist normalerweise eine minimale Verteilung.
‫In diesem Fall ist es Debian.
‫Aber heutzutage wird es oft alpiner.
‫Und wirklich, der Grund, warum Sie diese verwenden würden, ist, sich Zeit und Schmerz zu sparen. Da diese minimalen Distributionen tatsächlich viel kleiner
‫sind als die CDs, mit denen Sie eine virtuelle Maschine von ihnen installieren würden.
‫Zum Beispiel hat Ubuntu nicht einmal cURL. Wenn Sie jedoch eine vollständige Ubuntu-Installation auf
‫einer VM installiert hätten, wären cURL und viele andere Befehle bereits installiert.
‫Da es sich bei all diesen Distributionen um offizielle Images handelt, sind sie mit den neuesten Sicherheitspatches immer
‫auf dem neuesten Stand, und Sie können sich auf sie verlassen und ihnen vertrauen.
‫Einer der Hauptvorteile bei der Verwendung in Containern ist die Verwendung der Paketverteilungssysteme, um die Software zu
‫installieren, die Sie in Ihrem Paket benötigen.
‫In diesem Fall verwenden wir die Jessie-Version, die hinter dem Doppelpunkt steht.
‫Und, wie Sie sich aus unserer Docker Hub-Unterhaltung erinnern, gibt es viele verschiedene Optionen, die Sie hier
‫für das Debian-Repository angeben können.
‫Als Nächstes haben wir die Zeilengruppe ENV und ENV steht für Umgebungsvariablen.
‫Auf diese Weise können Umgebungsvariablen festgelegt werden, die in Containern sehr wichtig sind,
‫da sie die Hauptmethode sind, mit der wir Schlüssel und Werte für die Containererstellung und die Ausführung von Containern festlegen.
‫In diesem Fall wird die Version von Nginx festgelegt, die installiert werden soll, und diese Umgebungsvariable
‫wird so festgelegt, dass alle nachfolgenden Zeilen sie verwenden können.
‫Nun, als Erinnerung an frühere Vorträge, ist jede dieser Strophen eine tatsächliche Ebene in unserem
‫Docker-Image.
‫Die Reihenfolge spielt also tatsächlich eine Rolle, denn es funktioniert von oben nach unten.
‫Wie Sie an diesem relativ langfristigen Befehl sehen werden, finden Sie hier den nächsten. Sie werden sehen, dass es sich um einen einzigen
‫langen Befehl handelt.
‫Was es tut, ist wirklich nur die Ausführung von Shell-Befehlen in diesem Container, während er erstellt wird.
‫In der Regel werden Ausführungsbefehle angezeigt, wenn Sie Software mit einem Paket-Repository installieren
‫oder einige Entpackungen oder Dateibearbeitungen im Container selbst vornehmen müssen.
‫Run-Befehle können auch Shell-Skripts ausführen, die Sie zuvor in die Datei kopiert haben, oder alle Befehle, auf die
‫Sie zu diesem Zeitpunkt in
‫der Datei aus dem Container zugreifen können.
‫Da wir von Debian kommen, hat dieser Ausführungsbefehl Zugriff auf alle Befehle und Binärdateien, die mit
‫dieser Version installiert worden wären.
‫In diesem Beispiel für Nginx wird durch diese Befehlsliste mehr oder weniger ein Schlüssel zum Repository hinzugefügt, mit
‫dem Sie das Paket zum Installieren des neuesten Nginx aus dem offiziellen Nginx-Repository herunterladen können.
‫Es gibt ein paar Dinge, die wirklich wichtig sind, um gute Docker-Dateien zu erstellen, und wir werden in einem
‫späteren Abschnitt, in dem wir über Best Practices sprechen, darüber mehr sprechen.
‫Aber zwei Dinge zu beachten.
‫Der Grund, warum wir all diese Befehle hier mit dem doppelten kaufmännischen Und hinzufügen, damit sie
‫nacheinander verkettet werden, ist, dass, wenn Sie sich erinnern, jede Zeilengruppe eine eigene Ebene ist.
‫Dadurch wird sichergestellt, dass alle diese Befehle in eine einzelne Ebene passen.
‫Das spart uns ein bisschen Zeit.
‫Das spart uns Platz. Und es ist so verbreitet, dass Sie es wahrscheinlich in jeder Docker-Datei auf Docker Hub sehen werden.
‫Okay, in Zeile 27 haben wir einen weiteren Befehl zum Ausführen.
‫Hier geht es darum, unsere Protokolldateien auf stdout und stderr
‫zu verweisen.
‫Wir werden später sehen, dass die ordnungsgemäße Protokollierung in einem Container nicht in einer Protokolldatei erfolgt. Und es gibt keinen Syslogd-
‫oder anderen Syslog-Dienst in
‫einem Container. Docker übernimmt die gesamte Protokollierung für uns. Alles, was wir im Container
‫tun müssen, ist sicherzustellen, dass alles, was wir in den Protokollen erfassen möchten, auf stdout gespuckt wird
‫und stderr und docker den Rest erledigen.
‫Es gibt Protokollierungstreiber, die wir in der Docker Engine selbst verwenden können, um alle Protokolle für alle
‫Container auf unserem Host zu steuern.
‫Und das ist wirklich das, was du mit ihnen machen willst.
‫Dies erhöht die Komplexität Ihrer App, wenn Ihre App die Protokollierung selbst durchführt.
‫Und wenn Sie sich dann mit Dateien in jedem Container befassen müssen, haben Sie jetzt ein
‫Problem damit, wie Sie diese Dateien herausholen, durchsuchbar und zugänglich machen. Hier verwenden wir die Standard-Nginx-Protokolle und verknüpfen sie
‫tatsächlich mit der Standardausgabe.
‫Damit Docker sie erfassen kann.
‫Wir haben auch einen Expose-Befehl.
‫Standardmäßig sind in einem Container keine TCP-
‫oder UDP-Ports geöffnet. Es wird nichts vom Container für ein virtuelles Netzwerk verfügbar gemacht, es sei denn, wir
‫listen es hier auf.
‫Und da es sich um einen Web- und Proxyserver handelt, werden natürlich 80 und 443 verfügbar gemacht.
‫Dieser Befehl bedeutet nicht, dass diese Ports auf unserem Host automatisch geöffnet werden.
‫Das ist der Bindestrich-P-Befehl, wenn wir docker run verwenden.
‫Zuletzt haben wir hier die CMD. Die CMD ist ein erforderlicher Parameter. Dies ist der
‫letzte Befehl, der jedes Mal ausgeführt wird, wenn Sie einen neuen Container über das Image starten oder wenn Sie einen gestoppten Container neu starten.
‫Zu all diesen Strophen gibt es eine wirklich exzellente Dokumentation sowie eine ganze Reihe weiterer, die wir später auf der Docker-Dokumentationswebsite
‫unter docs behandeln werden. Docker. com, die
‫Sie in den Ressourcen dieser Vorlesung finden.
‫Okay, das sind also die Grundlagen, oder? Diese fünf verschiedenen Strophen sind in jeder einzelnen Docker-Datei ganz normal.
‫Einige von ihnen sind erforderlich.
‫Einige davon, wie run, ENV und expose, sind optional, aber für die meisten Container, für die
‫Sie Images erstellen, ziemlich typisch.