GNU/Linux >> LINUX-Kenntnisse >  >> Panels >> Docker

Sollten Sie eine Datenbank in Docker ausführen?

Die Containerisierung von Server-Workloads wird immer beliebter, und es kommt immer häufiger vor, dass Webserver-Bereitstellungen in Containern ausgeführt werden. Können die gleichen Vorteile auf Datenbanken angewendet werden?

Docker kann zustandsbehaftete Workloads verarbeiten

Beginnen Sie am besten mit einer anderen Frage:C ein Sie betreiben sogar eine Datenbank in Docker? Im Allgemeinen ist Docker nicht für zustandsbehaftete Dienste konzipiert. Eines der wichtigsten Verkaufsargumente von Containern ist, dass sie nach Belieben gestoppt und gestartet werden können, wobei normalerweise eine Verbindung zu einer maßgeblichen Datenquelle wie einer Datenbank hergestellt wird, um ihren Zustand zu speichern. Alle Daten im Container sind flüchtig und werden zerstört, wenn der Container gelöscht wird.

Dies macht das Ausführen von zustandsbehafteten Workloads zu einer besonderen Herausforderung, aber glücklicherweise verfügt Docker über einige Tools zum Umgang mit Zuständen:Volume- und Bind-Mounts. Diese ermöglichen es Ihnen, einen Speicherort auf dem Hostcomputer an einem Speicherort im Container bereitzustellen, der Daten speichert, selbst wenn der Container heruntergefahren wird. Auf diese Weise können Sie Container langfristig betreiben, ohne sich Gedanken über Datenverlust machen zu müssen.

Volume-Bereitstellungen sind die bevorzugte Methode zur Handhabung der meisten Szenarien. Sie ermöglichen es Ihnen, ein Volume zu erstellen, das von Docker verwaltet wird:

docker volume create my-volume

Stellen Sie dieses Volume dann an einem Zielort innerhalb des Containers bereit:

docker run --mount source=my-volume,target=/app

Bindungshalterungen sind einfacher. Sie sind das, was Volumes unter der Haube verwenden, aber sie ermöglichen es Ihnen, den Speicherort auf der Hostfestplatte manuell festzulegen, anstatt ihn über Docker verwalten zu lassen.

docker run ~/nginxlogs:/var/log/nginx

In der Praxis kann die Verwendung dieser Halterungen etwas komplizierter sein. Viele verwaltete Docker-Dienste, wie ECS von AWS oder verwaltetes Kubernetes, geben Ihnen keinen direkten Zugriff auf den zugrunde liegenden Server, sodass Sie keine direkten Bind-Mount-Verbindungen herstellen können. Normalerweise wird dies mit einem Dienst wie EFS gelöst, der das Mounten in ECS-Container ermöglicht, oder mit einem externen Datenspeicher wie einer Datenbank.

VERBUNDEN: So installieren Sie Docker und Docker Compose unter Linux

Sollten Sie Docker für Ihre Datenbank wählen?

Docker ist im Allgemeinen nicht gut für die Handhabung von Zuständen. Docker-basierte Workloads lagern dieses Problem normalerweise an Datenbanken aus. Da eine Datenbank die Lösung des Problems ist, ist es praktisch, Ihre Datenbank in Docker zu platzieren?

Im Großen und Ganzen lautet die Antwort „normalerweise nicht“. Docker hat seit seiner Einführung einen langen Weg zurückgelegt, und es ist keine schlechte oder „falsche“ Idee mehr, Datenbanken zu containerisieren. Es ist sicherlich möglich und hat einige Vorteile. Bei den meisten allgemeinen Workloads überwiegen die Vorteile jedoch nicht die Komplikationen.

Um zu sehen warum, schauen wir uns die Vorteile von Docker an:

  • Einfache Skalierung:Server können je nach Bedarf schnell erstellt und gelöscht werden
  • Einfachere CI/CD-Tools:Automatisierte Builds sind trivial
  • Kodifizierung Ihrer Infrastruktur:Alle zugrunde liegenden Bibliotheken und Setups werden in der Dockerdatei verwaltet

Die meisten davon lassen sich nicht gut auf Datenbank-Workloads übertragen, die oft langfristige Bemühungen sind, die vor allem die Datenintegrität begünstigen. Sie möchten die meisten Datenbanken im Allgemeinen nicht automatisch skalieren; Sie erhalten normalerweise selbst keine regelmäßigen Code-Updates und profitieren daher nicht so sehr von der Ausführung in Containern. Und wenn Sie sowieso nur ein lokales Speicherlaufwerk mounten, warum führen Sie es nicht außerhalb von Docker aus?

Wenn Sie sich von der Komplexität der Verwaltung von Datenbanken befreien möchten, ist Docker nicht das richtige Werkzeug für diesen Job. Es ist einfach eine unnötige Komplikation für eine Workload, die problemlos auf einem Standard-VPS ausgeführt werden kann. Sie werden wahrscheinlich viel besser dran sein, wenn Sie eine vollständig verwaltete Datenbank als Service verwenden, wie RDS von AWS. Dies bringt viel von der Automatisierung, für die Docker gut ist, ohne die Kopfschmerzen, es selbst zu tun.

Der Hauptort, an dem Docker für Datenbank-Workloads nützlich sein kann, sind Entwicklungsumgebungen. Docker erleichtert das Hochfahren neuer Datenbanken mit unterschiedlicher Konfiguration, was schnelles Testen ermöglicht. In der Produktion gelten jedoch generell strengere Regeln.


Docker
  1. So führen Sie Nginx in einem Docker-Container aus:Eine Schritt-für-Schritt-Anleitung

  2. Wie führe ich ein Programm in einem Docker-Container aus?

  3. Sollten Sie eine Datenbank in Docker ausführen?

  4. So führen Sie einen Befehl in einem laufenden Docker-Container aus

  5. Elasticsearch Distributed NoSQL Database – Was ist das und sollten Sie es verwenden?

Was ist Docker Compose und wie wird es verwendet?

So führen Sie eine .NET-App in Docker aus

So führen Sie PHPMyAdmin in einem Docker-Container aus

So führen Sie Grafana in einem Docker-Container aus

So führen Sie Docker-Container aus

Docker-Container im Hintergrund ausführen (getrennter Modus)