‫In dieser Vorlesung werden wir über das Binden von Bindungen und persistente Daten in diesen Mounts sprechen. Die Anforderungen sind wirklich, dass Sie nur
‫über die Containerverwaltung und das Ausführen von Containern Bescheid wissen.
‫Lass uns reinspringen. Lassen Sie uns über Bindungshalterungen sprechen. Sie sind eigentlich ziemlich cool.
‫Als ich zum ersten Mal davon erfuhr, gab es mir eine Art Aha, wie ich Docker einfach für die lokale Entwicklung
‫verwenden kann.
‫In Wirklichkeit ist ein Bind Mount nur eine Zuordnung der Hostdateien oder Verzeichnisse zu einer Containerdatei oder
‫einem Verzeichnis. Sie können genau das tun.
‫Sie können entweder ein Verzeichnis oder nur eine einzelne Datei angeben. Im Hintergrund zeigen die
‫beiden Speicherorte im Grunde nur auf dieselben physischen Speicherorte auf der Festplatte.
‫Auch hier wird das UFS wie bei den anderen Volumes übersprungen, sodass Ihr Hostspeicherort beim
‫Löschen des Containers nicht gelöscht wird.
‫Wenn sich im Container Dateien befinden, denen Sie die Hostdateien zuordnen, gewinnen die Hostdateien. Die Dateien in dem Container, die
‫überschrieben wurden, werden nicht gelöscht, da nichts im Container wirklich überschrieben
‫wird.
‫Es ist nur da, während das Bind-Mount existiert.
‫Sobald Sie den Bind-Mount nicht mehr benötigen und den Container ohne ihn erneut ausführen, werden
‫die zugrunde liegenden Daten angezeigt, die zuvor vorhanden waren. Da Bindungs-Mounts normalerweise hostspezifisch sind, müssen sich
‫bestimmte Daten auf der Festplatte des Hosts befinden, damit sie funktionieren.
‫Sie können sie nicht in einer Docker-Datei angeben.
‫Sie müssen sie zur Laufzeit verwenden, wenn Sie den Befehl docker container run verwenden. Sie können das Format hier
‫sehen.
‫Es ist wirklich das -v, das wir zuvor verwendet haben, nur auf der linken Seite des
‫Doppelpunkts, wir geben tatsächlich einen vollständigen Pfad ein und nicht nur einen Namen.
‫Und die Art und Weise, wie der Docker tatsächlich den Unterschied zwischen dem benannten Volume, wie wir
‫es vor einiger Zeit getan haben, und dem Bind-Mount erkennen kann, ist, dass das Bind-Mount mit einem Schrägstrich beginnt.
‫Unter Windows werden Sie feststellen, dass es sich um zwei Schrägstriche und dann um den Laufwerksbuchstaben und dann um Ihren
‫Pfad handelt.
‫Solange Sie den linken Doppelpunkt und die rechte Seite haben, können Sie wirklich alles, was Sie vom Host
‫wollen, in den Container abbilden, und Sie können auch Dinge wie schreibgeschützt angeben.
‫Dies kommt wirklich zum Tragen, wenn Sie Dienste in Ihrem Container entwickeln und ausführen, die
‫auf Dateien zugreifen, die Sie auf Ihrem Host verwenden oder ändern.
‫Machen wir das mit Nginx.
‫Wenn Sie für diesen Kurs zum Stammverzeichnis unseres Repositorys gehen, gehen wir in
‫das Dockerfile-Beispiel-2-Verzeichnis. Jetzt waren wir früher hier.
‫Wenn Sie sich erinnern, gibt es zwei Dateien. Das ist für Nginx, oder?
‫Wenn wir uns das Dockerfile ganz schnell ansehen, ist es ziemlich einfach. Es wird lediglich ein Arbeitsverzeichnis angegeben und anschließend eine
‫Indexdatei in dieses Verzeichnis kopiert.
‫Hier gibt es keine Bände.
‫Für ein Bind-Mount ist kein Volume erforderlich, obwohl es durchaus vorhanden sein könnte.
‫Der Gastgeber gewinnt immer, erinnerst du dich? Wenn wir also einen Docker-Container-Lauf ausführen, führen wir
‫einen -d ... Nennen wir es Nginx.
‫Geben wir ihm den Port 8080 wie zuvor.
‫Dann geben wir ihm diesmal die Lautstärke. Und ich muss sagen, dass mein aktuelles Arbeitsverzeichnis tatsächlich
‫in dieses Arbeitsverzeichnis im Container eingebunden wird. Da sich meine Indexdatei hier in diesem Ordner
‫befindet, soll sie
‫sich im Container befinden, damit ich sie hier bearbeiten kann, und sie wird live im Container angezeigt.
‫Es wird also in einer Sekunde Sinn machen.
‫Hier ist ein kurzer kleiner Tipp. Anstatt dass ich meinen gesamten
‫Pfad herausfinden und das Ganze eingeben muss, können Sie pwd hier so verwenden.
‫Dies ist eine Shell-Verknüpfung, die besagt: 'Drucken Sie das Arbeitsverzeichnis aus und ersetzen Sie diesen Befehl durch diesen Pfad.
‫„Dann verwenden wir dort nur dasselbe Arbeitsverzeichnis aus der Docker-Datei und geben dann
‫das Nginx-Image an.
‫Was ich ganz schnell tun werde, ist, dass ich tatsächlich ein anderes Terminalfenster öffne, damit wir zwei
‫Dinge gleichzeitig tun können.
‫Sie müssen das nicht wirklich tun.
‫Grundsätzlich werden wir nur die Datei auf unserem Host bearbeiten, und dann werde ich im Container sein und sehen,
‫was passiert.
‫Um sicherzugehen, dass es funktioniert,
‫gehen wir zu localhost.
‫OK, dies ist also nicht die Standard-Nginx-HTML-Datei.
‫Und wir haben das reguläre Nginx-Bild verwendet.
‫Wir haben die benutzerdefinierte aus diesem Verzeichnis nicht verwendet.
‫Wir haben gerade ein Archivbild verwendet. Um diesen Punkt zu beweisen, können wir tatsächlich denselben
‫exakten Befehl erneut ausführen, aber das -v entfernen, und ich werde es stattdessen auf Port 8080 ausführen. Und ich werde dies nginx2 nennen.
‫Wenn ich zu meinem Browser gehe und zu localhost 8080 gehe, ist dies der Standard-Nginx-Index. HTML-Datei.
‫Dieser ist der benutzerdefinierte, den wir in diesem Verzeichnis haben.
‫Wir können also bereits sehen, dass es richtig zugeordnet wurde.
‫Wenn ich hier eine andere Registerkarte öffne und eine Befehlszeile im Container erhalte.
‫Dann gehen Sie in dieses Verzeichnis.
‫Sie werden feststellen, dass wir die Docker-Datei tatsächlich sehen können, da wir das gesamte Verzeichnis zuordnen.
‫Wenn links drüben, wenn wir tatsächlich eine neue Datei erstellt haben und ich diesen Linux-Touch-Befehl hier verwenden kann, um eine
‫neue Datei zu erstellen. Dann rechts rüber ... Hoppla... Vergiss einfach immer wieder, dass ... ls -al, und das sehen Sie
‫in Ihrer Datei.
‫Hoffentlich verstehen Sie, was hier vor sich geht, dass beide Standorte derselbe sind.
‫Und wenn ich etwas in diese Testdatei zurückgesendet habe und
‫dann ...
‫los geht's
‫Unser Nginx kann die Änderungen sehen, da es sich nur um einen normalen Dateipfad im Container handelt
‫und sich diese Dateien auf dem Host befinden.
‫Wenn ich sie im Container löschen würde, würden sie auf dem Host gelöscht, da es sich um dieselbe
‫Datei handelt.
‫Dies ist der Zeitpunkt, an dem ich normalerweise einen Entwickler dazu bringe, über all seine
‫Entwicklungsumgebungen nachzudenken, die dieses komplizierte Setup darstellen. Vielleicht verwenden sie Vagrant oder eine andere manuelle
‫Methode, um ihre perfekte Umgebung einzurichten, und sie können sehen, wie dies das so viel einfacher machen könnte.
‫Da ich auf meinem Mac keine komplizierten Einstellungen vornehmen musste, habe ich nur einen Container ausgeführt.
‫Ich habe den Befehl -v mit dem Mount verwendet, und jetzt kann mein Code auf meinem Host auf meinem Host bearbeitet werden.
‫Und ich muss wirklich nie in die Hülle des Containers gehen.
‫Normalerweise können Sie den Container einfach ausführen und seine Protokolle überprüfen, um festzustellen, ob beim Codieren
‫Fehler auftreten.
‫Dies ist natürlich ein einfaches Beispiel für Nginx. Später werden wir tatsächlich spezifische
‫Beispiele für verschiedene Entwicklungsumgebungen für die lokale Entwicklung und Container haben.