Verwalten von Docker -Volumes mit Docker Compose

Verwalten von Docker -Volumes mit Docker Compose

Zweck des Docker -Volumens

Docker-Container sollen ein Drop-In-Ersatz für Anwendungen sein. Sie sollen verfügbar sein und leicht zu ersetzen sein. Diese Eigenschaft ist in der Tat der Eckpfeiler vieler CI/CD -Pipeline. Wenn eine Änderung vorgenommen wird, die zu Ihrem Quell -Repository geführt wird, das eine Kette von Ereignissen auslöst. Docker -Bilder werden automatisch erstellt, getestet und (manchmal) sogar direkt in die Produktion eingesetzt, wodurch die älteren Versionen nahtlos ersetzt werden.

Es gibt jedoch oft anhaltende Daten, die zwischen verschiedenen Veröffentlichungen Ihrer Anwendung erhalten bleiben müssen. Beispiele hierfür sind Datenbanken, Konfigurationsdateien für Ihre Apps, Protokolldateien und Sicherheitsanmeldeinformationen wie API -Schlüssel und TLS -Zertifikate.

Damit all diese Daten anhalten können.

Aufstellen

Um sicherzustellen, dass wir alle auf derselben Seite sind, finden Sie hier die Version von Docker Runtime und Docker-Compose, die ich verwende:

  1. Docker Version 18.09.2, bauen Sie 6247962
  2. Docker-Compose Version 1.23.2, bauen 1110ad01
  3. Dateiversion 3 komponieren: funktioniert mit 1.13.0 und höher

Beispiel: Hosting einer Ghost CMS -Website

Das Arbeiten mit Compose ist sehr einfach. Sie schreiben eine YAML. Beginnen wir mit einer einfachen Ghost CMS -Bereitstellung.

Erstellen Sie ein Verzeichnis namens ComposeSamples und in dieser eine Datei namens Docker-Compose.Yaml

$ mkdir composeSampel
$ cd composeSampel
Inhalt von Docker-Compose.Yaml:
Version: "3.0 "
Dienstleistungen:
Netz:
Bild: Ghost: Neueste
Häfen:
- "2368: 2368"
Bände:
- CMS-Content:/var/lib/Ghost/Inhalt
Bände:
CMS-Content:

Diese Komponierdatei erklärt einen einzelnen Dienst, der das neueste Bild von Ghost CMS aus Docker Hubs offiziellem Repository ausführt. Der exponierte Port ist 2368 (mehr dazu in etwas später) und ein Volumen ist ein Volumen, das als CMS-Content-Montent bei/var/lib/Ghost/Inhalt montiert ist. Dokumentation. Zum Beispiel werden beide den Inhalt der Website/var/lib/ghost/content in der offiziellen Dokumentation des Containers erwähnen.

Wenn Sie eine eigene neue Anwendung schreiben, denken Sie an alle anhaltenden Daten, auf die sie zugreifen müssen, und setzen Sie die Mountspunkte für Ihre Docker -Bände entsprechend fest.

Um zu testen, dass das anhaltende Volumen funktioniert, versuchen Sie Folgendes:

  1. Öffnen Sie einen Browser und geben Sie die IP Ihres Docker -Hosts ein, dh http: // dockerhostip: 2368/ghost (oder nur http: // localhost: 2368/ghost) und erstellen Sie ein Admin -Konto. Ändern Sie einen der bereits bestehenden Beiträge und speichern Sie.
  2. Listen Sie alle Docker -Komponenten auf, die mit den Befehlen ausgeführt werden: Docker PS, Docker Network LS, Docker Volume Ls
  3. Führen Sie im selben Verzeichnis wie Ihre Komponierungsdatei den Befehl $ Docker-Compose Down aus und jetzt können Sie alle Docker-Container, Netzwerk und Volumes auflisten. Interessanterweise werden Sie feststellen, dass der Container und das von Docker-Compose erstellte Netzwerk, während das Docker-Volumen entfernt wird, noch intakt ist.
  4. Führen Sie Docker -compose up -d aus und Sie werden feststellen, dass der geänderte Beitrag genau dort ist.
  5. Entfernen Sie die Abschnitte mit Volumen aus beiden Diensten: Web: Abschnitt und aus dem Hauptabschnitt. Wenn Sie nun die oben genannten drei Schritte wiederholen, werden Sie das bemerken.

