Auf einen Blick: Das Ausführen von MongoDB als Docker-Container vereinfacht die Bereitstellung und verbessert die Portabilität. Der Leitfaden behandelt Installationsschritte für Docker und Docker Compose, die Konfiguration von MongoDB-Containern sowie fortgeschrittene Setups wie die Verwendung von Mongo Express für eine GUI-Schnittstelle.
- Vorteile der Verwendung von MongoDB in Docker sind Konsistenz über verschiedene Umgebungen hinweg.
- Fortschrittliche Konfigurationen ermöglichen sicheren Zugriff und Überwachung mit Gesundheitsprüfungen.
MongoDB- und Docker-Container
Da MongoDB heute zu den beliebtesten NoSQL-Datenbanken gehört, kann es notwendig sein, MongoDB als Docker-Container auszuführen. In diesem Artikel erfahren Sie:
- Die Vorteile der Verwendung von MongoDB in einem Docker-Container
- Wie man Docker installiert
- Wie man Docker Compose installiert
- Wie man MongoDB als Docker-Container konfiguriert
- Wie man externe Verbindungen zu MongoDB-Containern aufstellt
- Wie man erweiterte Docker-Container für MongoDB einrichtet
Am Ende dieses Tutorials werden wir uns erweiterte Konfigurationen ansehen, die Ihnen einen Einblick in die Erweiterbarkeit eines containerisierten Projekts geben. Wir erstellen ein eigenständiges Projekt mit einer MongoDB-Instanz und einer Mongo Express-Weboberfläche auf einem dedizierten Netzwerk sowie einem Docker-Volumen, um die Portabilität des Projekts zu maximieren. Legen wir los.
Vorteile der Verwendung von MongoDB in einem Docker-Container
Docker ist ein Werkzeug, um Container einfach zum Erstellen, Bereitstellen und Ausführen von Anwendungen zu verwenden. Ein Container ist eine Standardeinheit von Software, die Anwendungen und alle ihre Abhängigkeiten in einem einzigen Paket zusammenfasst. Der Wert solcher Container besteht darin, dass die Software auf jeder Serverplattform laufen kann, unabhängig von Hardware oder Konfiguration.
Du kannst Docker verwenden, um MongoDB-Instanzen auszuführen. Wenn du MongoDB-Docker-Container-Instanzen einrichtest, kannst du eine portable und erweiterbare NoSQL-Datenbank erstellen. Diese containerisierte MongoDB-Instanz verhält sich genau wie eine nicht-containerisierte MongoDB-Instanz, ohne sich um die Serverkonfiguration kümmern zu müssen.
Installation von Docker
Wir beginnen dieses Tutorial, indem wir eine einfache Docker-Installation einrichten, um Container auf einem Ubuntu-basierten Server auszuführen. Wir können die Docker-Installationspakete aus dem offiziellen Docker-Repository abrufen. Hier sind die Installationsschritte: 1. Bestehende Pakete aktualisieren.
sudo apt update && sudo apt upgrade -y
2. Installieren Sie erforderliche Pakete.
sudo apt install apt-transport-https ca-certificates curl software-properties-common
3. Fügen Sie den GPG-Schlüssel aus dem offiziellen Docker-Repository hinzu.
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
4. Fügen Sie das offizielle Docker-Repository zu den APT-Quellen hinzu.
sudo add-apt-repository
"deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
5. Aktualisieren Sie die Ubuntu-Paketliste.
sudo apt update
6. Überprüfen Sie das Docker-Repository.
apt-cache policy docker-ce
7. Installieren Sie die Docker-Community-Edition.
sudo apt install docker-ce
8. Überprüfen Sie den Status der Installation mit folgendem Befehl. Wenn der Dienststatus wieder aktiv (laufend) zurückkehrt, ist Docker erfolgreich installiert und auf dem System aktiv.
sudo systemctl status docker
Installation von Docker Compose
Wir können die Kommandozeilenschnittstelle (CLI) nutzen, um Docker-Container zu erstellen und zu verwalten. Die Verwendung von CLI kann bei mehreren Containern und Konfigurationen mühsam sein. Stattdessen kann man Docker Compose nutzen, um mehrere Container in eine einzige Anwendung zu integrieren. Es verwendet das YAML-Format, um die Compose-Dateien zu erstellen, die leicht mit docker-compose Up- oder Down-Befehlen ausgeführt werden können, die alle Container und Konfigurationen innerhalb einer Compose-Datei erstellen oder entfernen. Installieren wir Docker Compose auf dem Ubuntu-Server. 1. Installieren Sie die aktuelle stabile Version von Docker Comose.
sudo curl -L "https://github.com/docker/compose/releases/download/1.27.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
2. Führen Sie ausführbare Berechtigungen für die heruntergeladene Binärdatei an.
>sudo chmod +x /usr/local/bin/docker-compose
3. Verifizieren Sie die Installation von Docker Compose.
docker-compose --version
Einrichten von MongoDB mit einem Docker Compose Container
Dieser Abschnitt erklärt, wie man einen MongoDB-Container mit einer Docker Compose-Datei einrichtet. Bevor wir die Compose-Datei erstellen, suchen wir mit dem Suchbefehl nach dem offiziellen MongoDB-Containerbild.
sudo docker search mongodb
Die Suchergebnisse zeigen, dass ein offizielles MongoDB-Container-Image namens "mongo" in der Docker-Container-Registry existiert. Standardmäßig speichert der MongoDB-Container die Datenbanken im /data/db-Verzeichnis innerhalb des Containers.
Erstelle ein Docker Compose-Verzeichnis, um MongoDB zu halten
Als Nächstes müssen wir ein Verzeichnis namens "mongodb" erstellen, um die Docker Compose-Datei zu speichern. Wir werden ein weiteres Verzeichnis namens "database" im Verzeichnis "mongodb" erstellen, um es auf den Datenbankstandort des Containers abzubilden und den lokalen Zugriff auf die Datenbank zu ermöglichen. Wir verwenden den -pv-Operator, um diese Elternordner zu erstellen.
>mkdir -pv mongodb/database
Die folgende docker-compose.yml Datei wird im Verzeichnis "mongodb" erstellt, um den MongoDB-Container zu erstellen. docker-compose.yml
version: "3.8"
services:
mongodb:
image : mongo
container_name: mongodb
environment:
- PUID=1000
- PGID=1000
volumes:
- /home/barry/mongodb/database:/data/db
ports:
- 27017:27017
restart: unless-stopped
Wir haben Version 3.8 verwendet, um die obige Compose-Datei zu erstellen. Die Compose-Datei-Version steht in direkter Verbindung zu:
- Welche Optionen sind in der Compose-Datei verfügbar?
- Die minimal unterstützte Docker Engine-Version.
In diesem Fall handelt es sich um die Docker-Engine 19.03.0 oder neuer.
MongoDB-Dienst im Docker-Container
In der Compose-Datei haben wir einen Dienst namens "mongodb" erstellt, der das Docker-Image "mongo" verwendet. Wir haben den Container "mongodb" genannt und den Datenbankordner innerhalb des Containers auf den lokalen Datenbankordner (/home/barry/mongodb/database) abgebildet. Solche Zuordnungen werden als bind-mount-Volumes bezeichnet. Die Umgebungsvariablen werden verwendet, um den "Benutzer" und die "Gruppe" des Containers zu definieren. Schließlich haben wir den lokalen Port 27017 auf den internen Port 27017 abgebildet. Dann wird die Neustart-Policy auf Neustart gesetzt, sofern der Benutzer sie nicht stoppt. Hier ist die Dateistruktur des Projekts:
tree mongodb
Start des MongoDB Docker-Containers
Gehe in den Ordner "mongodb" und führe den docker-compose up-Befehl aus, um den MongoDB-Container zu starten. Der -d-Operator führt den getrennten Container als Hintergrundprozess aus.
sudo docker-compose up -d
Der Up-Befehl zieht das "mongo"-Image aus der Docker-Registry und erstellt den Container mit den angegebenen Parametern in der docker-compose.yml-Datei. Überprüfen wir mit den folgenden Befehlen, ob der Container läuft und der lokale Ordner befüllt ist. Der -a-Operator zeigt alle Container im System unabhängig von ihrem Status an.
sudo docker ps -a
sudo tree mongodb
Interaktion mit MongoDB in einem Docker-Container
Mit dem Docker-Exec-Befehl können wir auf das Terminal des MongoDB-Containers zugreifen. Da der Container im Detached-Modus läuft, verwenden wir das interaktive Docker-Terminal, um die Verbindung herzustellen.
sudo docker exec -it mongodb bash
Im Bash-Terminal des Containers rufen wir den Mongo-Befehl auf, um auf MongoDB zuzugreifen. Für dieses MongoDB Docker Compose-Beispiel erstellen wir eine Datenbank namens "food" und eine Sammlung namens "fruits" sowie drei Dokumente. 1. Wechselt die Datenbank.
use food
2. Erstellen Sie die Sammlung.
db.createCollection("fruits")
3. Dokumente einfügen
db.fruits.insertMany([ {name: "apple", origin: "usa", price: 5}, {name: "orange", origin: "italy", price: 3}, {name: "mango", origin: "malaysia", price: 3} ])
Suchen Sie die Dokumente mit dem Befehl "Suchen".
db.fruits.find().pretty()
Der MongoDB-Container funktioniert wie jede normale MongoDB-Installation, ohne Bedenken hinsichtlich der zugrundeliegenden Software- und Hardwarekonfiguration. Mit dem Exit-Befehl können wir sowohl die MongoDB-Shell als auch die Container-Shell verlassen.
Externe Verbindungen zum MongoDB-Container
Während der Erstellung des MongoDB-Containers haben wir den internen MongoDB-Port auf den entsprechenden Port im Server abgebildet und den MongoDB-Container für externe Netzwerke bereitgestellt. Das folgende MongoDB-Docker Compose-Beispiel zeigt, wie wir uns von einem externen Endpunkt aus mit dem Container verbinden können, indem wir einfach den Mongo-Befehl auf den entsprechenden Server und Port zeigen.
mongo 10.10.10.60:27017
Der Find-Befehl in unserem MongoDB Docker Compose-Beispiel sucht nach der Fruits-Sammlung und ihren Dokumenten, um zu überprüfen, dass wir mit dem MongoDB-Container verbunden sind.
show databases
use food
show collections
db.fruits.find().pretty()
Datenwiderstandsfähigkeit und die Wiederherstellung des MongoDB Docker-Containers
Wir haben die Datenbank einem lokalen Ordner zugeordnet, sodass Sie, selbst wenn Sie den Container entfernen, die gespeicherten Daten im lokalen Ordner verwenden können, um einen neuen MongoDB-Container neu zu erstellen. Lassen Sie uns das testen. Wir werden:
- Entferne den Container mit dem docker-compose down.
- Löschen Sie die zugehörigen Bilder.
- Erstelle eine neue MongoDB-Datenbank mit der Compose-Datei und lokalen Datenbankdateien neu.
Entferne den MongoDB-Container.
sudo docker-compose down
Entfernen Sie das lokale Mongo-Bild.
sudo docker rmi mongo
Verifizieren Sie die lokalen Datenbankdateien. Anhand der untenstehenden Ausgabe können wir feststellen, dass trotz des Entfernens der Container die in ein lokalen Verzeichnis zugeordneten Daten nicht entfernt wurden.
sudo tree mongodb
Erstellen Sie einen neuen MongoDB-Docker-Container neu. Nun erstellen wir den Container mit der ursprünglichen docker-compose.yml-Datei. Wir führen folgenden Befehl im Ordner "mongodb" aus.
sudo docker-compose up -d
Überprüfen Sie die Daten im MongoDB-Container. Greifen wir nun auf die Bash-Shell im Container auf und prüfen die "fruits"-Sammlungen.
sudo docker exec -it mongodb bash
show databases
use food
db.fruits.find().pretty()
Das Ergebnis zeigt, dass wir den neuen Container mit den lokalen Datenbankinformationen erstellt haben, die mit dem neuen Container verknüpft sind. Außerdem können wir den Container einfach verschieben, indem wir die lokale Ordnerstruktur auf einen neuen Server verschieben und einen Container mit der docker-compose.yml-Datei erstellen. Man kann Docker-Volumes verwenden, anstatt die Daten lokal zu speichern, um die Portabilität der Datenbank zu erhöhen.
Überwachung der MongoDB-Container-Logdateien
Jeder Container erstellt Logs, mit denen du den Container überwachen und debuggen kannst. Wir können die Container-Logs mit dem Docker-Logs-Befehl mit dem zu überwachenden Containernamen aufrufen.
sudo docker logs mongodb
Einrichtung fortgeschrittener Docker-Container für MongoDB
In diesem Abschnitt erstellen wir einen sicheren MongoDB-Container, der einen Benutzernamen und ein Passwort benötigt, um auf die Datenbank zuzugreifen. In früheren MongoDB Docker Compose-Beispielen haben wir die Datenbankdaten einem lokalen Ordner zugeordnet. Diese Methode ist mühsam und erfordert manuelle Eingriffe beim Verschieben des Docker-Containers. Mit Docker-Volumes können wir Docker-native, persistente Volumes erstellen, die Sie leicht zwischen Docker-Installationen übertragen können. Obwohl wir die CLI zur Manipulation der MongoDB-Instanz nutzen können, ist eine grafische Benutzeroberfläche (GUI) bequemer. Mongo Express ist eine webbasierte MongoDB-Verwaltungsoberfläche, die auch als containerisierte Anwendung ausgeführt werden kann. Die docker-compose-Datei ist als einzelne YAML-Datei praktisch, die alle Anforderungen erfasst. docker-compose.yml
version: "3.8"
services:
mongodb:
image: mongo
container_name: mongodb
environment:
- MONGO_INITDB_ROOT_USERNAME=root
- MONGO_INITDB_ROOT_PASSWORD=pass12345
volumes:
- mongodb-data:/data/db
networks:
- mongodb_network
ports:
- 27017:27017
healthcheck:
test: echo 'db.runCommand("ping").ok' | mongo 10.10.10.60:27017/test --quiet
interval: 30s
timeout: 10s
retries: 3
restart: unless-stopped
mongo-express:
image: mongo-express
container_name: mongo-express
environment:
- ME_CONFIG_MONGODB_SERVER=mongodb
- ME_CONFIG_MONGODB_ENABLE_ADMIN=true
- ME_CONFIG_MONGODB_ADMINUSERNAME=root
- ME_CONFIG_MONGODB_ADMINPASSWORD=pass12345
- ME_CONFIG_BASICAUTH_USERNAME=admin
- ME_CONFIG_BASICAUTH_PASSWORD=admin123
volumes:
- mongodb-data
depends_on:
- mongodb
networks:
- mongodb_network
ports:
- 8081:8081
healthcheck:
test: wget --quiet --tries=3 --spider http://admin:[email protected]:8081 || exit 1
interval: 30s
timeout: 10s
retries: 3
restart: unless-stopped
volumes:
mongodb-data:
name: mongodb-data
networks:
mongodb_network:
name: mongodb_network
Lassen Sie uns nun die oben angegebene Compose-Datei aufschlüsseln. Zuerst haben wir zwei Dienste erstellt:
- Mongodb
- Mongo-Express
Mongodb-Dienst Wir haben den Root-Benutzernamen und das Passwort des "Mongodb"-Containers mit den folgenden Umweltvariablen konfiguriert:
- MONGO_INITDB_ROOT_USERNAME
- MONGO_INITDB_ROOT_PASSWORD
Wir haben das Datenvolumen auf das mongodb-data-Docker-Volume abgebildet und das Netzwerk als mongodb_network definiert, während wir Port 27017 geöffnet haben. Mongo-Express-Dienst Die Umweltvariablen des Mongo-Express-Containers sind:
- ME_CONFIG_MONGODB_SERVER – MongoDB-Dienst (mongodb)
- ME_CONFIG_MONGODB_ENABLE_ADMIN – Zugriff auf alle Datenbanken als Administrator aktivieren
- ME_CONFIG_MONGODB_ADMINUSERNAME – Admin-Benutzername der MongoDB-Datenbank
- ME_CONFIG_MONGODB_ADMINPASSWORD – Admin-Passwort der MongoDB-Datenbank
- ME_CONFIG_BASICAUTH_USERNAME – Mongo-Express Webinterface-Benutzername
- ME_CONFIG_BASICAUTH_PASSWORD – Mongo-Express Webinterface-Zugangspasswort
Zusätzlich haben wir den Mongo-Express-Dienst so konfiguriert, dass er vom Mongodb-Dienst abhängt. Wir haben dem Netzwerk denselben mongodb_network zugewiesen und die Volumes auf Mongodb-Data-Volume zugeordnet. Wir haben Port 8081 bereitgestellt, um Zugriff auf die Weboberfläche zu ermöglichen. Wir können beide Dienste mithilfe von Docker-Gesundheitschecks überwachen. Der MongoDB-Dienst pingt die MongoDB-Datenbank, während der Mongo-Express-Dienst versucht, mit den angegebenen Zugangsdaten auf die Webseite zuzugreifen. Schließlich haben wir für das Projekt ein Volume namens "mongodb-data" und ein Netzwerk namens "mongodb_network" definiert. Starten Sie die Docker Compose-Datei.
sudo docker-compose up -d
Die obige Ausgabe enthält keine Fehler, sodass wir annehmen können, dass alle Dienste erfolgreich erstellt wurden. Da wir für beide Dienste Gesundheitschecks hinzugefügt haben, können wir dies mit dem Befehl Docker ps überprüfen.
sudo docker ps -a
Der Docker-PS-Befehl druckt den Gesundheitsstatus des Containers. Dieser Gesundheitsstatus ist nur verfügbar, wenn Sie eine Gesundheitsprüfung für den Container definiert haben.
Überwachung mit Mongo Express
Gehen wir nun zur Mongo Express-Weboberfläche mit der Server-IP (http://10.10.10.60:8081.)
Die Mongo Express-Schnittstelle bietet eine bequeme Möglichkeit, mit der MongoDB-Datenbank zu interagieren. Die Mongo-Express-Schnittstelle bietet außerdem einen Überblick über den Status der MongoDB-Serverinstanz und bietet eine einfache Überwachungsfunktion.
Fazit
Wir haben dieses Docker-MongoDB-Tutorial entwickelt, weil MongoDB in NoSQL-Datenbanken so beliebt ist und man Vorteile hat, die man durch die Nutzung in einem Docker-Container erzielen kann. Die Verwendung von MongoDB in Docker-Containern schafft konsistente Entwicklungs- und Produktionsumgebungen für reibungslosere Deployments. Im Gegensatz zu virtuellen Maschinen benötigen Docker-Container weniger Ressourcen. Mit einer Beherrschung einfacher und fortschrittlicher Docker-Container können Ihre Softwareentwicklungsprozesse deutlich effizienter und problemfreier werden.
MongoDB-Leitfaden
- MongoDB-Überblick: Einstieg mit MongoDB
- Wie man MongoDB auf Ubuntu und Mac installiert
- Erstellung einer Datenbank in MongoDB
- MongoDB Shell Grundbefehle
- MongoDB Compass: Nutzung der Mongo GUI
- MongoDB rollenbasierte Zugriffskontrolle (RBAC) erklärt
- MongoDB-Projektion und Projektionsoperatoren erklärt
- MongoDB-Aggregatfunktionen erklärt
- MongoDB-Sortierung: sort()-Methode & Beispiele
- Verwendung von Push-and-Pull-Operatoren in MongoDB
- Wie man MongoDB $unwind
- 23 Gängige MongoDB-Abfrageoperatoren und deren Verwendung
- MongoDB GeoLocation-Abfragebeispiele
- Einführung in MongoDB-Transaktionen
- MongoDB-Indizes: Top-Indextypen und deren Verwaltung
- Die wichtigsten MongoDB-Befehle, die du kennen solltest
- MongoDB-Replikation: Eine vollständige Einführung
- Wie man einen MongoDB-Cluster einrichtet
- MongoDB Sharding: Konzepte, Beispiele & Tutorials
- MongoDB Atlas: Einrichtung und Nutzung von verwaltetem MongoDB
- Wie man MongoDB als Docker-Container ausführt
- MongoDB-Speichernutzung, Verwaltung und Anforderungen
- Wie man Mongodump für MongoDB-Backups verwendet
- Mongorestore-Beispiele zur Wiederherstellung von MongoDB-Backups
- Wie man PyMongo benutzt
- Wie man Mongoose für MongoDB und NodeJS verwendet
- MongoDB Spickzettel
- MongoDB vs Cassandra: NoSQL-Datenbanken im Vergleich
- PostgreSQL vs MongoDB: Vergleich von Datenbanken
- MySQL vs. MongoDB: Vergleich von Datenbanken
- MongoDB-Zertifizierungen: Eine Einführung
Diese Beiträge sind meine eigenen und spiegeln nicht unbedingt die Position, Strategien oder Meinung von BMC wider.