sql >> Databasteknik >  >> NoSQL >> MongoDB

Distribuera MongoDB med Docker

Den största fördelen med att använda MongoDB är att det är lätt att använda. Man kan enkelt installera MongoDB och börja arbeta på det på några minuter. Docker gör denna process ännu enklare.

En häftig sak med Docker är att vi, med väldigt lite ansträngning och viss konfiguration, kan snurra upp en container och börja arbeta med vilken teknik som helst. I den här artikeln kommer vi att snurra upp en MongoDB-behållare med Docker och lära oss hur man kopplar lagringsvolymen från ett värdsystem till en container.

Förutsättningar för att distribuera MongoDB på Docker

Vi behöver bara Docker installerat i systemet för denna handledning.

Skapa en MongoDB-bild

Skapa först en mapp och skapa en fil med namnet Dockerfile i den mappen:

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

Klistra in detta innehåll i din Dockerfile:

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"]

Kör sedan det här kommandot för att bygga din egen MongoDB Docker-avbildning:

docker build -t hello-mongo:latest .

Förstå Docker-filinnehållet

Strukturen för varje rad i docker-filen är som följer:

INSTRUCTIONS arguments
  • FRÅN:Basbild från vilken vi börjar bygga behållaren
  • KÖR:Detta kommando kör alla instruktioner för att installera MongoDB i basavbildningen.
  • ARG:Lagrar vissa standardvärden för Docker-bygget. Dessa värden är inte tillgängliga för behållaren. Kan åsidosättas under byggprocessen av bilden med argumentet --build-arg.
  • ENV:Dessa värden är tillgängliga under byggfasen såväl som efter lansering av behållaren. Kan åsidosättas genom att skicka argumentet -e till kommandot docker run.
  • VOLYM:Bifogar data/db-volymen till behållaren.
  • WORKDIR:Ställer in arbetskatalogen för att köra alla RUN- eller CMD-kommandon.
  • EXPONERING:Exponerar containerns port för att vara värd för systemet (omvärlden).
  • CMD:Startar mongod-instansen i behållaren.
Severalnines Become a MongoDB DBA - Bringing MongoDB to ProductionLäs om vad du behöver veta för att distribuera, övervaka, hantera och skala MongoDBDownload gratis

Starta MongoDB-behållaren från bilden

Du kan starta MongoDB-behållaren genom att utfärda följande kommando:

docker run --name my-mongo -d -v /tmp/mongodb:/data/db -p 27017:27017 hello-mongo
  • --name:Behållarens namn.
  • -d:Startar behållaren som en bakgrundsprocess (demon). Ange inte detta argument för att köra behållaren som förgrundsprocess.
  • -v:Bifoga /tmp/mongodb-volymen för värdsystemet till /data/db-volymen för behållaren.
  • -p:Mappa värdporten till containerporten.
  • Sista argument är bildens namn/id.

För att kontrollera om behållaren körs eller inte, utfärda följande kommando:

docker ps

Utdata för detta kommando bör se ut så här:

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

Åtkomst till MongoDB från värden

När behållaren väl är igång kan vi komma åt den på samma sätt som när vi kommer åt den fjärranslutna MongoDB-instansen. Du kan använda vilket verktyg som helst som Compass eller Robomongo för att ansluta till den här instansen. För tillfället kommer jag att använda mongo-kommandot för att ansluta. Kör följande kommando i din terminal:

mongo 27017

Det kommer att öppna mongo-skalet där du kan utföra alla mongo-kommandon. Nu ska vi skapa en databas och lägga till lite data i den.

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

Nu för att kontrollera om vår volymmappning är korrekt eller inte, kommer vi att starta om behållaren och kontrollera om den har våra data eller inte.

Docker restart <container_id>

Anslut nu igen till mongo shell och kör detta kommando:

db.myColl.find().pretty()

Du bör se detta resultat:

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

Det betyder att vår behållare behåller databasdata även efter att den har startat om. Detta är möjligt på grund av volymkartläggning. Behållaren kommer att lagra all vår data i katalogen /tmp/mongodb i värdsystemet. Så när du startar om behållaren kommer all data inuti behållaren att raderas och en ny behållare kommer åt data från värdkatalogen tmp/mongodb.

Åtkomst till MongoDB Container Shell

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

Åtkomst till MongoDB Container Logs

$ docker logs <container-name>

Ansluta till MongoDB-behållaren från en annan behållare

Du kan ansluta till MongoDB-behållaren från vilken annan behållare som helst med --link-argumentet som följer följande struktur.

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

Där Alias ​​är ett alias för länknamn. Kör det här kommandot för att länka vår Mongo-behållare med express-mongo-behållare.

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

Detta kommando kommer att dra mongo-express-bilden från dockerhub och starta en ny behållare. Mongo-express är ett administratörsgränssnitt för MongoDB. Gå nu till http://localhost:8081 för att komma åt detta gränssnitt.

Mongo-express Admin UI

Slutsats

I den här artikeln lärde vi oss hur man distribuerar en MongoDB-avbildning från början och hur man skapar en MongoDB-behållare med Docker. Vi gick också igenom några viktiga koncept som volymkartläggning och att ansluta till en MongoDB-behållare från en annan behållare med hjälp av länkar.

Docker förenklar processen med att distribuera flera MongoDB-instanser. Vi kan använda samma MongoDB-bild för att bygga valfritt antal behållare som kan användas för att skapa replikauppsättningar. För att göra denna process ännu smidigare kan vi skriva en YAML-fil (konfigurationsfil) och använda docker-compose-verktyget för att distribuera alla behållare med det enda kommandot.


  1. C# mongodb - hur man uppdaterar kapslade arrayelement

  2. Importera json från fil till mongodb med mongoimport

  3. Är det OK att fråga en MongoDB flera gånger per begäran?

  4. Hur ställer jag in standardvärdet för ett heltal i mongodb?