Syntax und Ausführlichkeit

Die Syntax zur Einführung eines Volumens mit Docker-Compose ist ziemlich einfach. Sie beginnen mit etwas, das einem Container ähnelt, und erwähnen den Namen des Bandes, den Sie darin montieren möchten. Wenn Sie keinen Namen erwähnen, können Sie eine faule Syntax wie unten entscheiden:

Version: "3.0 "
Dienstleistungen:
Netz:
Bild: Ghost: Neueste
Häfen:
- "2368: 2368"
Bände:
- /var/lib/ghost/content

Wenn Sie etwas ausführlicher sein möchten, müssen Sie das Docker -Volumen als Definition auf höchster Ebene erwähnen:

Version: "3.0 "
Dienstleistungen:
Netz:
Bild: Ghost: Neueste
Häfen:
- "2368: 2368"
Bände:
- CMS-Content:/var/lib/Ghost/Inhalt
## Definieren Sie, dass CMS-Content tatsächlich ein Volumen ist.
Bände:
CMS-Content:

Obwohl die letztere Version benötigt, dass Sie mehr eingeben, ist es weitlichere ausführlicher. Wählen Sie den relevanten Namen für Ihre Bände, damit Ihre Kollegen verstehen können, was getan wurde. Sie können noch weiter gehen und die Art des Volumens (mehr dazu später) erwähnen und auf Quelle und Ziel hinweisen.

Bände:
- Typ: Volumen
Quelle: CMS-Data
Ziel:/var/lib/ghost/content

Binden Reittiere

Bindungsmontage sind Teile des Host -Dateisystems, die direkt im Docker -Container montiert werden können. Um eine Bindungshalterung einzuführen, erwähnen Sie einfach das Hostverzeichnis, das Sie teilen möchten, und den Mountspunkt im Docker -Container, in dem es montiert werden sollte:

Bände:
- /heim//Projekte/Ghost:/var/lib/ghost/content

Ich habe den Pfad/Home // Projects/Ghost als Beispiel verwendet. Sie können den gewünschten Pfad auf Ihrem Docker -Host verwenden, vorausgesetzt, Sie haben natürlich Zugriff darauf.

Sie können auch relative Pfade verwenden, indem Sie $ PWD oder ~ verwenden. Dies kann jedoch leicht zu Fehler und Katastrophen in den realen Szenarien führen, in denen Sie mit mehreren anderen Menschen mit jeweils ihre eigene Linux-Umgebung zusammenarbeiten. Auf der anderen Seite sind manchmal relative Pfade tatsächlich einfacher zu verwalten. Wenn Ihr Git -Repo beispielsweise auch Ihre Bindungshalterung mit DOT sein soll (.) Um das aktuelle Verzeichnis zu symbolisieren, kann es sehr gut ideal sein.

Neue Benutzer klonieren das Repo und klonen Sie es überall in ihrem Hostsystem und führen Sie Docker -Compose -D -D -D -.

Wenn Sie eine ausführlichere Syntax verwenden, enthält Ihre Komponierungsdatei:

Bände:
- Typ: binden
Quelle:/Home/Benutzer/Projekte/Ghost
Ziel:/var/lib/ghost/content

Abschluss

Um Ihre Anwendungen so zu organisieren, dass die App von den Daten getrennt ist. Bände sind gesunde Möglichkeiten, um genau das zu erreichen. Vorausgesetzt, dass sie gesichert und sicher sind, können Sie die Container frei als Einwegumgebungen verwenden, auch in der Produktion!

Upgrade von einer Version der App auf die nächste oder die Verwendung verschiedener Versionen Ihrer App für A/B -Tests kann sehr optimiert werden, solange die Art und Weise, wie Daten gespeichert oder zugegriffen werden, für beide Versionen gleich ist.