Versuch der Bereitstellung von Docker-Containern – Kommunikation mit mehreren Containern (Node+MongoDB+Nginx)

Versuch der Bereitstellung von Docker-Containern – Kommunikation mit mehreren Containern (Node+MongoDB+Nginx)

Der Grund ist dieser

Ich wollte eine Mocker-Plattform einsetzen und habe mich daher auf Empfehlung eines Freundes für das fertige Projekt API-Mocker entschieden.

Das Projekt ist in Serverknoten, Client Vue und Datenbank MongoDB unterteilt

Als ich versuchte, direkt bereitzustellen, stellte ich fest, dass ich viele Umgebungen installieren musste, z. B. Node, Mongo und Nginx. Das war sehr mühsam. Ich hatte zuvor Docker verwendet und fragte mich daher, ob ich Docker verwenden könnte, um direkt ohne die Umgebung bereitzustellen? Es gab also diesen Versuch

Multi-Container-Kommunikation

Das Projekt ist in 3 Teile unterteilt, daher müssen 3 Container (Node, Mongo, Nginx) eingerichtet werden

Wie kommunizieren Container miteinander?

 # Stellen Sie eine Verbindung über den Link-Befehl her$ docker run --name <Name> -d -p <Pfad1>:<Pfad2> --link <Containername>:<Alias> <Containername:Tag/Image-ID>

- --link Container-Verbindungsanweisung
- <Containername>: <Alias>
- <Name des verbundenen Containers> : <Alias ​​für den Containerzugriff>
- Hinweis: Der Alias ​​wird in dem Container aufgerufen, der aktiv die Verbindung aufbaut und wird vom verbundenen Container verwendet
- Die folgenden Anweisungen ermitteln den Verbindungsstatus im Container
$ curl <Alias>

Als nächstes versuchen wir,

Implementierungsprozess

1. Erstellen Sie einen Mongo-Container

2. Erstellen Sie den Knotencontainer und stellen Sie eine Verbindung mit dem Mongo-Container her

3. Erstellen Sie den Nginx-Container und stellen Sie eine Verbindung mit dem Node-Container her

Erstellen Sie den Mongo-Container

Lassen Sie uns zuerst das Mongo-Bild abrufen

$ docker pull mongo:neueste

Lassen Sie uns nun dieses Image ausführen.

 $ Docker-Bilder
 REPOSITORY TAG BILD ID ERSTELLT GRÖSSE
 mongo latest 05b3651ee24e vor 2 Wochen 382 MB

Die Direktive --auth aktiviert die Identitätsüberprüfung der Mongo-Verbindung. Die Überprüfung ist aktiviert, weil die Identitätsüberprüfung nicht festgelegt ist, wenn der Knoten über Container hinweg verbunden ist. Der Server kann keine Verbindung zur Mongo-Datenbank herstellen.

```
nodejs.MongoError: [egg-mongoose]Authentifizierung fehlgeschlagen.
```

Container anzeigen

$ Docker ps -a
CONTAINER ID BILD BEFEHL ERSTELLT STATUS PORTS NAMEN
0d440be90935 mongo "docker-entrypoint.s..." vor 14 Stunden Aktiv 14 Stunden 0.0.0.0:27017->27017/tcp mock-mongo

Da wir die Authentifizierung für Mongo aktiviert haben, müssen wir den Mongo-Container aufrufen und das Konto konfigurieren, das verwendet wird, wenn der Knoten eine Verbindung herstellt

$ docker exec -it mock-mongo /bin/bash
$ Mongo-Administrator
# Erstellen Sie einen Manager-Benutzer
$ db.createUser({Benutzer:"admin", pwd:"admin", Rollen:[{Rolle:"admin", db:"admin"}]})
# Kontoautorisierung $ db.auth('admin','admin')

Nachdem unsere Mongo-Datenbank nun läuft, erstellen wir einen Knotencontainer.

Erstellen Sie den Knotencontainer und stellen Sie eine Verbindung mit dem Mongo-Container her

Bevor wir mit dem Erstellen des Knotencontainers beginnen, müssen wir uns zunächst auf den Mongo-Container-Alias, die Portnummer und das Kennwort für das Anmeldekonto einigen

  • Mongo-Container-Alias:
  • DB-Mongo-Portnummer: 27017
  • Kontokennwort:admin:admin

Ändern wir zunächst die Konfiguration des Knotenservers

Dateikonfiguration dockerfile/api-mocker/server/config/config.default.js Ändern Sie die Mongo-Verbindungskonfiguration, db ist der Alias ​​des voreingestellten Mock-Mongo-Containers

 Mungo: {
 URL: „mongodb://admin:admin@db:27017/api-mock?authSource=admin“
 },

