‫Gut. Die Volumes scheinen von vornherein ziemlich einfach zu sein, aber es steckt tatsächlich viel dahinter.
‫Die erste Möglichkeit, einem Container mitzuteilen, dass er sich über ein Volume Gedanken machen muss, besteht in einer Docker-Datei.
‫Schauen wir uns einige davon an.
‫Ich werde einfach tun, was ich viel tue.
‫Ich werde nach MySQL suchen.
‫Auf diese Weise habe ich so viel über Dockerfiles gelernt und erfahren, wie man sie richtig einsetzt. In den
‫offiziellen Repositorys sind wirklich solide Standardeinstellungen und Best Practices integriert.
‫Wenn ich hier zu MySQL gehe, klicke ich hier einfach auf die neueste Docker-Datei. Ich wette, es ist eine
‫Datenbank, in der wahrscheinlich ein Volume-Befehl enthalten ist.
‫Na, bitte.
‫Dies ist der Standardspeicherort der MySQL-Datenbanken. Dieses Image ist so programmiert, dass
‫Docker weiß, dass beim Starten eines neuen Containers tatsächlich ein neuer Volume-Speicherort erstellt
‫und diesem Verzeichnis im Container zugewiesen wird. Das bedeutet, dass alle Dateien, die wir dort im Container ablegen,
‫den Container überleben, bis wir das Volume manuell löschen.
‫Und das ist etwas, worauf wir hier hinweisen sollten, ist, dass Volumes manuell gelöscht werden müssen.
‫Sie können sie nicht einfach durch Entfernen eines Behälters aufräumen.
‫Sie sind ein zusätzlicher Schritt. Eigentlich nur für Versicherungen, denn der springende
‫Punkt eines Volumenbefehls ist, dass diese Daten besonders wichtig sind, zumindest viel wichtiger als der Container selbst.
‫Wenn wir ein Docker-Pull für MySQL
‫durchführen und dann ein Docker-Image-Inspect für MySQL durchführen, wird die Docker-Datei nicht angezeigt, da
‫die Docker-Datei nicht wirklich Teil der Image-Metadaten ist Konfigurationsbereich, den er dort
‫angegeben hat.
‫Ich kann immer sagen, dass die Konfiguration, die aus der Docker-Datei stammt, als sie erstellt wurde, diesem Pfad ein Volume
‫zugewiesen hat.
‫Lassen Sie uns einen Container davon laufen.
‫Also docker container run -d --name mysql.
‫Wenn Sie sich an früher erinnern, ist MySQL etwas Besonderes.
‫Es erfordert jetzt eine Umgebungsvariable,
‫bevor es funktioniert.
‫Es ist MYSQL_ALLOW_EMPTY_PASSWORD.
‫OKAY.
‫Was Sie sehen, ist MySQL ausgeführt. Wenn wir einen Docker Container machen,
‫der mysql inspiziert, sollten wir dasselbe sehen, wo es uns in der Konfiguration sagt, dass es ein Volume gibt.
‫Hier.
‫Wir können es auch hier oben unter Reittieren sehen. Dies ist, ist dies tatsächlich der ausgeführte Container, der seinen eigenen eindeutigen
‫Speicherort auf dem Host erhält, um diese Daten zu speichern, und dann ist es im Hintergrund, zugeordnet oder bereitgestellt, an diesem Speicherort im Container, so
‫dass der Speicherort im Container denkt eigentlich nur, es schreibt nach
‫/ var / lib / mysql.
‫In diesem Fall können wir sehen, dass sich die Daten tatsächlich an diesem Ort auf dem Host befinden. Machen wir also ein Docker-Volume, und
‫wir können sehen,
‫dass wir jetzt ein Volume haben. Jetzt stellen wir fest, dass dies die eindeutige ID hat, mit der wir nie
‫wissen, was zum Teufel das ist,
‫oder?
‫Lassen Sie uns das überprüfen.
‫Sie müssen nicht alles abtippen.
‫Sie können einfach die ersten Zeichen eingeben und die Tabulatortaste drücken, um den Vorgang abzuschließen. Sie erhalten ähnliche
‫Informationen über das Volume selbst.
‫Wenn Sie dies tatsächlich auf einem Linux-Computer tun, können Sie zu diesem Speicherort auf Ihrer Festplatte navigieren
‫und die Daten anzeigen.
‫Dort wird es tatsächlich einige Datenbanken geben.
‫Wenn Sie auf einem Mac oder Windows arbeiten, denken Sie daran, dass Docker für Windows
‫und Docker für Mac tatsächlich ein bisschen im Hintergrund arbeiten, der uns verborgen ist und eine Linux-VM erstellt.
‫Diese Daten befinden sich also technisch gesehen in dieser Linux-VM. Sie können auf Ihrem Windows- oder Mac-Computer nicht auf diesen
‫Pfad zugreifen und die Daten anzeigen. Es ist eigentlich in dieser VM.
‫Wir werden in Kürze mit bereitgestellten Volumes sehen, wie wir diese Einschränkung ebenfalls umgehen können.
‫Wenn Sie sich das ansehen, werden Sie feststellen, dass es nicht sehr benutzerfreundlich ist, wenn Sie uns sagen, was darin
‫enthalten ist oder wem dieses Volume zugewiesen ist.
‫Wir können aus der Perspektive des Containers sehen, welches Volume verwendet wird, aber wir können aus der Perspektive des Volumes nicht
‫sehen, womit es verbunden ist.
‫Richtig?
‫Wenn ich nur den Aufwärtspfeil drücken und, mal sehen, ein mysql2 erstellen würde.
‫Damit ist nun ein weiterer MySQL-Server angelegt, der im Hintergrund läuft.
‫Wenn ich ein anderes Docker-Volume verwende, werden zwei davon angezeigt.
‫Du beginnst das Problem zu sehen, oder?
‫Es gibt hier keine wirklich einfache Möglichkeit, das eine vom anderen zu unterscheiden.
‫Wenn wir nur einen Punkt beweisen wollen, stoppen ein Docker-Container mysql und ein Docker-Container
‫mysql2.
‫Wir machen einen Docker Container, wir werden keine Container laufen sehen. Wenn wir ein ls -a machen, können
‫wir sie alle sehen. Und beachte, dass sie gestoppt sind. Und dann machen wir ein Docker-Volume. Wie Sie
‫sehen, haben wir immer noch zwei Volumes.
‫Wenn ich einen Docker-Container rm mysql und dann mysql2 mache, werden beide Container entfernt, da ich
‫tatsächlich beide in einem Befehl ausführen kann. Wenn ich jetzt ein Docker-Volume ls mache, sind meine Volumes
‫immer noch da. Meine Daten sind immer noch sicher.
‫Wir haben also ein Problem gelöst.
‫Die Datenbanken überleben die ausführbare Datei.
‫Wie machen wir das ein bisschen benutzerfreundlicher?
‫Hier kommen die benannten Volumes ins Spiel und wir können die Dinge im Docker-Befehl
‫run angeben.
‫Wenn ich ein paar Mal auf den Aufwärtspfeil drücke, bis ich zum Docker-Containerlauf komme, ist es egal,
‫welchen Sie erneut ausführen.
‫In diesem Fall geben wir den Befehl -v ein. Mit -v können wir entweder ein neues Volume
‫angeben, das wir für diesen Container erstellen möchten, der ausgeführt werden soll, oder zwei weitere
‫Optionen.
‫Eine davon ist das Erstellen eines benannten Volumes.
‫Wenn ich nur -v und dann die var lib mysql machen würde, würde das das Gleiche tun, was unser
‫Volume-Befehl in der Docker-Datei getan hat.
‫Das brauchen wir hier nicht wirklich zu tun. Aber was wir tun können, ist, dass ich einen Namen mit
‫einem Doppelpunkt voranstellen kann. Das ist als "benanntes Volume" bekannt. Msgstr ""
‫"Wenn ich das mache und dann ein Docker - Volume ls mache, wirst du sehen, dass mein neuer Container ein neues Volume verwendet und
‫einen benutzerfreundlichen Namen verwendet.
‫Wenn wir ein Docker-Volume in diesem MySQL untersuchen, werden Sie feststellen, dass dies hier einfacher ist.
‫Wenn ich meinen Container wieder lösche, und wir müssen ein -f eingeben,
‫weil er noch läuft, und dann führe ich einen anderen aus. Und dieses Mal werde ich ihm
‫einen anderen Namen geben. Und dann machen wir ein anderes Docker-Volume. Sie werden sehen,
‫dass wir anscheinend kein neues Volume erstellt haben. Es wird immer noch das gleiche Volumen verwendet.
‫Lassen Sie uns einen Docker-Container auf dem mysql3 untersuchen. Dann werden wir hier oben sehen, ja, das ist
‫was konfiguriert wurde, aber was laufen wir?
‫Dies ist unser Reittier hier oben.
‫Wir werden hier sehen, dass nicht nur der Name freundlicher ist, sondern auch der
‫Ursprungsort ein wenig freundlicher.
‫Ein kleiner Tipp für mich ist, dass ich, wenn ich tagelang oder wochenlang eine bestimmte Datenbank in einem bestimmten Container
‫laufen lasse, die ich immer wieder verwenden muss und keinen leeren Datenbankserver möchte
‫Schließlich werden meine Container auf diese Weise erstellt und für das Projekt benannt, damit ich weiß, wofür das Volume ist und
‫dass es in
‫der Nähe bleiben muss.
‫Eine letzte Sache hier.
‫Warum sollten Sie Docker-Volumes erstellen?
‫Wenn wir sie zur Laufzeit aus einem Docker-Container-Ausführungsbefehl erstellen können und indem wir sie in der Docker-Datei angeben, gibt es nur wenige Fälle, in
‫denen Sie sie im Voraus erstellen möchten. Mit dem Befehl help
‫können Sie das schnell herausfinden.
‫Denn nur so können wir tatsächlich einen anderen Treiber angeben.
‫Erinnerst du dich an das Plug-in-Zeug, über das ich später sprechen werde?
‫Dann alle Treiberoptionen, für die wir das -o verwenden möchten.
‫Wenn wir dann Etiketten darauf platzieren möchten, worüber wir später in der Produktion sprechen werden.
‫In bestimmten Fällen müssen Sie das Docker-Volume im Voraus erstellen. In der Regel ist es jedoch für Ihre lokalen
‫Entwicklungszwecke ausreichend, es nur in einer Docker-Datei oder beim Ausführen des Befehls anzugeben.