Wie man einen Docker MongoDB-Container bereitstellt und verwaltet

MongoDB ist eine beliebte, Open-Source-Dokumentendatenbank, die hohe Leistung und große Flexibilität bietet. Aber haben Sie schon einmal versucht, eine MongoDB-Datenbank für Ihre Projekte zu containerisieren? Wenn nicht, dann haben Sie etwas Besonderes vor!

In diesem Tutorial erfahren Sie, wie Sie MongoDB effektiv mit Docker bereitstellen, absichern und verwalten können. Lesen Sie weiter und werden Sie zum Meister der Bereitstellung von Docker MongoDB-Containern!

Voraussetzungen

Dieses Tutorial beinhaltet praktische Demonstrationen. Um mitzumachen, stellen Sie sicher, dass Sie Folgendes haben:

  • Eine Ubuntu-Maschine – In diesem Tutorial wird Ubuntu 20.04 LTS verwendet.
  • A user with sudo permission
  • Docker – In diesem Tutorial wird Docker 20.10.9 verwendet.

Herunterladen des Docker MongoDB-Images

Bevor Sie einen Docker MongoDB-Container bereitstellen und verwalten können, müssen Sie zuerst ein MongoDB-Image von der Docker Hub herunterladen, damit Sie den MongoDB-Container lokal ausführen können.

Führen Sie den folgenden docker-Befehl aus, um das MongoDB Community Edition (CE) Image herunterzuladen (pull mongo), das von Docker Hub gehostet wird. Die neueste Version dieses Images zum Zeitpunkt des Schreibens ist 4.2.

sudo docker pull mongo

Wie Sie unten sehen können, zieht der Befehl automatisch die neueste Version des Images und markiert es als latest.

Pulling mongo image

Führen Sie nun den Befehl docker images unten aus, um alle verfügbaren Images auf Ihrem Server aufzulisten.

sudo docker images

Unten sehen Sie das MongoDB-Image, das als latest markiert ist.

Listing all Docker images

Bereitstellen eines Docker MongoDB Containers

Aus dem heruntergeladenen MongoDB-Image können Sie jetzt einen MongoDB-Container bereitstellen. Sie initialisieren Ihren MongoDB-Container mit der Mongo-Ausführbaren, erstellen ein Datenverzeichnis. Sie definieren dann die Zuordnung zwischen dem Datenbereich des Docker-Containers und der Host-Maschine.

1. Führen Sie den Befehl mkdir unten aus, um ein Datenverzeichnis namens mongodata zu erstellen, um die MongoDB-Datenbank und -Protokolle zu speichern.

sudo mkdir -p /mongodata

2. Führen Sie als nächstes den Befehl docker run unten aus, um einen Container mit dem Namen mymongo zu erstellen. Darüber hinaus wird der Container mit einem interaktiven Pseudo-TTY gestartet (-it), falls Ausgaben angezeigt werden sollen, wenn der Container gestartet wird.

Schließlich wird das neu erstellte Verzeichnis mongodata mit dem internen Verzeichnis /data/db verknüpft (-v). Die Option -d startet den Container im detach-Modus, sodass er im Hintergrund läuft und die Konsolenausgabe nach der Erstellung zurückgibt.

Das System erstellt automatisch das Verzeichnis /data/db, wenn Sie den Container ausführen, um Daten von Änderungen, die Sie im Container vornehmen, zu speichern. Dieses Verzeichnis läuft im Modus „nur lesen“ und ermöglicht die persistente Datenspeicherung auf dem Host-System.

sudo docker run -it -v mongodata:/data/db --name mymongo -d mongo

Nach erfolgreicher Ausführung des Befehls sehen Sie eine Ausgabe wie die untenstehende.

Deploying MongoDB Container

3. Führen Sie abschließend den Befehl docker ps aus, um die ID des Containers zu ermitteln und seinen Status zu überprüfen. Der Befehl docker ps zeigt alle Informationen über den aktuell ausgeführten Container an.

Der Befehl docker ps entspricht dem regulären ps-Befehl in Linux.

