Wie man MongoDB als Docker-Container ausführt

Wie man MongoDB als Docker-Container ausführt

  • ITOps & DevOps
5 Minuten Lesezeit Aktualisiert Aug 26, 2024

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:

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
MongoDB Docker 1.1 – bestehende Pakete aktualisieren

2. Installieren Sie erforderliche Pakete.

    sudo apt install apt-transport-https ca-certificates curl software-properties-common
MongoDB Docker 1.2 – Installieren von Voraussetzungspaketen

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 -
MongoDB Docker 1.3 - GPG-Schlüssel

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"
MongoDB Docker 1.4 – Docker-Repository zum APT-Quellcode

5. Aktualisieren Sie die Ubuntu-Paketliste.

    sudo apt update
MongoDB Docker 1.5 – Ubuntu-Paketliste aktualisieren

6. Überprüfen Sie das Docker-Repository.

    apt-cache policy docker-ce
MongoDB Docker 1.6 – Docker-Repository überprüfen

7. Installieren Sie die Docker-Community-Edition.

    sudo apt install docker-ce
MongoDB Docker 1.7 – Docker-Community-Edition

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
MongoDB Docker 1.8 – Statusprüfung der Docker-Installation

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
MongoDB Docker 2.1 – Docker Compose installieren

2. Führen Sie ausführbare Berechtigungen für die heruntergeladene Binärdatei an.

    >sudo chmod +x /usr/local/bin/docker-compose
MongoDB Docker 2.2 – ausführbare Berechtigungen anwenden

3. Verifizieren Sie die Installation von Docker Compose.

    docker-compose --version
MongoDB Docker 2.3 – Docker Compose Installation überprüfen

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
MongoDB Docker 4.1 – MongoDB-Container-Image

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
MongoDB Docker 4.2 – Docker Compose Verzeichnis erstellen

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
MongoDB Docker 4.3 – MongoDB-Dienst

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
MongoDB Docker 4.4 – Start des MongoDB-Containers

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
MongoDB Docker 4.5 – Docker-Container überprüfen
    sudo tree mongodb
MongoDB Docker 4.6 – Verifiziere MongoDb-Container

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
MongoDB Docker 5.1 – Zugriff auf MongoDB-Terminal

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} ])
MongoDB Docker 5.2 – Datenbank erstellen

Suchen Sie die Dokumente mit dem Befehl "Suchen".

    db.fruits.find().pretty()
MongoDB Docker 5.3 – Dokumente suchen

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.

MongoDB Docker 5.4 – Exit-Befehle

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
MongoDB Docker Compose 6.1 – externe Verbindungen

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()
MongoDB Docker 6.2 – Verbindung überprüfen

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:

  1. Entferne den Container mit dem docker-compose down.
  2. Löschen Sie die zugehörigen Bilder.
  3. Erstelle eine neue MongoDB-Datenbank mit der Compose-Datei und lokalen Datenbankdateien neu.

Entferne den MongoDB-Container.

    sudo docker-compose down
MongoDB Docker 7.1 – neuen Container erstellen

Entfernen Sie das lokale Mongo-Bild.

    sudo docker rmi mongo
MongoDB Docker 7.1 – Mongo-Image entfernen

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
MongoDB Docker 7.2 – Datenbankdateien überprüfen

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
MongoDB Docker 7.3 – Mongo-Container neu erstellen

Ü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
MongoDB Docker 7.4 – Mongo-Container überprüfen
    show databases
use food
db.fruits.find().pretty()
MongoDB Docker 7.5 – Datenbank anzeigen.

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
MongoDB Docker 8.1 – Zugriff auf Protokolldateien

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
MongoDB Docker 9.1 – erweiterte Container-Einrichtung

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
MongoDB Docker 9.2 – PS-Befehl

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.)

MongoDB Docker 9.3 - Mongo Express Überwachung

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.

Diese Beiträge sind meine eigenen und spiegeln nicht unbedingt die Position, Strategien oder Meinung von BMC wider.

Mehr aus ITOps & DevOps

Abonnieren Sie The Brief

Mit der Registrierung für dieses Angebot bestätigen Sie, dass Sie die Datenschutzrichtlinie von BMC gelesen und zugestimmt haben.

Danke

Sie haben The Brief abonniert
Das Briefing umfasst die Mainframe- und Enterprise-Orchestrierung – BMC AMI und Control-M – sowie die Analystenforschung, Kundeneinsätze und Events in beiden Bereichen.