Jetzt schreiben wir ein Dockerfile um das Image zu erstellen

 # Geben Sie das Basis-Image FROM node:latest an
 
 # Betreuer BEtreuer [email protected]
 
 # Arbeitsverzeichnis WORKDIR /www
 
 #Kopieren Sie die lokale Datei in den Container, ohne sie zu dekomprimieren COPY api-mocker node-server/api-mocker
 
 EXPOSE 7001
 
 ARBEITSVERZEICHNIS /www/node-server/api-mocker/server
 
 Führen Sie npm install aus
 
 ARBEITSVERZEICHNIS /www/node-server/api-mocker
 
 # Wird nach dem Erstellen des Containers aufgerufen und aufgerufen, wenn der Container gestartet wird CMD ["make", "prod_server"]

Wir verwenden die geschriebene Dockerfile-Datei, um das Image zu erstellen

 $ docker build -t="mock-server:1.0.0" .

Schauen wir uns das Bild an

 $ Docker-Bilder
 REPOSITORY TAG BILD ID ERSTELLT GRÖSSE
 Mock-Server 1.0.0 957ad2aa1f97 vor 8 Minuten 674 MB
 mongo latest 05b3651ee24e vor 2 Wochen 382 MB

Jetzt kommt der kritische Schritt. Wir werden das Mocker-Server-Image ausführen und eine Verbindung zwischen dem Server und der Datenbank herstellen.

Kopieren Sie den Code wie folgt:
$ docker run -d -i -t -p 7001:7001 --name mock-server1 --link mock-mongo:db mock-server:1.0.0 /bin/bash

Werfen wir einen Blick auf den Container, der gerade läuft

 $ Docker ps
 CONTAINER ID BILD BEFEHL ERSTELLT STATUS PORTS NAMEN
 ee780b903c64 mock-server:1.0.0 "/bin/bash" Vor etwa einer Minute 11 Sekunden aktiv 0.0.0.0:7001->7001/tcp mock-server
 0d440be90935 mongo "docker-entrypoint.s..." vor 16 Stunden Vor 16 Stunden 0.0.0.0:27017->27017/tcp mock-mongo

Überprüfen Sie den Verbindungsstatus zwischen dem Knotencontainer und dem Mongo-Container

 $ docker exec -it mock-server /bin/bash
 $ curl-Datenbank

Nachdem unser Server und unsere Datenbank nun eine Verbindung hergestellt haben, beginnen wir mit der Bereitstellung unseres Clients.

Erstellen Sie den Nginx-Container und stellen Sie eine Verbindung mit dem Node-Container her.

Bevor wir nginx einrichten, müssen wir uns zunächst auf den Knotencontainer-Alias, die von nginx weitergeleitete Portnummer sowie den Domänennamen und die Portnummer für den Clientzugriff auf nginx einigen.

  • Knotenserver-Alias: Knoten
  • Vom Knotencontainer zugeordnete Portnummer: 7001
  • Nginx-Domänenname: 127.0.0.1
  • Nginx-Portnummer: 90

Lassen Sie uns zunächst das Nginx-Image abrufen und einen Container erstellen

$ docker pull nginx:latest
$ docker run -p 90:80 --link mock-node:node nginx:latest --name mock-nginx
# Überprüfen Sie den Verbindungsstatus des Containers $ docker exec -it mock-nginx /bin/bash
$Umgebung
# Wenn Sie die folgenden Daten sehen, bedeutet dies, dass die Verbindung erfolgreich ist NODE_PORT_7001_TCP=tcp://172.17.0.3:7001
NODE_PORT_7001_TCP_PORT=7001
NODE_ENV_YARN_VERSION=1.9.4

Schauen wir uns nun die laufenden Container an

$ Docker ps
 CONTAINER ID BILD BEFEHL ERSTELLT STATUS PORTS NAMEN
 09644025d148 nginx „nginx -g ‚Daemon von …‘“ vor 5 Stunden Vor 5 Stunden aktiv 0.0.0.0:90->80/tcp mock-nginx
 ee780b903c64 mock-server:1.0.0 "/bin/bash" Vor etwa einer Minute 11 Sekunden aktiv 0.0.0.0:7001->7001/tcp mock-server
 0d440be90935 mongo "docker-entrypoint.s..." vor 24 Stunden Aktiv 24 Stunden 0.0.0.0:27017->27017/tcp mock-mongo

Aufgrund der unabhängigen Bereitstellung des Frontends müssen wir die Konfiguration von nginx ändern. Es gibt mehrere Möglichkeiten, die Konfiguration von nginx zu ändern:

  • Verwenden Sie beim Erstellen eines Containers den Befehl -v, um die Konfigurationsdatei auf dem lokalen Host bereitzustellen, und starten Sie nginx im Container neu, nachdem Sie es lokal geändert haben.
  • Kopieren Sie die Konfigurationsdatei auf den lokalen Host, ändern Sie sie und ersetzen Sie die entsprechende Datei im Container. Starten Sie dann nginx im Container neu.
  • ...

Unsere aktuelle Betriebsumgebung ist ein 17-Zoll-MacBook Pro mit 15 Zoll, das eine spezielle Konfiguration für die Montage erfordert. Daher habe ich die zweite Methode verwendet.

Änderung der Konfigurationsdatei

  • Pfad der Konfigurationsdatei im Container: /etc/nginx/conf.d/default.conf
  • Kopieren Sie die Konfigurationsdatei auf Ihren lokalen Computer.
 $ docker cp mock-nginx:/etc/nginx/conf.d/default.conf ~/nginx/default.conf

