2017-11-13 3 views
0

Ich bin neu in Docker Swarm. Wie ich es verstehe, ermöglicht Docker Swarm die Zusammenfassung von Clustering. Bedeutet, dass es Ihnen egal ist, welcher Hardriwe-Container eingesetzt wird.Sind Docker-Volumes maschinenspezifisch

Auf der anderen Seite ist die Standardmethode zur Datenbankverwaltung in Docker - Daten außerhalb des Docker-Containers zu schreiben (um Kopier-auf-Schreib-Verhalten zu vermeiden). Das erreichen Sie, indem Sie eine Volume anhängen und db-bezogene Daten darauf schreiben. Die wichtige Sache hier - sind Volumen Maschinen-spezifisch? Sind Docker & Docker Swarm clever genug, um ein Volume auf der Maschine zu montieren, die es benötigt?

Beispiel:

Ich habe 3 Maschinen und 3 Microservices/Behälter. Alle von ihnen werden durch Docker Swarm bereitgestellt. Nur ein Microservice/Container muss sich mit einer Datenbank verbinden. Also muss ich Volume nur auf einer Maschine montieren. Aber auf was?

Antwort

1

Datenbanken und ähnliche statusbehaftete Anwendungen sind immer noch eine schwierige Sache, wenn es um Docker Schwarm und andere Orchestrierungs-Frameworks geht. Im Idealfall sollten Container auf jedem Knoten im Schwarm ausgeführt werden können, aber das Problem tritt auf, wenn Sie Daten über den Lebenszyklus des Containers hinaus persistieren müssen.

Das Mounten eines Volumes ist die Art und Weise, wie der Docker Daten persistent speichert. Dies bindet jedoch den Container an einen bestimmten Knoten, wenn Volumes auf den spezifischen Knoten erstellt werden. Es gibt viele Projekte, die versuchen, dieses Problem zu lösen und verteilten Speicher bereitzustellen.

Es gab ein Projekt namens Flocker, das sich mit dem obigen Problem beschäftigt (es wird nicht mehr gepflegt). Es gibt auch ein neueres Projekt namens REXRAY.

Sind Docker & Docker Swarm klug genug, eine Band auf der Maschine montieren sie gebraucht wird?

Standardmäßig keine. Docker-Schwarm wählt einen der Knoten aus und setzt den Container darauf ein. Sie können dieses Problem jedoch umgehen:

Zuerst müssen Sie ein benanntes Volume in Ihrem Stackfile/Composefile unter der Dienstdefinition definieren. Zweitens müssen Sie den Knoten Placement Constraints verwenden, um einzuschränken, wo der Datenbankcontainer ausgeführt werden soll.

Wenn Sie kein verteiltes Speicher-Tool sind, müssen Sie den Container für bestimmte Datenbanken und ähnliche statusbehaftete Container, die Volumes benötigen, auf bestimmte Knoten beschränken.

+0

vielen Dank für die tolle Antwort! Wenn Sie eine Antwort wissen, könnten Sie bitte Details darüber hinzufügen, wie REXRAY ein node-agnostisches Verhalten für Stateful-Datenbanken erreicht hat? Warum ist das gleiche Verhalten mit Docker/Docker Swarm-Architektur schwer zu implementieren? Ich nehme an, dass, wenn das einfach gewesen wäre, Docker Maschinen-agnostic-Volumes vor langer Zeit implementiert hätte –

+0

Wie wäre es mit hoher Verfügbarkeit mit festem/eingeschränktem Container zu bestimmten Knoten? Sind irgendwelche Arbeitsumgebungen? –

Verwandte Themen