MongoDB draaien in Docker: een complete gids met voorbeelden
Deze gids helpt je MongoDB in Docker te draaien, met zowel snelle commandline-deployments als volledige Docker Compose-configuraties. Perfect voor ontwikkelaars die zelf willen hosten of lokaal willen experimenteren zonder meteen naar cloudhosting over te stappen.
Dus je wilt MongoDB zelf hosten of er lokaal mee gaan experimenteren? Er zijn een paar opties om te beginnen als je niet direct in wilt duiken in MongoDB Atlas, waaronder containers met Docker.
Docker gebruiken is een solide keuze voor het beheren van je MongoDB-instance, omdat het niet meer dan een minuut kost en makkelijk te onderhouden of te verplaatsen is tussen hosts.
In dit artikel bekijken we een paar manieren om MongoDB met Docker te deployen en delen we onderweg enkele tips en trucs. Je kunt ook deze video bekijken voor een snelle samenvatting van het onderwerp.
Vereisten
Om deze tutorial te volgen, moet je de Docker Engine op je computer hebben geïnstalleerd. Dit kan op macOS, Windows of Linux. Je hebt Docker Desktop niet per se nodig, maar afhankelijk van je besturingssysteem kan het je Docker-ervaring wel makkelijker maken.
Ik gebruik de Docker Engine via Rancher Desktop op macOS, en dat werkt prima.
Voordat je MongoDB in een Docker-container kunt draaien, moet je eerst een image downloaden die aan je behoeften voldoet. Voer vanaf de commandline het volgende uit:
Met bovenstaande opdracht wordt de officiële MongoDB Community Edition (CE)-image met de tag "latest" gedownload.
Belangrijk om te weten: mongodb/mongodb-community-server en mongodb/mongodb-enterprise-server zijn officiële Docker-images die door MongoDB worden onderhouden. Alle andere images worden door de community onderhouden en kunnen andere of onverwachte resultaten opleveren.
Met een gedownloade image kunnen we naar de deploy-opties kijken.
MongoDB draaien als geïsoleerde container met het Docker run-commando
De snelste manier om MongoDB met Docker te deployen is simpelweg het docker run-commando te gebruiken met een paar configuratieparameters. Je kunt bijvoorbeeld het volgende vanaf je commandline uitvoeren:
docker run -d-p27017:27017 -eMONGO_INITDB_ROOT_USERNAME=nraboy -eMONGO_INITDB_ROOT_PASSWORD=password1234 --name mongodb mongodb/mongodb-community-server:latestMogelijk gemaakt door
Bovenstaande opdracht pakt onze image en draait deze als een container met de naam "MongoDB". De container wordt port-gemapd, wat betekent dat de host ermee kan communiceren op poort "27017". In dit voorbeeld zijn ook de root-inloggegevens ingesteld, maar afhankelijk van je deploymentbehoeften kun je Docker Secrets of een andere beschermde manier gebruiken om gevoelige informatie door te geven.
In het voorbeeld hierboven wordt alle data binnen de container opgeslagen. De MongoDB-data, waaronder databases, collecties en zelfs documenten, blijft alleen bestaan zolang die specifieke container bestaat. Dat kan geschikt zijn voor tests, maar vaak wil je betrouwbare persistentie van je MongoDB-data in Docker. Maak hiervoor een Docker-volume met het volgende commando:
Om je container dat volume te laten gebruiken, kun je je deploy-commando als volgt aanpassen:
docker run -d-p27017:27017 -eMONGO_INITDB_ROOT_USERNAME=nraboy -eMONGO_INITDB_ROOT_PASSWORD=password1234 -v mongodb:/data/db --name mongodb mongodb/mongodb-community-server:latestMogelijk gemaakt door
Merk op dat we dit keer het te gebruiken volume specificeren. Met een volume kun je erop vertrouwen dat je data blijft bestaan, ook na het beëindigen of updaten van je container.
Met MongoDB draaiend in een Docker-container kun je verbinding maken met mongodb://nraboy:password1234@localhost:27017 als connection string vanuit een tool naar keuze.
MongoDB opnemen in je stack of project met Docker Compose
Als je van plan bent MongoDB te gebruiken met een specifiek project dat ook met Docker wordt beheerd, is het waarschijnlijk logisch om MongoDB met een Docker Compose-configuratie te beheren. Deze configuraties worden vaak gebruikt om je projecten te sandboxen, ook wel stacks genoemd.
Maak ergens op je computer een bestand docker-compose.yml met het volgende:
services:mongodb:image: mongodb/mongodb-community-server:latest
container_name: mongodb
restart: unless-stopped
ports:-"27017:27017"volumes:- mongodb:/data/db
environment:MONGO_INITDB_ROOT_USERNAME: nraboy
MONGO_INITDB_ROOT_PASSWORD: password1234
volumes:mongodb:external:trueMogelijk gemaakt door
Bovenstaande configuratie gebruikt informatie die we al hebben gezien in het losse commandline-commando. Net als bij de andere methode is de verwachting hier dat je al een volume mongodb hebt aangemaakt dat door Docker wordt beheerd. Als je dit nog moet doen, voer dan opnieuw het volgende commando uit:
Bovenstaande opdracht start je stack in detached-modus.
Je kunt controleren of alles werkt door te proberen verbinding te maken met je instance met een tool zoals MongoDB Compass, een van de taaldrivers zoals Node.js, of via de MongoDB Shell.
Als je het voorbeeld exact volgt, is je connection string mongodb://nraboy:password1234@localhost:27017, maar afhankelijk van hoe je hebt meegedaan kan deze anders zijn.
Om je MongoDB-instance te stoppen, voer je vanaf de commandline het volgende uit met je YAML-configuratie in dezelfde werkmap:
Omdat we een extern volume gebruiken, blijft bij de volgende start van je container alles bewaard.
Conclusie
Docker maakt het eenvoudig om met MongoDB te werken in een zelfgehoste of lokale omgeving. Je hoeft je geen zorgen te maken over algemene besturingssysteemconfiguraties of over verschillen tussen computers. Je krijgt elke keer een consistente ervaring.
Kan ik meerdere MongoDB-containers tegelijkertijd draaien met Docker?⌄
Ja, je kunt meerdere MongoDB-containers draaien zolang elke container naar een andere poort mappt of op een apart Docker-netwerk draait om conflicten te voorkomen.
Hoe maak ik een back-up van de data van een MongoDB-container in Docker?⌄
Voor back-ups kun je docker cp gebruiken om bestanden uit het volume te halen of mongodump binnen de container te gebruiken. Persistente volumes helpen ook om data tussen sessies te behouden.
Is het veilig om MongoDB-wachtwoorden in het Docker Compose-bestand op te slaan?⌄
Dat is niet ideaal. Gebruik in plaats daarvan Docker Secrets of omgevingsbestandjes (.env) die zijn uitgesloten van versiebeheer om gevoelige inloggegevens veilig te beheren.
Draait MongoDB goed in Docker op Windows?⌄
Ja, MongoDB draait soepel in Docker op Windows, macOS en Linux, vooral wanneer je WSL 2 of Docker Desktop voor Windows gebruikt voor compatibiliteit.
Kan ik MongoDB met Docker in productie gebruiken?⌄
Ja, maar het is aan te raden om goede networking, opslagvolumes, authenticatie en back-ups in te richten voordat je MongoDB in Docker in productie gebruikt.
Hoe maak ik vanuit een andere container verbinding met MongoDB in Docker?⌄
Gebruik Docker Compose en verwijs naar de MongoDB-container met de servicenaam als hostnaam. Zo kunnen services onderling communiceren op hetzelfde netwerk.
Moet ik MongoDB lokaal installeren als ik Docker gebruik?⌄
Nee. Docker draait MongoDB in een gecontaineriseerde omgeving, dus je hoeft MongoDB niet direct op je hostmachine te installeren.
Kan ik MongoDB Compass gebruiken met een MongoDB-instance in Docker?⌄
Zeker. Gebruik gewoon de juiste connection string (bijv. mongodb://user:pass@localhost:27017) om vanuit MongoDB Compass verbinding te maken met je lokale container.
Hoe monitor ik de performance van MongoDB in Docker?⌄
Je kunt tools integreren zoals mongostat, mongotop of externe monitoringsoplossingen zoals Prometheus en Grafana voor performance-tracking binnen Docker.
Blijft mijn MongoDB-data bewaard in een Docker-container?⌄
Zolang je de containerdirectory hebt gemapt naar een volume op je hostcomputer, zou de data zonder problemen moeten blijven bestaan tussen updates en herstarts.
Moet ik Docker of MongoDB Atlas gebruiken?⌄
In de meeste situaties is MongoDB Atlas beter vanwege de beschikbare functies, prijs en gebruiksgemak, maar MongoDB via Docker is ook een valide optie.
Moet ik Docker Desktop gebruiken met MongoDB?⌄
Docker Desktop maakt werken met Docker meestal makkelijker, maar het is geen vereiste. De meeste Linux-distributies bevatten de Docker Engine, en andere interfaces zoals Rancher Desktop werken ook.
Auteur
Nic Raboy
Nic Raboy is een Developer Relations Lead bij MongoDB, waar hij een team van Python-, Java-, C#- en PHP-ontwikkelaars aanstuurt dat geweldige content maakt om developers te helpen MongoDB succesvol in hun projecten op te nemen. Hij heeft ervaring met Golang en JavaScript en schrijft vaak over zijn ontwikkelavonturen.
Dus je wilt MongoDB zelf hosten of er lokaal mee gaan experimenteren? Er zijn een paar opties om te beginnen als je niet direct in wilt duiken in MongoDB Atlas, waaronder containers met Docker.
Docker gebruiken is een solide keuze voor het beheren van je MongoDB-instance, omdat het niet meer dan een minuut kost en makkelijk te onderhouden of te verplaatsen is tussen hosts.
In dit artikel bekijken we een paar manieren om MongoDB met Docker te deployen en delen we onderweg enkele tips en trucs. Je kunt ook deze video bekijken voor een snelle samenvatting van het onderwerp.
Vereisten
Om deze tutorial te volgen, moet je de Docker Engine op je computer hebben geïnstalleerd. Dit kan op macOS, Windows of Linux. Je hebt Docker Desktop niet per se nodig, maar afhankelijk van je besturingssysteem kan het je Docker-ervaring wel makkelijker maken.
Ik gebruik de Docker Engine via Rancher Desktop op macOS, en dat werkt prima.
Wil je je Docker-skills opfrissen, bekijk dan zeker Docker for Beginners: A Practical Guide to Containers om de basis bij te spijkeren.
Een Docker-image voor MongoDB downloaden
Voordat je MongoDB in een Docker-container kunt draaien, moet je eerst een image downloaden die aan je behoeften voldoet. Voer vanaf de commandline het volgende uit:
Met bovenstaande opdracht wordt de officiële MongoDB Community Edition (CE)-image met de tag "latest" gedownload.
Belangrijk om te weten: mongodb/mongodb-community-server en mongodb/mongodb-enterprise-server zijn officiële Docker-images die door MongoDB worden onderhouden. Alle andere images worden door de community onderhouden en kunnen andere of onverwachte resultaten opleveren.
Met een gedownloade image kunnen we naar de deploy-opties kijken.
MongoDB draaien als geïsoleerde container met het Docker run-commando
De snelste manier om MongoDB met Docker te deployen is simpelweg het
docker run-commando te gebruiken met een paar configuratieparameters. Je kunt bijvoorbeeld het volgende vanaf je commandline uitvoeren:Bovenstaande opdracht pakt onze image en draait deze als een container met de naam "MongoDB". De container wordt port-gemapd, wat betekent dat de host ermee kan communiceren op poort "27017". In dit voorbeeld zijn ook de root-inloggegevens ingesteld, maar afhankelijk van je deploymentbehoeften kun je Docker Secrets of een andere beschermde manier gebruiken om gevoelige informatie door te geven.
In het voorbeeld hierboven wordt alle data binnen de container opgeslagen. De MongoDB-data, waaronder databases, collecties en zelfs documenten, blijft alleen bestaan zolang die specifieke container bestaat. Dat kan geschikt zijn voor tests, maar vaak wil je betrouwbare persistentie van je MongoDB-data in Docker. Maak hiervoor een Docker-volume met het volgende commando:
Om je container dat volume te laten gebruiken, kun je je deploy-commando als volgt aanpassen:
Merk op dat we dit keer het te gebruiken volume specificeren. Met een volume kun je erop vertrouwen dat je data blijft bestaan, ook na het beëindigen of updaten van je container.
Met MongoDB draaiend in een Docker-container kun je verbinding maken met
mongodb://nraboy:password1234@localhost:27017als connection string vanuit een tool naar keuze.MongoDB opnemen in je stack of project met Docker Compose
Als je van plan bent MongoDB te gebruiken met een specifiek project dat ook met Docker wordt beheerd, is het waarschijnlijk logisch om MongoDB met een Docker Compose-configuratie te beheren. Deze configuraties worden vaak gebruikt om je projecten te sandboxen, ook wel stacks genoemd.
Maak ergens op je computer een bestand
docker-compose.ymlmet het volgende:Bovenstaande configuratie gebruikt informatie die we al hebben gezien in het losse commandline-commando. Net als bij de andere methode is de verwachting hier dat je al een volume
mongodbhebt aangemaakt dat door Docker wordt beheerd. Als je dit nog moet doen, voer dan opnieuw het volgende commando uit:Natuurlijk kun je je Docker-volumes beheren op een manier die voor jou logisch is. Een volume aanmaken is slechts een van de mogelijkheden.
Met je commandline in dezelfde werkmap als je
docker-compose.yml-bestand, voer je het volgende commando uit:Bovenstaande opdracht start je stack in detached-modus.
Je kunt controleren of alles werkt door te proberen verbinding te maken met je instance met een tool zoals MongoDB Compass, een van de taaldrivers zoals Node.js, of via de MongoDB Shell.
Als je het voorbeeld exact volgt, is je connection string
mongodb://nraboy:password1234@localhost:27017, maar afhankelijk van hoe je hebt meegedaan kan deze anders zijn.Om je MongoDB-instance te stoppen, voer je vanaf de commandline het volgende uit met je YAML-configuratie in dezelfde werkmap:
Omdat we een extern volume gebruiken, blijft bij de volgende start van je container alles bewaard.
Conclusie
Docker maakt het eenvoudig om met MongoDB te werken in een zelfgehoste of lokale omgeving. Je hoeft je geen zorgen te maken over algemene besturingssysteemconfiguraties of over verschillen tussen computers. Je krijgt elke keer een consistente ervaring.
Wil je een stap verder gaan, leer dan hoe je een database maakt in MongoDB.