Fügen Sie der nginx-Konfigurationsdatei die folgende Konfiguration hinzu

Server {
 Standort /mock-api/ {
  # Knoten ist der Alias ​​des Befehlsserver-Containers Proxy_Pass http://node:7001/;
 }

 Standort /mock {
  Autoindex aktiviert;
  Alias ​​/root/dist;
 }
}

Überschreibe die Konfiguration im Container und starte nginx neu

$ docker cp ~/nginx/default.conf mock-nginx:/etc/nginx/conf.d/default.conf
# Geben Sie den Container ein$ docker exec -it mock-nginx /bin/bash
# Starten Sie nginx neu. Wenn Sie die folgende Eingabeaufforderung sehen, bedeutet dies, dass der Neustart erfolgreich war. $ nginx -s reload
2018/11/03 17:23:14 [Hinweis] 68#68: Signalprozess gestartet

Jetzt kommt unser letzter spannender Schritt

Ändern Sie den von unserem Front-End-Projekt und Paket angeforderten Netzwerkdomänennamen und laden Sie ihn hoch

//API-Mocker/Client/Konfiguration 
// module.exports > build > serverRoot

modul.exporte = {
 bauen: {
  ServerRoot: „127.0.0.1:90/mock-api“
 }
}

Laden Sie die gepackte Dist-Datei in das Verzeichnis /root/dist der Nginx-Konfiguration hoch.

 $ docker cp ~/Sites/api-mocker/client/dist mock-nginx:/root

> Natürlich kann die Konstruktion eines Nginx-Containers auch durch Schreiben einer Dockfile-Datei implementiert werden. Wir werden es hier nicht im Detail erklären. Mounten Sie die Konfigurationsdatei und melden Sie sich beim lokalen Host an. Wenn Sie interessiert sind, können Sie es selbst ausprobieren. Kopieren Sie den Code

prüfen

Wir haben alle spannenden Konfigurationen abgeschlossen, jetzt testen wir es

Besuchen Sie das Front-End-Projekt: http://127.0.0.1:90/mock Wir sehen die folgende Schnittstelle, die anzeigt, dass unser Front-End-Projekt erfolgreich bereitgestellt wurde

Wir versuchen, ein Konto zu registrieren und sehen eine Erfolgsmeldung. Das bedeutet, dass unser gesamtes Projekt erfolgreich bereitgestellt wurde.

An diesem Punkt ist unsere Bereitstellung abgeschlossen und wir können die Schnittstelle simulieren und das Projekt schreiben. Streuen Sie Blumen ~~~

Zusammenfassen

Es war schwierig, zum ersten Mal einen Artikel zu schreiben und ihn zum ersten Mal auf diese Weise zu veröffentlichen. Ich habe meine Gedanken geordnet und hoffe, dass sie Ihnen eine Hilfe sein können.

Abschließend füge ich meine eigenen, häufig verwendeten Docker-Befehle und die in diesem Projekt verwendeten Konfigurationsdateien an.

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

Das könnte Sie auch interessieren:
  • Docker erstellt Cluster-MongoDB-Implementierungsschritte
  • So installieren Sie die neueste Version von MongoDB mit Docker
  • Detaillierte Erklärung zur Verwendung der MongoDB-Datenbank in Docker (Zugriff im LAN)
  • Methode zur Implementierung eines autorisierten Zugriffs auf MongoDB basierend auf Docker
  • So stellen Sie MongoDB-Container mit Docker bereit

<<:  So installieren und ändern Sie das Anfangskennwort von mysql5.7.18

>>:  So installieren und ändern Sie das Anfangskennwort von mysql5.7.18 unter Centos7.3

Artikel empfehlen

Einführung in die MySQL-Gesamtarchitektur

Die Gesamtarchitektur von MySQL ist in die Server...

So verwenden Sie den Linux-Befehl „more“ in allgemeinen Linux-Befehlen

more ist eines unserer am häufigsten verwendeten ...

Analyse mehrerer Situationen, in denen der MySQL-Index fehlschlägt

1. Prinzip des besten linken Präfixes – Wenn mehr...

Vue verwendet Drag & Drop, um einen Strukturbaum zu erstellen

In diesem Artikelbeispiel wird der spezifische Co...

Verwendung des Linux Dig-Befehls

Dig-Einführung: Dig ist ein Tool, das DNS einschl...

Grafisches Tutorial zur Installation und Konfiguration von MySQL 5.7.27

Detailliertes Download-, Installations- und Konfi...

Implementierung der Installation von Docker in einer Win10-Umgebung

1. Rufen Sie die offizielle Docker-Website auf Ge...

So verwenden Sie http und WebSocket in CocosCreator

Inhaltsverzeichnis 1. HttpGET 2. HTTP POST WebSoc...

HTML implementiert die Funktion zur Erkennung der Eingabevervollständigung

Verwenden Sie „onInput(event)“, um festzustellen,...