MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Distribuzione di MongoDB tramite Docker

Il vantaggio principale dell'utilizzo di MongoDB è che è facile da usare. Si può facilmente installare MongoDB e iniziare a lavorarci in pochi minuti. Docker rende questo processo ancora più semplice.

Una cosa interessante di Docker è che, con uno sforzo minimo e un po' di configurazione, possiamo far girare un container e iniziare a lavorare su qualsiasi tecnologia. In questo articolo, creeremo un container MongoDB utilizzando Docker e impareremo come collegare il volume di archiviazione da un sistema host a un container.

Prerequisiti per la distribuzione di MongoDB su Docker

Avremo solo bisogno di Docker installato nel sistema per questo tutorial.

Creazione di un'immagine MongoDB

Per prima cosa crea una cartella e crea un file con il nome Dockerfile all'interno di quella cartella:

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

Incolla questo contenuto nel tuo 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"]

Quindi esegui questo comando per creare la tua immagine Docker MongoDB:

docker build -t hello-mongo:latest .

Comprendere il contenuto del file Docker

La struttura di ogni riga nel file Docker è la seguente:

INSTRUCTIONS arguments
  • DA:immagine di base da cui inizieremo a costruire il container
  • Esegui:questo comando esegue tutte le istruzioni per installare MongoDB nell'immagine di base.
  • ARG:memorizza alcuni valori predefiniti per la build Docker. Questi valori non sono disponibili per il contenitore. Può essere sovrascritto durante il processo di creazione dell'immagine usando l'argomento --build-arg.
  • ENV:questi valori sono disponibili durante la fase di compilazione e dopo l'avvio del container. Può essere sovrascritto passando l'argomento -e al comando docker run.
  • VOLUME:allega il volume di dati/db al contenitore.
  • WORKDIR:imposta la directory di lavoro per eseguire qualsiasi comando RUN o CMD.
  • ESPOSIZIONE:espone la porta del container per ospitare il sistema (mondo esterno).
  • CMD:avvia l'istanza mongod nel contenitore.
Diversinines Diventa un DBA MongoDB - Portare MongoDB in produzioneScopri ciò che devi sapere per distribuire, monitorare, gestire e ridimensionare MongoDBScarica gratuitamente

Avvio del contenitore MongoDB dall'immagine

Puoi avviare il contenitore MongoDB eseguendo il comando seguente:

docker run --name my-mongo -d -v /tmp/mongodb:/data/db -p 27017:27017 hello-mongo
  • --name:nome del contenitore.
  • -d:avvierà il contenitore come processo in background (daemon). Non specificare questo argomento per eseguire il contenitore come processo in primo piano.
  • -v:collega il volume /tmp/mongodb del sistema host al volume /data/db del contenitore.
  • -p:mappa la porta dell'host alla porta del contenitore.
  • L'ultimo argomento è il nome/id dell'immagine.

Per verificare se il container è in esecuzione o meno, immetti il ​​seguente comando:

docker ps

L'output di questo comando dovrebbe essere simile al seguente:

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

Accesso a MongoDB dall'host

Una volta che il container è attivo e funzionante, possiamo accedervi allo stesso modo in cui accediamo all'istanza MongoDB remota. Puoi utilizzare qualsiasi utilità come Compass o Robomongo per connetterti a questa istanza. Per ora, userò il comando mongo per connettermi. Esegui il seguente comando nel tuo terminale:

mongo 27017

Si aprirà mongo shell in cui puoi eseguire qualsiasi comando mongo. Ora creeremo un database e vi aggiungeremo alcuni dati.

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

Ora per verificare se la nostra mappatura del volume è corretta o meno, riavvieremo il contenitore e verificheremo se contiene i nostri dati o meno.

Docker restart <container_id>

Ora connettiti di nuovo a mongo shell ed esegui questo comando:

db.myColl.find().pretty()

Dovresti vedere questo risultato:

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

Ciò significa che il nostro container sta conservando i dati del database anche dopo averlo riavviato. Ciò è possibile grazie alla mappatura del volume. Il contenitore memorizzerà tutti i nostri dati nella directory /tmp/mongodb nel sistema host. Quindi, quando riavvii il contenitore, tutti i dati all'interno del contenitore verranno cancellati e un nuovo contenitore accederà ai dati dalla directory host tmp/mongodb.

Accesso a MongoDB Container Shell

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

Accesso ai log del contenitore MongoDB

$ docker logs <container-name>

Connessione al contenitore MongoDB da un altro contenitore

Puoi connetterti al contenitore MongoDB da qualsiasi altro contenitore usando l'argomento --link che segue la struttura seguente.

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

Dove Alias ​​è un alias per il nome del collegamento. Esegui questo comando per collegare il nostro container Mongo con il container express-mongo.

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

Questo comando estrarrà l'immagine mongo-express da dockerhub e avvierà un nuovo contenitore. Mongo-express è un'interfaccia utente di amministrazione per MongoDB. Ora vai su http://localhost:8081 per accedere a questa interfaccia.

Interfaccia utente di amministrazione Mongo-express

Conclusione

In questo articolo, abbiamo imparato come distribuire un'immagine MongoDB da zero e come creare un contenitore MongoDB utilizzando Docker. Abbiamo anche esaminato alcuni concetti importanti come la mappatura del volume e la connessione a un container MongoDB da un altro container tramite i collegamenti.

Docker semplifica il processo di distribuzione di più istanze MongoDB. Possiamo utilizzare la stessa immagine MongoDB per creare un numero qualsiasi di contenitori che possono essere utilizzati per creare set di repliche. Per rendere questo processo ancora più agevole, possiamo scrivere un file YAML (file di configurazione) e utilizzare l'utilità docker-compose per distribuire tutti i container con un unico comando.