sudo docker ps

In der untenstehenden Ausgabe sehen Sie einen Bereich Ports, der alle dem Container zugewiesenen Ports auflistet, um eingehende Verbindungen anzuhören.

In diesem Beispiel wird der Port 27017 auf den Host abgebildet. Die folgende Ausgabe zeigt an, dass Sie über localhost:27017 vom Host aus auf die MongoDB-Instanz in diesem Container zugreifen können.

Checking Docker MongoDB Container Status

Vielleicht möchten Sie die Protokolldatei des Containers mymongo einsehen, um festzustellen, was mit Ihrer MongoDB-Datenbank/-Instanz passiert ist, wenn etwas damit schief gelaufen ist. Wenn ja, führen Sie das docker logs-Befehl aus, wie folgt: sudo docker logs docker-container. Ersetzen Sie docker-container durch den Namen Ihres Docker-Containers.

Reading Docker Container Log File

Anhängen des Docker MongoDB-Containers an die Bash-Shell

Sie haben gerade einen Docker MongoDB-Container bereitgestellt, aber wie verwalten Sie ihn? Tun Sie dies, indem Sie den Docker-Container zunächst mit dem Bash-Shell mit dem Befehl docker exec anhängen.

Das Anhängen Ihres Containers an die Bash-Shell ist entscheidend, da der Container derzeit im Detached-Modus (im Hintergrund ausgeführt) läuft. Und wenn der Container im Hintergrund läuft, empfängt der Container weder Eingaben noch zeigt er Ausgaben an.

Führen Sie den Befehl docker exec unten aus, um Ihren Container (mymongo) an die Bash-Shell anzuhängen.

sudo docker exec -it mymongo bash

Wenn der Befehl abgeschlossen ist, ändert sich Ihr Eingabeaufforderungstext in etwas Ähnliches wie unten angegeben. Die eindeutige alphanumerische Nummer (77782fa95314) ist die Container-ID.

Container-IDs sind unerlässlich, um Namenskonflikte zu vermeiden und Container zwischen Hosts effektiv zu identifizieren. Versuchen Sie also, sie nicht zu ändern.

Attaching Docker MongoDB Container to Bash Shell

Führen Sie jetzt den Befehl mongo ohne Argumente aus, um sich in die MongoDB-Shell im Container (mymongo) einzuloggen. Die MongoDB-Shell ist der Ort, an dem Sie Ihre Mongo-Abfragen/-Befehle ausführen.

Sobald Sie sich im Container befinden, können Sie jeden Befehl ohne das Präfix sudo ausführen, da Sie jetzt ein Root-Benutzer innerhalb des Containers sind. Jede Änderung, die Sie im Container vornehmen, wirkt sich nicht auf Ihr Host-System aus.

mongo

Anhand des unten gezeigten Prompts können Sie erkennen, dass Sie sich jetzt in der MongoDB-Shell befinden.

Logging in to the MongoDB shell

Wenn Sie alle verfügbaren Befehle in der MongoDB-Shell anzeigen möchten, führen Sie den Befehl help aus, wie unten gezeigt.

Listing Available Commands in MongoDB Shell

Erstellen eines administrativen MongoDB-Benutzers

Nachdem Sie einen MongoDB-Server in einem Docker-Container bereitgestellt haben, erstellen Sie jetzt einen administrativen MongoDB-Benutzer. Ein administrativer Benutzer ermöglicht es Ihnen, sich mit dem MongoDB-Server zu verbinden und Datenbanken zu verwalten.

1. Melden Sie sich erneut in der MongoDB-Shell an und führen Sie den Befehl use unten aus, um zunächst zur Datenbank admin zu wechseln. Dadurch erhält der administrative Benutzer die erforderlichen Berechtigungen zur Verwaltung der Datenbanken.

use admin
Switching to the Admin Database

Kopieren und fügen Sie den folgenden Code in die MongoDB-Eingabeaufforderung ein, um einen Administrationsbenutzer zu erstellen.

