Het belangrijkste voordeel van het gebruik van MongoDB is dat het gemakkelijk te gebruiken is. Men kan MongoDB eenvoudig installeren en er binnen enkele minuten aan beginnen. Docker maakt dit proces nog eenvoudiger.
Een cool ding over Docker is dat we met heel weinig inspanning en enige configuratie een container kunnen laten draaien en aan elke technologie kunnen werken. In dit artikel zullen we een MongoDB-container laten draaien met Docker en leren hoe u het opslagvolume van een hostsysteem aan een container kunt koppelen.
Vereisten voor het implementeren van MongoDB op Docker
We hebben alleen Docker nodig die in het systeem is geïnstalleerd voor deze tutorial.
Een MongoDB-afbeelding maken
Maak eerst een map aan en maak een bestand aan met de naam Dockerfile in die map:
$ mkdir mongo-with-docker
$ cd mongo-with-docker
$ vi Dockerfile
Plak deze inhoud in uw Docker-bestand:
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"]
Voer vervolgens deze opdracht uit om uw eigen MongoDB Docker-image te bouwen:
docker build -t hello-mongo:latest .
De inhoud van het Docker-bestand begrijpen
De structuur van elke regel in het docker-bestand is als volgt:
INSTRUCTIONS arguments
- FROM:Basisafbeelding van waaruit we de container gaan bouwen
- RUN:Deze opdracht voert alle instructies uit om MongoDB in de basisimage te installeren.
- ARG:Slaat enkele standaardwaarden op voor de Docker-build. Deze waarden zijn niet beschikbaar voor de container. Kan worden overschreven tijdens het bouwproces van de afbeelding met het argument --build-arg.
- ENV:deze waarden zijn beschikbaar tijdens de bouwfase en na het lanceren van de container. Kan worden overschreven door het argument -e door te geven aan de opdracht docker run.
- VOLUME:koppelt het data/db-volume aan de container.
- WORKDIR:Stelt de werkdirectory in om RUN- of CMD-commando's uit te voeren.
- EXPOSE:onthult de haven van de container om het systeem te hosten (buitenwereld).
- CMD:Start de mongod-instantie in de container.
De MongoDB-container starten vanuit de afbeelding
U kunt de MongoDB-container starten door de volgende opdracht te geven:
docker run --name my-mongo -d -v /tmp/mongodb:/data/db -p 27017:27017 hello-mongo
- --name:Naam van de container.
- -d:Start de container als een achtergrond (daemon) proces. Geef dit argument niet op om de container als voorgrondproces uit te voeren.
- -v:voeg het /tmp/mongodb-volume van het hostsysteem toe aan het /data/db-volume van de container.
- -p:wijs de hostpoort toe aan de containerpoort.
- Laatste argument is de naam/id van de afbeelding.
Geef het volgende commando om te controleren of de container draait of niet:
docker ps
De uitvoer van dit commando zou er als volgt uit moeten zien:
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
Toegang tot MongoDB vanaf de host
Zodra de container actief is, hebben we er toegang toe op dezelfde manier als toegang tot de externe MongoDB-instantie. U kunt elk hulpprogramma zoals Compass of Robomongo gebruiken om verbinding te maken met deze instantie. Voor nu gebruik ik de mongo-opdracht om verbinding te maken. Voer de volgende opdracht uit in uw terminal:
mongo 27017
Het zal mongo-shell openen waar je mongo-commando's kunt uitvoeren. Nu gaan we één database maken en er wat gegevens aan toevoegen.
use mydb
db.myColl.insert({“name”: “severalnines”})
quit()
Om nu te controleren of onze volumetoewijzing correct is of niet, zullen we de container opnieuw opstarten en controleren of deze onze gegevens heeft of niet.
Docker restart <container_id>
Maak nu opnieuw verbinding met mongo shell en voer dit commando uit:
db.myColl.find().pretty()
Je zou dit resultaat moeten zien:
{ "_id" : ObjectId("5be7e05d20aab8d0622adf46"), "name" : "severalnines" }
Dit betekent dat onze container de databasegegevens behoudt, zelfs nadat deze opnieuw is opgestart. Dit is mogelijk dankzij volume mapping. De container zal al onze gegevens opslaan in de map /tmp/mongodb in het hostsysteem. Dus wanneer u de container opnieuw start, worden alle gegevens in de container gewist en krijgt een nieuwe container toegang tot de gegevens van de host tmp/mongodb-directory.
Toegang tot MongoDB Container Shell
$ docker exec -it <container-name> /bin/bash
Toegang tot MongoDB-containerlogboeken
$ docker logs <container-name>
Verbinding maken met de MongoDB-container vanuit een andere container
U kunt vanuit elke andere container verbinding maken met de MongoDB-container met het argument --link dat de volgende structuur volgt.
--link <Container Name/Id>:<Alias>
Waarbij Alias een alias is voor linknaam. Voer deze opdracht uit om onze Mongo-container te koppelen aan de express-mongo-container.
docker run --link my-mongo:mongo -p 8081:8081 mongo-express
Deze opdracht haalt de mongo-express-afbeelding uit dockerhub en start een nieuwe container. Mongo-express is een beheerdersinterface voor MongoDB. Ga nu naar http://localhost:8081 om toegang te krijgen tot deze interface.
Mongo-express beheerdersinterfaceConclusie
In dit artikel hebben we geleerd hoe u een MongoDB-image vanaf het begin kunt implementeren en hoe u een MongoDB-container kunt maken met Docker. We hebben ook enkele belangrijke concepten doorgenomen, zoals volumetoewijzing en verbinding maken met een MongoDB-container vanuit een andere container met behulp van links.
Docker vereenvoudigt het implementatieproces van meerdere MongoDB-instanties. We kunnen dezelfde MongoDB-afbeelding gebruiken om een willekeurig aantal containers te bouwen die kunnen worden gebruikt voor het maken van replicasets. Om dit proces nog soepeler te laten verlopen, kunnen we een YAML-bestand (configuratiebestand) schrijven en het hulpprogramma docker-compose gebruiken om alle containers te implementeren met de enkele opdracht.