Den største fordel ved at bruge MongoDB er, at det er nemt at bruge. Man kan nemt installere MongoDB og begynde at arbejde på det på få minutter. Docker gør denne proces endnu nemmere.
En cool ting ved Docker er, at vi med meget lidt indsats og en vis konfiguration kan skrue en container op og begynde at arbejde på enhver teknologi. I denne artikel vil vi spinne en MongoDB-container op ved hjælp af Docker og lære, hvordan man vedhæfter lagervolumen fra et værtssystem til en container.
Forudsætninger for implementering af MongoDB på Docker
Vi behøver kun Docker installeret i systemet til denne øvelse.
Oprettelse af et MongoDB-billede
Opret først en mappe og opret en fil med navnet Dockerfile inde i den mappe:
$ mkdir mongo-with-docker$ cd mongo-with-docker$ vi Dockerfile
Indsæt dette indhold i din Dockerfile:
FRA debian:jessie-slimRUN 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 --eksporter $GPG_KEYS> /etc/apt/trusted.gpg.d/mongodb.gpgACK_GO_DAN {MONGO_PACKAGE} MONGO_REPO=${MONGO_REPO}ENV MONGO_MAJOR 3.4ENV MONGO_VERSION 3.4.18RUN echo "deb http://$MONGO_REPO/apt/debian jessie/${MONGO_PACKAGE%-unstable}/$MONGO_MAJOR" | tee "/etc/apt/sources.list.d/${MONGO_PACKAGE%-unstable}.list"RUN echo "/etc/apt/sources.list.d/${MONGO_PACKAGE%-unstable}.list"RUN apt- få updateRUN apt-get install -y ${MONGO_PACKAGE}=$MONGO_VERSIONVOLUME ["/data/db"]WORKDIR /dataEXPOSE 27017CMD ["mongod", "--smallfiles"]
Kør derefter denne kommando for at bygge dit eget MongoDB Docker-image:
docker build -t hello-mongo:nyeste .
Forstå Docker-filindholdet
Strukturen af hver linje i docker-filen er som følger:
INSTRUCTIONS-argumenter
- FRA:Grundbilledet, hvorfra vi begynder at bygge containeren
- RUN:Denne kommando udfører alle instruktioner for at installere MongoDB i basisbilledet.
- ARG:Gemmer nogle standardværdier for Docker-builden. Disse værdier er ikke tilgængelige for containeren. Kan tilsidesættes under byggeprocessen af billedet ved hjælp af --build-arg-argumentet.
- ENV:Disse værdier er tilgængelige under byggefasen såvel som efter lancering af containeren. Kan tilsidesættes ved at sende -e-argumentet til docker run-kommandoen.
- VOLUME:Vedhæfter data/db-volumen til container.
- WORKDIR:Indstiller arbejdsbiblioteket til at udføre alle RUN- eller CMD-kommandoer.
- EXPOSE:Udsætter containerens port for at være vært for systemet (omverdenen).
- CMD:Starter mongod-forekomsten i containeren.
Start af MongoDB-beholderen fra billedet
Du kan starte MongoDB-beholderen ved at udstede følgende kommando:
docker run --name my-mongo -d -v /tmp/mongodb:/data/db -p 27017:27017 hello-mongo
- --name:Navnet på beholderen.
- -d:Starter beholderen som en baggrundsproces (dæmon). Angiv ikke dette argument for at køre containeren som forgrundsproces.
- -v:Vedhæft /tmp/mongodb volumen af værtssystemet til /data/db volumen af containeren.
- -p:Tilknyt værtsporten til containerporten.
- Sidste argument er navnet/id'et på billedet.
For at kontrollere, om containeren kører eller ej, skal du udføre følgende kommando:
docker ps
Output af denne kommando skal se sådan ud:
CONTAINER ID BILLEDEKOMMANDO OPRETTET STATUSPORTE NAVNSa7e04bae0c53 hello-mongo "mongod --smallfiles" 7 sekunder siden Op 6 sekunder 0.0.0.0:27017->27017/tcp my-mongo
Adgang til MongoDB fra værten
Når containeren er oppe at køre, kan vi få adgang til den på samme måde som at få adgang til den eksterne MongoDB-instans. Du kan bruge ethvert værktøj som Compass eller Robomongo til at oprette forbindelse til denne instans. Indtil videre bruger jeg mongo-kommandoen til at oprette forbindelse. Kør følgende kommando i din terminal:
mongo 27017
Det åbner mongo-shell, hvor du kan udføre alle mongo-kommandoer. Nu opretter vi én database og tilføjer nogle data i den.
brug mydbdb.myColl.insert({“name”:“severalnines”})quit()
For nu at kontrollere, om vores volumenmapping er korrekt eller ej, genstarter vi containeren og kontrollerer, om den har vores data eller ej.
Docker genstart
Tilslut nu igen til mongo shell og kør denne kommando:
db.myColl.find().pretty()
Du bør se dette resultat:
{ "_id" :ObjectId("5be7e05d20aab8d0622adf46"), "name" :"severalnines" }
Dette betyder, at vores container bevarer databasedataene selv efter genstart. Dette er muligt på grund af volumenmapping. Containeren vil gemme alle vores data i /tmp/mongodb bibliotek i værtssystemet. Så når du genstarter containeren, vil alle data inde i containeren blive slettet, og en ny container vil få adgang til dataene fra værtsmappen tmp/mongodb.
Adgang til MongoDB Container Shell
$ docker exec -it /bin/bash
Adgang til MongoDB-beholderlogfiler
$ docker logs
Tilslutning til MongoDB-beholderen fra en anden beholder
Du kan oprette forbindelse til MongoDB-containeren fra enhver anden container ved hjælp af --link-argumentet, som følger følgende struktur.
--link :
Hvor Alias er et alias for linknavn. Kør denne kommando for at forbinde vores Mongo-beholder med express-mongo-beholder.
docker run --link my-mongo:mongo -p 8081:8081 mongo-express
Denne kommando trækker mongo-express-billedet fra dockerhub og starter en ny container. Mongo-express er en admin UI til MongoDB. Gå nu til http://localhost:8081 for at få adgang til denne grænseflade.
Mongo-express Admin UI Konklusion
I denne artikel lærte vi, hvordan man implementerer et MongoDB-image fra bunden, og hvordan man opretter en MongoDB-container ved hjælp af Docker. Vi gennemgik også nogle vigtige koncepter som volumenkortlægning og tilslutning til en MongoDB-container fra en anden container ved hjælp af links.
Docker letter processen med at implementere flere MongoDB-instanser. Vi kan bruge det samme MongoDB-billede til at bygge et hvilket som helst antal containere, som kan bruges til at oprette replikasæt. For at gøre denne proces endnu mere smidig kan vi skrive en YAML-fil (konfigurationsfil) og bruge docker-compose-værktøjet til at implementere alle containerne med den enkelte kommando.