Der unten stehende Code verwendet die Methode db.createUser() , um einen Benutzer mit administrativen Rollen zu erstellen. Der Benutzername (user) und das Passwort (pwd) sind fest codiert und können nach Ihren Wünschen geändert werden.

# Erstellt einen Administrationsbenutzer
db.createUser(
{
	# Legt den Benutzernamen für den Administrationsbenutzer fest
	user: "ata",
	# Legt das Passwort für den Administrationsbenutzer fest
	pwd: "password123",
	# Legt die Rollen für den Administrationsbenutzer fest
	roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
}
)

Wenn der Code funktioniert, erhalten Sie eine Nachricht wie unten in Ihrer MongoDB-Eingabeaufforderung.

Creating an Administrative New User

3. Führen Sie die Abfrage quit() aus, um die MongoDB-Shell zu verlassen.

quit()

4. Führen Sie schließlich den folgenden mongo-Befehl aus, um den Administrationsbenutzer, den Sie erstellt haben (ata), zu testen, indem Sie eine Verbindung zum MongoDB-Server herstellen. Geben Sie das Passwort für den Administrationsbenutzer ein, wenn Sie dazu aufgefordert werden.

mongo -u ata -p --authenticationDatabase admin

Wie unten zu sehen ist, gibt der MongoDB-Server die MongoDB-Serverversion aus, wenn Sie erfolgreich eine Verbindung zum Server herstellen.

Connecting to the MongoDB Server

Vielleicht möchten Sie den administrativen Benutzer weiter testen. Führen Sie dazu die unten stehenden Befehle aus, um alle Benutzer in der Datenbank anzuzeigen.

use admin
show users

Unten sehen Sie, dass der von Ihnen erstellte administrative Benutzer in der Liste enthalten ist.

Listing Users in Database

Erstellen einer MongoDB-Datenbank

Die Verwaltung eines Docker MongoDB-Containers wäre nicht vollständig ohne die Erstellung einer Datenbank. Sie erstellen eine neue MongoDB-Datenbank, in die Sie Daten über die MongoDB-Shell speichern werden.

1. Führen Sie von innerhalb einer interaktiven Sitzung im Docker-Container den Befehl show dbs aus, um alle Datenbanken auf Ihrem Server aufzulisten.

show dbs

Unten sehen Sie eine Admin-Datenbank, eine Konfigurationsdatenbank und eine lokale Datenbank. Die MongoDB-Shell erstellt diese Datenbanken standardmäßig in jedem MongoDB-Server.

Listing all MongoDB Databases

2. Führen Sie als Nächstes den Befehl use aus um eine neue Datenbank zu erstellen. Ersetzen Sie <database_name> durch den gewünschten Datenbanknamen. Für dieses Beispiel ist die Datenbank jedoch als linux benannt.

Die Abfrage use wechselt die aktuelle Datenbank zu der von Ihnen angegebenen, wenn sie existiert. Wenn nicht, erstellt die Abfrage use eine neue Datenbank und wechselt automatisch dazu.

use <database_name>
Creating a new MongoDB Database

3. Führen Sie erneut den Befehl show dbs aus, wie Sie es zuvor getan haben (Schritt eins), um zu überprüfen, ob die erstellte Datenbank existiert.

show dbs

Sie sehen die neu erstellte Datenbank (Linux) immer noch nicht in der Liste? MongoDB erstellt die Datenbank nur, wenn Sie zum ersten Mal Daten darin speichern. Die Daten können in Form einer Sammlung oder sogar eines Dokuments vorliegen.

Listing all MongoDB Databases

4. Kopieren Sie jetzt den folgenden Code in die MongoDB-Shell und drücken Sie Enter.

Der untenstehende Code erstellt eine neue Sammlung mit dem Namen linux_version, den Sie nach Belieben ändern können. Die Sammlung enthält Daten im Format Schlüssel:Wert-Paare.

# Mit der Methode insertOne Daten einfügen
db.linux_version.insertOne(
	# Schlüssel:Wert-Paare, die in die Datenbank eingefügt werden sollen
	{ "debian" : "11",
	"ubuntu" : "20.04",
	"rocky linux" : "8.4",
	"alma linux" : "8"
	}
)

