sql >> Base de Datos >  >> NoSQL >> MongoDB

Implementación de MongoDB mediante Docker

La principal ventaja de usar MongoDB es que es fácil de usar. Uno puede instalar fácilmente MongoDB y comenzar a trabajar en él en minutos. Docker facilita aún más este proceso.

Una cosa interesante de Docker es que, con muy poco esfuerzo y algo de configuración, podemos hacer girar un contenedor y comenzar a trabajar en cualquier tecnología. En este artículo, activaremos un contenedor MongoDB usando Docker y aprenderemos cómo adjuntar el volumen de almacenamiento de un sistema host a un contenedor.

Requisitos previos para implementar MongoDB en Docker

Solo necesitaremos Docker instalado en el sistema para este tutorial.

Crear una imagen de MongoDB

Primero cree una carpeta y cree un archivo con el nombre Dockerfile dentro de esa carpeta:

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

Pegue este contenido en su 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"]

Luego ejecute este comando para crear su propia imagen Docker de MongoDB:

docker build -t hello-mongo:latest .

Comprender el contenido del archivo Docker

La estructura de cada línea en el archivo docker es la siguiente:

INSTRUCTIONS arguments
  • FROM:Imagen base a partir de la cual comenzaremos a construir el contenedor
  • EJECUTAR:este comando ejecuta todas las instrucciones para instalar MongoDB en la imagen base.
  • ARG:almacena algunos valores predeterminados para la compilación de Docker. Estos valores no están disponibles para el contenedor. Se puede anular durante el proceso de construcción de la imagen usando el argumento --build-arg.
  • ENV:estos valores están disponibles durante la fase de compilación y después de lanzar el contenedor. Se puede anular pasando el argumento -e al comando de ejecución de la ventana acoplable.
  • VOLUMEN:adjunta el volumen de datos/base de datos al contenedor.
  • WORKDIR:establece el directorio de trabajo para ejecutar cualquier comando RUN o CMD.
  • EXPOSE:expone el puerto del contenedor para alojar el sistema (mundo exterior).
  • CMD:inicia la instancia de mongod en el contenedor.
Varios nueves Conviértase en un administrador de bases de datos de MongoDB - Llevando MongoDB a la producción Obtenga información sobre lo que necesita saber para implementar, monitorear, administrar y escalar MongoDBDescargar gratis

Inicio del contenedor MongoDB desde la imagen

Puede iniciar el contenedor MongoDB emitiendo el siguiente comando:

docker run --name my-mongo -d -v /tmp/mongodb:/data/db -p 27017:27017 hello-mongo
  • --name:Nombre del contenedor.
  • -d:iniciará el contenedor como un proceso en segundo plano (demonio). No especifique este argumento para ejecutar el contenedor como proceso en primer plano.
  • -v:adjunta el volumen /tmp/mongodb del sistema host al volumen /data/db del contenedor.
  • -p:asigna el puerto del host al puerto del contenedor.
  • El último argumento es el nombre/id de la imagen.

Para verificar si el contenedor se está ejecutando o no, emita el siguiente comando:

docker ps

La salida de este comando debería ser similar a la siguiente:

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

Acceso a MongoDB desde el host

Una vez que el contenedor está en funcionamiento, podemos acceder a él de la misma manera que accedemos a la instancia remota de MongoDB. Puede usar cualquier utilidad como Compass o Robomongo para conectarse a esta instancia. Por ahora, usaré el comando mongo para conectarme. Ejecute el siguiente comando en su terminal:

mongo 27017

Abrirá mongo shell donde puede ejecutar cualquier comando mongo. Ahora crearemos una base de datos y le agregaremos algunos datos.

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

Ahora, para verificar si nuestro mapeo de volumen es correcto o no, reiniciaremos el contenedor y verificaremos si tiene nuestros datos o no.

Docker restart <container_id>

Ahora conéctese nuevamente a Mongo Shell y ejecute este comando:

db.myColl.find().pretty()

Deberías ver este resultado:

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

Esto significa que nuestro contenedor conserva los datos de la base de datos incluso después de reiniciarlo. Esto es posible debido al mapeo de volumen. El contenedor almacenará todos nuestros datos en el directorio /tmp/mongodb en el sistema host. Entonces, cuando reinicie el contenedor, todos los datos dentro del contenedor se borrarán y un nuevo contenedor accederá a los datos del directorio host tmp/mongodb.

Acceder a MongoDB Container Shell

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

Acceder a los registros de contenedores de MongoDB

$ docker logs <container-name>

Conexión al contenedor MongoDB desde otro contenedor

Puede conectarse al contenedor MongoDB desde cualquier otro contenedor usando el argumento --link que sigue la siguiente estructura.

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

Donde Alias ​​es un alias para el nombre del enlace. Ejecute este comando para vincular nuestro contenedor Mongo con el contenedor express-mongo.

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

Este comando extraerá la imagen mongo-express de dockerhub e iniciará un nuevo contenedor. Mongo-express es una interfaz de usuario de administración para MongoDB. Ahora vaya a http://localhost:8081 para acceder a esta interfaz.

Interfaz de usuario de administración de Mongo-express

Conclusión

En este artículo, aprendimos cómo implementar una imagen MongoDB desde cero y cómo crear un contenedor MongoDB usando Docker. También analizamos algunos conceptos importantes como el mapeo de volúmenes y la conexión a un contenedor MongoDB desde otro contenedor mediante enlaces.

Docker facilita el proceso de implementación de múltiples instancias de MongoDB. Podemos usar la misma imagen de MongoDB para crear cualquier cantidad de contenedores que se puedan usar para crear conjuntos de réplicas. Para que este proceso sea aún más sencillo, podemos escribir un archivo YAML (archivo de configuración) y usar la utilidad docker-compose para implementar todos los contenedores con un solo comando.