So verwenden Sie Docker-Container zur Implementierung der Proxy-Weiterleitung und Datensicherung

So verwenden Sie Docker-Container zur Implementierung der Proxy-Weiterleitung und Datensicherung

Vorwort

Wenn wir Anwendungen als Docker-Container auf Servern bereitstellen, müssen wir normalerweise zwei Aspekte berücksichtigen: Netzwerk und Speicher.

In Bezug auf das Netzwerk müssen einige Anwendungen Ports belegen und einige von ihnen müssen sogar externen Zugriff ermöglichen.

Aus Sicherheitsgründen ist die Proxy-Weiterleitung sinnvoller als das direkte Öffnen von Firewall-Ports.

Da Container hinsichtlich der Speicherung nicht für die Datenpersistenz geeignet sind, werden Daten im Allgemeinen durch Mounten von Volumes auf der Serverfestplatte gespeichert.

Eine absolute Sicherheit kann der Server allerdings nicht garantieren, daher müssen die Daten zusätzlich in der Cloud gesichert werden.

Proxy-Weiterleitung

Standardmäßig sind die Netzwerke zwischen Containern voneinander isoliert. Für einige verwandte Anwendungen (Web-Frontend-Container, Server-Container und Datenbank-Container) werden sie jedoch im Allgemeinen in ein unabhängiges Bridge-Subnetz (im Folgenden als Subnetz bezeichnet) aufgeteilt, sodass diese Container miteinander kommunizieren und gleichzeitig von außen isoliert sein können.

Für Container, die Zugriff außerhalb des Subnetzes bereitstellen müssen, können Sie Ports dem Server-Host zuordnen. Der gesamte Aufbau ist wie folgt:


Die obige Portzuordnung löst nur das Problem des Servers (Hosts), der auf den Containernetzwerkdienst zugreift. Wenn wir vom lokalen Computer über das Internet auf den Container auf dem Server zugreifen möchten, ist dies im Allgemeinen nicht möglich, da der Server aus Sicherheitsgründen standardmäßig die Firewall aktiviert und nur einige Ports wie 22 öffnet.

Bei herkömmlichen Netzwerkprozessen besteht die Implementierungsmethode darin, Netzwerkanforderungen über einen Reverse-Proxy-Server weiterzuleiten. Beispielsweise kann Nginx zum Konfigurieren des folgenden Proxys verwendet werden:

# Weiterleitung für verschiedene Pfade Server {
 hören Sie 80;               
 Servername www.xx.com;            

 Standort /a {
  Proxy_Passwort localhost:1234;
 }
 Standort /b {
  Proxy_Passwort localhost:2234;
 }
}
# Weiterleitungsserver für verschiedene Domänennamen {
 hören Sie 80;               
 Servername www.yy.com;            

 Standort / {
  Proxy_Passwort localhost:1234;
 }
}

Damit scheint das Problem an dieser Stelle gelöst zu sein, aber was ist, wenn Nginx auch in einem Container ausgeführt wird?

Wir haben gerade erwähnt, dass das Subnetz von externen Containern isoliert ist, sodass der Nginx-Container nicht auf diese externen Dienste zugreifen kann.

Sie können sich leicht vorstellen, den Nginx-Container in entsprechende Subnetze aufzuteilen. Der Container unterstützt zwar die Konfiguration mehrerer Subnetze, das Problem bei dieser Vorgehensweise besteht jedoch darin, dass jedes Mal, wenn ein neues Subnetz hinzugefügt wird, die Netzwerkkonfiguration des Nginx-Containers geändert und der Container neu gestartet werden muss.

Besser ist es daher, Nginx auf den HOST-Netzwerkmodus einzustellen. Geben Sie die Isolierung zwischen dem Nginx-Container und dem Server auf und teilen Sie Netzwerk und Port direkt mit dem Server. Dann kann der Nginx-Container direkt auf alle Container mit zugeordneten Ports zugreifen.

Wie in der folgenden Abbildung dargestellt:


Datensicherung

Anwendungsszenario

Aus Geschwindigkeits- und Sicherheitsgründen verfügen Unternehmen normalerweise über einige Server, auf die nur über das Intranet zugegriffen werden kann. Allerdings können die Daten auf diesen Servern, einschließlich der Server selbst, jederzeit geändert werden oder ausfallen.

Daher ist die Datensicherung besonders wichtig. Hier geht es um kleinere Datensicherungen.

Nehmen Sie als Beispiel den Wissensdatenbank-Server, den ich kürzlich für mein Team erstellt habe.

Diese Webanwendung ist ein kleiner Python-Dienst, der in Form eines Containers auf einem Intranet-Server bereitgestellt wird. Er unterstützt die Online-Bearbeitung und speichert Daten in Form von MD-Dateien.

