Cómo desplegar un contenedor Docker con el motor de base de datos NoSQL MongoDB con persistencia y acceso externo. El contenedor quedará iniciado y los datos que se inserten/modifiquen en MongoDB quedarán almacenados y persistentes. Se iniciará el contenedor con acceso externo a MongoDB a través de un puerto. Desplegamos el contenedor con Docker Compose, estableciendo todos los parámetros de acceso (incluida la autenticación con usuario y contraseña).

¿Qué es MongoDB?

MongoDB es un sistema de base de datos No-SQL y no relacional, orientado a documentos. MongoDB almacena los datos en estructuras BSON (una especificación similar a JSON). Permite esquemas dinámicos, pudiendo crear las mismas estructuras de documentos con diferentes «campos».

En MongoDB no se guardan los datos en tablas, campos y registros, como en las bases de datos relacionales. MongoDB guarda estructuras de datos BSON, como hemos indicando anteriormente.

Hasta hace un tiempo, ni siquiera incluía opción de gestión de transacciones y, como hemos indicado, no admite sentencias SQL. En su lugar, MongoDB soporta la búsqueda por campos, consultas de rangos y expresiones regulares. Las consultas pueden devolver un campo específico del documento. También se pueden usar funciones definidas por el usuario.

Requisitos para desplegar contenedor Docker con MongoDB

Únicamente necesitaremos un equipo con Docker Desktop, bien en Windows, como indicamos en este tutorial:

O bien en Linux, como indicamos en este otro tutorial:

Desplegar contenedor Docker con MongoDB por comando

Una forma rápida de desplegar un contenedor Docker con MongoDB, persistente y accesible externamente a través del puerto 27017, es mediante la ejecución del siguiente comando (sea en Linux o en Windows, el comando es el mismo):

Se pueden hacer varias personalizaciones, como por ejemplo establecer el tipo de volumen, si lo queremos en el propio contenedor o en el equipo anfitrión, el puerto de conexión externa, el tipo de arranque en caso de parada de Docker, incluso se podría establecer el método de autenticación, usuario y contraseña (en este caso no lo hemos hecho). Por ello, hay que tener en cuenta que el comando anterior desplegará y ejecutará una imagen Docker con MongoDB, sin autenticación. Es decir, la BD será inicialmente accesible desde cualquier equipo de la red sin usuario y contraseña. Esto sirve para un despliegue rápido pero, por seguridad, en entornos de producción, hay que establecer el mecanismo de autenticación apropiado.

Si ejecutamos el siguiente comando nos mostrará la imagen Docker de MongoDB desplegada:

Desplegar contenedor Docker con MongoDB y Docker Compose

Otra forma, más eficiente, de desplegar un contenedor Docker con MongoDB es usando Docker Compose. Estableceremos usuario y contraseña de acceso a la BD, puerto externo de conexión, volumen para persistencia, etc. en el fichero compose.yml. Para ello, copiaremos el siguiente contenido y lo pegaremos en un fichero que llamaremos «compose.yml»:

Guardaremos el contenido anterior en un fichero, en la misma carpeta donde vayamos a ejecutar el comando Docker de despliegue, en este caso en C:\Users\alonso\docker\mongodb.

Abriremos una ventana de MS-DOS en Windows o shell de comandos en Linux y accederemos a la carpeta donde hayamos guardado el fichero compose.yml. Ejecutaremos el siguiente comando para que Docker lea el fichero compose.yml y ejecute todas sus acciones:

El proceso concluirá con la salida:

Y habrá creado y desplegado, de forma automática, un contenedor llamado mongodb:

Una imagen llamada mongo :

Y un volumen llamado mongodb_volmongo.

Acceso a MongoDB de Docker con MongoDB Compass

Para comprobar que el servidor de MongoDB está disponible, descargaremos e instalaremos cualquier cliente MongoDB. El cliente oficial, gratuito y disponible en la web de MongoDB es MongoDB Compass. Al abrirlo podremos crear una nueva conexión, indicando la IP o nombre DNS del equipo con docker y MongoDB. En este caso ejecutaremos MongoDB Compass en el mismo equipo donde tenemos Docker, por lo que en la URI introduciremos:

mongodb://localhost:27017

En caso de no haber establecido método de autenticación, ni usuario y contraseña, pulsaremos en «Connect» para conectar a MongoDB, sin usuario ni contraseña:

En el caso de haber establecido usuario y contraseña, como hemos indicado aquí, en la conexión de MongoDB Compass deberemos pulsar en «Advanced Connections Options» e introducir usuario y contraseña:

Y ya tendremos acceso al servidor de base de datos noSQL MongoDB. Podremos, por ejemplo, crear una nueva base de datos:

Y podemos insertar algún documento en la base de datos MongoDB creada, para comprobar la persistencia en el contenedor Docker:

Si reiniciamos Docker o bien reiniciamos el equipo completo anfitrión, al iniciar nuevamente Docker se debe iniciar el contenedor MongoDB y debe seguir manteniendo sus datos:

La base de datos y el documento seguirá apareciendo, dado que ha quedado almacenado en el volumen correspondiente: