Ich habe eine Diskussion mit einem Freund über Anwendungsfälle für Docker . Einer im Team möchte Docker für alles verwenden - wie eine Art universeller Unix-Prozess-Wrapper. Der andere ist der Ansicht, dass Docker nur für zustandslose Anwendungen wie Microservices und AWS Lambda- Apps verwendet werden sollte.
Für beide haben wir Proof of Concepts entwickelt. In unserem Docker-Cluster befindet sich ein freigegebenes Laufwerk, das beim Bereitstellen des Docker-Hosts bereitgestellt wird. Wenn eine Datenbank in einem Container bereitgestellt wird, wird lediglich ein Volume auf dem freigegebenen Laufwerk bereitgestellt.
Mein Freund hält immer noch an seiner Position fest, obwohl ihm die gegenteiligen Beweise gezeigt wurden. (Er argumentiert auch, dass Docker unnötiges Risiko hinzufügt, indem er dem Stapel Komplexität hinzufügt .)
Ich versuche zuzuhören und seinen Standpunkt zu verstehen, sowohl in einem Akt des Einfühlungsvermögens, als auch um besser mit ihm zu argumentieren. (Wir verstehen uns alle recht gut - das ist also eine Mischung aus Scherz und ernsthafter Diskussion).
Art der Frage hinter der Frage ist: Sind Datenbanken Rinder ? Dieser Kommentar legt nahe, dass eine gute Strategie zum automatischen Sichern und Abrufen Ihrer Datenbank nicht von einem Viehserver zu unterscheiden ist.
Meine Frage ist: Aus welchen Gründen sollte Docker nicht für Datenbanken verwendet werden?
EDIT: Leute haben mich gebeten, meine Terminologie zu klären. Ich ging davon aus, dass sich die Datenbankanwendung im Container und der Speicher im Volume befindet. Was ich meinte, war, dass sich das RDBMS im Container befindet und der Datenbankspeicher im Volume.
Einige Kommentatoren haben vorgeschlagen, dass die Docker-Volume-Treiber nicht sehr gut mit Datenbank-Schreibvorgängen funktionieren. (Oder etwas in diesem Sinne). Könnten Sie das bitte näher erläutern?
quelle
Ich habe ausführlich darüber geschrieben, aber hier ist die Zusammenfassung:
Es muss gelöst werden, wie verhindert werden kann, dass das Gehirn geteilt wird (indem mehr als ein Masterknoten gewählt wird). Nichtbeachtung kann katastrophal sein
Es gibt keine produktionsfertigen Shared Storage-Lösungen, mit denen Datenbanken auf einer Instanz heruntergefahren und auf einer anderen hochgefahren werden können, ohne dass all Ihre Daten verloren gehen.
quelle
Wenn Sie sagen, dass die Daten in einen Docker-Container eingebunden sind, ist es nicht korrekter zu sagen, dass die "Datenbank" in den Docker-Container eingebunden ist? Wenn Sie Ihre Daten außerhalb des Containers beibehalten, tun Sie das "Richtige", indem Sie Ihre Datenbank nicht in einen Container stellen.
Sicher, fahren Sie in die Stadt und legen Sie ein DBMS in einen Container, damit es die Daten verwaltet, die Sie draußen speichern. Ich persönlich denke, das ist einfach gutes Design, weil es eine klare Trennung zwischen Logik und Daten gewährleistet. Aber sobald Sie Ihre Daten in einen Container legen, spielen Sie möglicherweise mit dem Feuer.
Obwohl die Fahrer von Containerlagern einen langen Weg zurückgelegt haben, bin ich persönlich noch nicht bereit, meine Daten in einem Container festzuhalten.
quelle