In der untenstehenden Ausgabe sehen Sie, dass die Sammlung linux_version erstellt wurde und über eine ObjectID verfügt.

Showing collection with its ID

5. Führen Sie den Befehl show collections aus, um eine Liste der Sammlungen anzuzeigen und zu überprüfen, ob die neue Sammlung linux_version existiert.

show collections

Wie Sie unten sehen können, haben Sie erfolgreich die Sammlung linux_version erstellt.

Showing List of Collections

6. Führen Sie abschließend den Befehl unten aus, um die Daten, die Sie in der Sammlung linux_version eingefügt haben, anzuzeigen und zu bestätigen. Die Methode pretty() ermöglicht es Ihnen, die Daten in einem für Menschen lesbaren Format anzuzeigen.

db.linux_version.find().pretty()

Wenn Sie jemals die Daten in der Datenbank ändern, verwenden Sie die Update()-Methode.

Sie können untenstehend die Ausgabe in einem viel lesbareren Format sehen.

Viewing Data from MongoDB Database

Neustart des Docker MongoDB-Containers

Zu diesem Zeitpunkt haben Sie einen erfolgreich laufenden Docker MongoDB-Container. Aber was ist, wenn Sie den Container nicht mehr benötigen oder wenn er nicht funktioniert? Ein paar Docker-Befehle können helfen, einen MongoDB Docker-Container anzuhalten, neu zu starten und sogar zu entfernen.

1. Führen Sie den Befehl docker ps unten aus, um alle laufenden Container aufzulisten.

sudo docker ps

Notieren Sie sich den Namen und die Container-ID des Containers, den Sie anhalten, neu starten oder entfernen möchten, wie unten gezeigt.

Showing all running docker containers

2. Führen Sie anschließend einen der docker stop-Befehle unten aus, um einen laufenden MongoDB-Container anzuhalten.

sudo docker stop mymongo
sudo docker stop container-ID

3. Führen Sie erneut den Befehl docker ps aus, wie Sie es zuvor getan haben (Schritt eins), um zu überprüfen, ob der Container heruntergefahren wurde.

sudo docker ps

Wie Sie unten sehen können, ist der Container nicht in der Liste der laufenden Container aufgeführt, was darauf hinweist, dass Sie den Container erfolgreich angehalten haben.

Listing all Containers

4. Führen Sie jetzt eines der docker start-Befehle unten aus, wenn Sie einen Container neu starten möchten.

sudo docker start mymongo
sudo docker start container-ID

5. Führen Sie abschließend den Befehl docker ps erneut aus, um zu sehen, ob der Container läuft.

sudo docker ps

Vielleicht haben Sie keinen weiteren Verwendungszweck für einen Container. Wenn ja, müssen Sie zuerst den Container anhalten und dann den Befehl rm ausführen, um einen Container zu entfernen, wie folgt: sudo docker container rm mongodb. Ähnlich wie in den vorherigen Beispielen ersetzen Sie mongodb durch den Container-Namen oder die Container-ID.

Schlussfolgerung

In diesem Tutorial haben Sie gelernt, wie Sie einen Docker MongoDB-Container bereitstellen und verwalten, indem Sie einen Administratorbenutzer erstellen, um eine Datenbank zu erstellen und Daten darin zu speichern. Sie haben erkannt, dass Sie Container stoppen, neu starten und entfernen können, die Sie nicht mehr benötigen, um Ihre Docker-Images sauber zu halten.

Die Bereitstellung und Verwaltung von MongoDB mit Docker ist der erste Schritt, um die Containerisierungstechnologie zu nutzen und den Overhead zu reduzieren. Warum nicht diesen ersten Schritt nutzen, um MongoDB weiter zu erkunden und zu sehen, wie ein Docker MongoDB-Container bei Ihren Projekten helfen kann?

Source:
https://adamtheautomator.com/docker-mongodb/