Was ist die beste Praxis für den Austausch von Datenbank-zwischen Containern im docker?
Ist da jemand, der weiß, was die beste Praxis für den Austausch von Datenbank-zwischen Containern im docker?
Was ich meine ist, ich möchte die Erstellung von mehreren Containern im docker. Dann diese Behälter ausführen von CRUD auf der gleichen Datenbank mit den gleichen Identität.
Bisher habe ich zwei Ideen. Einer ist, erstellen Sie eine separate container-Datenbank lediglich. Eine andere ist die Installation die Datenbank direkt auf dem host-Rechner, auf dem installiert docker.
Welches ist besser? Oder gibt es andere best-practice für diese Anforderung?
Dank
- Möglich, Duplikat der der Umgang mit dem permanenten Speicher (z.B. Datenbanken) im Andockfenster
- Dies ist nicht ein Duplikat dieser Frage.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist schwer zu beantworten "best practice" Frage, denn es ist eine Frage der Stellungnahme. Und Meinungen sind off-topic auf Stack Overflow.
Also ich gebe ein konkretes Beispiel, was ich haben getan, in eine ernsthafte Implementierung.
Ich bin mit ELK (Elasticsearch, Logstash, Kibana). Es ist containerisierte.
Für meine Daten speichert, habe ich Lagerbehälter. Diese storage-Container enthalten eine lokale fileystem passieren:
Ich bin auch mit
etcd
undconfd
, dynamisch neu konfigurieren, meine Dienste in diesem Punkt auf die Datenbanken.etcd
lässt mich das speichern von Schlüssel-Werte, so dass auf eine vereinfachte Ebene:Weil wir registrieren es in
etcd
, dann verwenden wirconfd
zu beobachten, die Schlüssel-Wert-Speicher, überwachen Sie für änderungen und neu zu schreiben und neu starten, unsere anderen container-Dienste.Ich bin mit
haproxy
für diese manchmal, undnginx
wenn ich etwas brauche etwas komplizierter. Diese beiden können Sie angeben, setzt der Gastgeber auf 'senden' - traffic auf, und haben einige grundlegende Verfügbarkeit/load-balance-Mechanismen.Dass heißt, ich kann ziemlich faul über Neustart/verschieben/hinzufügen von elasticsearch Knoten, da die Registrierung aktualisiert die ganze Umgebung. Ein Mechanismus, der ähnlich dem ist, was verwendet für
openshift
.So, um speziell deine Frage zu beantworten:
etcd
auf das übergeordnete host -, aber ansonsten hab ich minimierte meine Installation Fußabdruck. (Ich habe einen gemeinsamen "installieren", Vorlage für docker-hosts, und versuchen Sie und vermeiden Sie alles extra für Sie wo immer möglich)Es ist mein Meinung, dass die Vorteile von docker sind weitgehend vermindert, wenn Sie darauf angewiesen, dass der lokale host mit einer (speziellen) Datenbank-Instanz, denn Sie haben nicht mehr die Möglichkeit bekam, um Paket-test-deploy, oder 'spin-up' - ein neues system in wenigen Minuten.
(Das obige Beispiel - ich habe buchstäblich umgebaut, die ganze Sache in 10 Minuten, und die meisten war die
docker pull
übertragung der Bilder)Kommt es an. Eine nützliche Sache zu tun zu halten, ist die Datenbank-URL und das Passwort in einer environment-variable und stellen, die auf Docker bei der Ausführung der Container. Dadurch werden Sie frei, um die Verbindung zu einer Datenbank, wo kann es sein gelegen. E. g. läuft in einem container während der Prüfung und auf einen dedizierten server in der Produktion.
Die beste Praxis ist die Verwendung von Docker Bände.
Offizielle doc: Verwalten von Daten in Containern. Dieser doc details, wie Sie sich mit DB und container. Der übliche Weg dies zu tun ist, um die DB in einen container (ist ja eigentlich kein container, sondern ein Volumen) dann die anderen Container kann Zugriff auf diese DB-container (die Volumen), um CRUD (oder mehr) der Daten.
Zufällige Artikel, die auf "Verständnis Andockfenster Bände"
Bearbeiten ich nicht detail, viel weiter als die andere Antwort ist gut gemacht.