MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Bereitstellen von MongoDB mit Docker

Der Hauptvorteil der Verwendung von MongoDB ist, dass es einfach zu bedienen ist. Man kann MongoDB einfach installieren und innerhalb von Minuten damit beginnen, daran zu arbeiten. Docker macht diesen Prozess noch einfacher.

Eine coole Sache an Docker ist, dass wir mit sehr wenig Aufwand und etwas Konfiguration einen Container hochfahren und mit der Arbeit an jeder Technologie beginnen können. In diesem Artikel werden wir einen MongoDB-Container mit Docker hochfahren und lernen, wie man das Speichervolume von einem Hostsystem an einen Container anfügt.

Voraussetzungen für die Bereitstellung von MongoDB auf Docker

Für dieses Tutorial benötigen wir nur Docker, das im System installiert ist.

MongoDB-Image erstellen

Erstellen Sie zuerst einen Ordner und erstellen Sie eine Datei mit dem Namen Dockerfile in diesem Ordner:

$ mkdir mongo-with-docker
$ cd mongo-with-docker
$ vi Dockerfile

Fügen Sie diesen Inhalt in Ihr Dockerfile ein:

FROM debian:jessie-slim
RUN apt-get update && \
apt-get install -y ca-certificates && \
rm -rf /var/lib/apt/lists/*
RUN gpg --keyserver ha.pool.sks-keyservers.net --recv-keys 0C49F3730359A14518585931BC711F9BA15703C6 && \
gpg --export $GPG_KEYS > /etc/apt/trusted.gpg.d/mongodb.gpg
ARG MONGO_PACKAGE=mongodb-org
ARG MONGO_REPO=repo.mongodb.org
ENV MONGO_PACKAGE=${MONGO_PACKAGE} MONGO_REPO=${MONGO_REPO}
ENV MONGO_MAJOR 3.4
ENV MONGO_VERSION 3.4.18
RUN echo "deb http://$MONGO_REPO/apt/debian jessie/${MONGO_PACKAGE%-unstable}/$MONGO_MAJOR main" | tee "/etc/apt/sources.list.d/${MONGO_PACKAGE%-unstable}.list"
RUN echo "/etc/apt/sources.list.d/${MONGO_PACKAGE%-unstable}.list"
RUN apt-get update
RUN apt-get install -y ${MONGO_PACKAGE}=$MONGO_VERSION
VOLUME ["/data/db"]
WORKDIR /data
EXPOSE 27017
CMD ["mongod", "--smallfiles"]

Führen Sie dann diesen Befehl aus, um Ihr eigenes MongoDB-Docker-Image zu erstellen:

docker build -t hello-mongo:latest .

Inhalt der Docker-Datei verstehen

Die Struktur jeder Zeile in der Docker-Datei ist wie folgt:

INSTRUCTIONS arguments
  • FROM:Basis-Image, von dem aus wir mit dem Erstellen des Containers beginnen
  • RUN:Dieser Befehl führt alle Anweisungen zur Installation von MongoDB im Basis-Image aus.
  • ARG:Speichert einige Standardwerte für den Docker-Build. Diese Werte stehen dem Container nicht zur Verfügung. Kann während des Erstellungsprozesses des Bildes mit dem Argument --build-arg überschrieben werden.
  • ENV:Diese Werte sind sowohl während der Erstellungsphase als auch nach dem Start des Containers verfügbar. Kann überschrieben werden, indem das Argument -e an den Befehl docker run übergeben wird.
  • VOLUME:Hängt das Daten-/DB-Volume an den Container an.
  • WORKDIR:Legt das Arbeitsverzeichnis fest, um alle RUN- oder CMD-Befehle auszuführen.
  • EXPOSE:Macht den Port des Containers verfügbar, um das System zu hosten (Außenwelt).
  • CMD:Startet die Mongod-Instanz im Container.
Multiplenines Become a MongoDB DBA – Bringing MongoDB to ProductionErfahren Sie, was Sie wissen müssen, um MongoDBDownload for Free bereitzustellen, zu überwachen, zu verwalten und zu skalieren

Starten des MongoDB-Containers aus dem Image

Sie können den MongoDB-Container starten, indem Sie den folgenden Befehl ausgeben:

docker run --name my-mongo -d -v /tmp/mongodb:/data/db -p 27017:27017 hello-mongo
  • --name:Name des Containers.
  • -d:Startet den Container als Hintergrundprozess (Daemon). Geben Sie dieses Argument nicht an, um den Container als Vordergrundprozess auszuführen.
  • -v:Hängen Sie das Volume /tmp/mongodb des Hostsystems an das Volume /data/db des Containers an.
  • -p:Ordnet den Host-Port dem Container-Port zu.
  • Das letzte Argument ist der Name/die ID des Bildes.

Geben Sie den folgenden Befehl ein, um zu überprüfen, ob der Container ausgeführt wird oder nicht:

docker ps

Die Ausgabe dieses Befehls sollte wie folgt aussehen:

CONTAINER ID        IMAGE               COMMAND                 CREATED             STATUS              PORTS                      NAMES
a7e04bae0c53        hello-mongo         "mongod --smallfiles"   7 seconds ago       Up 6 seconds        0.0.0.0:27017->27017/tcp   my-mongo

Zugriff auf MongoDB vom Host aus

Sobald der Container betriebsbereit ist, können wir genauso darauf zugreifen wie auf die Remote-MongoDB-Instanz. Sie können jedes Dienstprogramm wie Compass oder Robomongo verwenden, um eine Verbindung zu dieser Instanz herzustellen. Im Moment verwende ich den Mongo-Befehl, um eine Verbindung herzustellen. Führen Sie den folgenden Befehl in Ihrem Terminal aus:

mongo 27017

Es öffnet die Mongo-Shell, in der Sie alle Mongo-Befehle ausführen können. Jetzt erstellen wir eine Datenbank und fügen ihr einige Daten hinzu.

use mydb
db.myColl.insert({“name”: “severalnines”})
quit()

Um nun zu überprüfen, ob unsere Volume-Zuordnung korrekt ist oder nicht, werden wir den Container neu starten und prüfen, ob er unsere Daten enthält oder nicht.

Docker restart <container_id>

Verbinden Sie sich nun erneut mit der Mongo-Shell und führen Sie diesen Befehl aus:

db.myColl.find().pretty()

Sie sollten dieses Ergebnis sehen:

{ "_id" : ObjectId("5be7e05d20aab8d0622adf46"), "name" : "severalnines" }

Das bedeutet, dass unser Container die Datenbankdaten auch nach einem Neustart beibehält. Dies ist aufgrund der Volumenzuordnung möglich. Der Container speichert alle unsere Daten im Verzeichnis /tmp/mongodb im Hostsystem. Wenn Sie also den Container neu starten, werden alle Daten im Container gelöscht und ein neuer Container greift auf die Daten aus dem Verzeichnis tmp/mongodb des Hosts zu.

Zugriff auf die MongoDB-Container-Shell

$ docker exec -it <container-name> /bin/bash

Zugriff auf MongoDB-Containerprotokolle

$ docker logs <container-name>

Von einem anderen Container aus eine Verbindung zum MongoDB-Container herstellen

Sie können sich von jedem anderen Container aus mit dem MongoDB-Container verbinden, indem Sie das Argument --link verwenden, das der folgenden Struktur folgt.

--link <Container Name/Id>:<Alias>

Wobei Alias ​​ein Alias ​​für den Linknamen ist. Führen Sie diesen Befehl aus, um unseren Mongo-Container mit dem Express-Mongo-Container zu verknüpfen.

docker run --link my-mongo:mongo -p 8081:8081 mongo-express

Dieser Befehl zieht das Mongo-Express-Image aus Dockerhub und startet einen neuen Container. Mongo-Express ist eine Admin-Benutzeroberfläche für MongoDB. Gehen Sie nun zu http://localhost:8081, um auf diese Schnittstelle zuzugreifen.

Mongo-Express-Admin-Benutzeroberfläche

Schlussfolgerung

In diesem Artikel haben wir gelernt, wie man ein MongoDB-Image von Grund auf neu bereitstellt und wie man einen MongoDB-Container mit Docker erstellt. Wir haben auch einige wichtige Konzepte wie Volume-Mapping und das Herstellen einer Verbindung zu einem MongoDB-Container von einem anderen Container über Links durchgegangen.

Docker vereinfacht den Prozess der Bereitstellung mehrerer MongoDB-Instanzen. Wir können dasselbe MongoDB-Image verwenden, um eine beliebige Anzahl von Containern zu erstellen, die zum Erstellen von Replikatsätzen verwendet werden können. Um diesen Prozess noch reibungsloser zu gestalten, können wir eine YAML-Datei (Konfigurationsdatei) schreiben und das Dienstprogramm docker-compose verwenden, um alle Container mit einem einzigen Befehl bereitzustellen.