Wenn ein Container ausfällt, sind die internen Daten nicht mehr zugänglich. Daher ist es definitiv unsicher, die Daten direkt im Container zu platzieren. Die einzige Möglichkeit, dem Container und dem Server das gemeinsame Lesen und Schreiben von Daten zu ermöglichen, besteht darin, Dateien zu mounten.

Wie also können die Daten gesichert werden? Hier wählen wir das private Repository von GitHub zum Speichern aus. Dafür gibt es drei Gründe:

  • Sicherheit. Daten gehen nicht so leicht verloren oder werden gestohlen.
  • Praktisch, Sie müssen zum Sichern nur den Git-Befehl verwenden.
  • schnell. Weil Volumen und Menge der gesicherten Daten nicht groß sind.

Obwohl die Methode festgelegt wurde, müssen noch zwei Probleme gelöst werden:

  • Für den Zugriff auf das GitHub-Repository ist eine Berechtigungsauthentifizierung erforderlich.
  • So planen oder übermitteln Sie Daten automatisch an GitHub.

Durchführung

Zunächst sollten wir gemäß dem Prinzip der Einzelverantwortung des Containers einen neuen Container erstellen, um die Sicherungsaufgabe auszuführen.

Hier können wir Docker-Compose oder andere Orchestrierungstools verwenden, um mehrere Container zu erstellen.

Anschließend folgt die Berechtigungsauthentifizierung. Dazu wird auf dem lokalen Rechner ein SSH-Schlüssel erstellt und dieser den GitHub-Einstellungen hinzugefügt, damit der Container Dateien in das entsprechende Warehouse pushen kann.

Allerdings kann jetzt nur der Server Code pushen, nicht der Container, daher müssen Sie auch die .ssh-Datei in den Container kopieren.

Schließlich die Implementierung einer automatischen Sicherung. Eine bessere Möglichkeit besteht darin, den Code bei jeder Dateiänderung zu übermitteln und zu pushen. Derzeit gibt es jedoch keine einfache Möglichkeit, Dateien im Container zu überwachen. Daher besteht die nächstbeste Option darin, eine Strategie für geplante Aufgaben zu verwenden, d. h. alle 5 Minuten den entsprechenden Git-Befehl auszuführen, um Dateien zu übermitteln und in das Lager zu pushen.

Hier können Sie einen leichten Container basierend auf dem Busybox-Image-Paket verwenden, den Projektcode in den Container einbinden, um die synchrone Aktualisierung der Dateien sicherzustellen, und dann den Cron-Dienst starten, um den Vorgang zu implementieren.

Zusammenfassen

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Lernwert für Ihr Studium oder Ihre Arbeit hat. Wenn Sie Fragen haben, können Sie eine Nachricht hinterlassen. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM.

Das könnte Sie auch interessieren:
  • Detaillierte Erklärung zum Kopieren und Sichern von Docker-Containerdaten
  • Detaillierte Erläuterung der Sicherung und Wiederherstellung von PSSQL-Datenbanken in Docker
  • Docker verwendet den Befehl mysqldump, um MySQL-Daten im Projekt zu sichern und zu exportieren
  • Beispielcode für Datenbanksicherung in einer Docker-Umgebung (PostgreSQL, MySQL)
  • Detaillierte Erklärung des Docker-Befehls zum Sichern des Linux-Systems
  • Detaillierte Erläuterung der Sicherung, Wiederherstellung und Migration von Containern in Docker
  • Detaillierte Erläuterung des Docker-Datensicherungs- und Wiederherstellungsprozesses

<<:  Der Kernprozess der NodeJS-Verarbeitung einer TCP-Verbindung

>>:  Lösung zum Ändern des Datenspeicherorts der Datenbank in MySQL 5.7

Artikel empfehlen

Docker-Konfiguration Alibaba Cloud Image Acceleration Pull-Implementierung

Heute habe ich Docker verwendet, um das Image abz...

Definieren der Mindesthöhe der Inline-Elementspanne

Das Span-Tag wird häufig beim Erstellen von HTML-...

MySQL-Optimierung: So schreiben Sie hochwertige SQL-Anweisungen

Vorwort Im Internet gibt es zahlreiche Informatio...

Detaillierte Einführung und Verwendungsbeispiele für Map-Tag-Parameter

Karten-Tags müssen paarweise vorkommen, d. h. <...

CocosCreator Universal Framework Design Network

Inhaltsverzeichnis Vorwort WebSocket verwenden Er...

MySQL-Joinpufferprinzip

Inhaltsverzeichnis 1. MySQL-Joinpuffer 2. JoinBuf...

Zusammenfassung zur Verwendung der Reduce()-Methode in JS

Inhaltsverzeichnis 1. Grammatik 2. Beispiele 3. A...

Tiefgreifendes Verständnis von globalen Sperren und Tabellensperren in MySQL

Vorwort Je nach Umfang der Sperrung können Sperre...

Grafisches Tutorial zur Installation und Konfiguration von MySQL 5.5.27 winx64

1. Installationspaket MySQL-Dienst-Downloadadress...