Docker + MongoDb: restaurar un backup

En el paso anterior vimos como instanciar un contenedor de Docker basado en una imagen que tuviera un MongoDB, y después nos pusimos por línea de comandos a crear una mini base de datos. Esto no esta mal, peeerooo en el mundo real, trabajamos con bases de datos que contienen un montón de información, lo normal es que restauremos un backup y nos pongamos a trabajar usando información cuanto menos parecida a la real.

¿Cómo podemos hacer ésto con Docker?

Manos a la obra

Vamos a asumir que ya tenemos nuestro contenedor de mongo del ejemplo anterior funcionando, podemos comprobarlo ejecutando el siguiente comando:

docker ps

En caso de que no, puedes seguir los primeros pasos del ejemplo anterior.

En nuestra carpeta de trabajo tenemos un backup de una base de datos de ejemplo que te provee mongoDB, puedes obetenerla en este enlace.

Aquí si estuviéramos en windows podríamos poner dir para ver los archivos, y en linux o MacOs tecleamos ls

ls

Aquí podemos ver una carpeta de backup, si entramos podemos ver el backup de varias colecciones

cd backup
ls

volvemos al nivel superior

cd ..

Ahora, tenemos que en nuestro disco duro local esta disponible el backup, pero nuestro contenedor de Docker que corre la imagen de Mongo tiene su propio espacio local, no puede acceder directamente a ese fichero, ¿Qué podemos hacer? Usando un comando de Docker podemos copiar ese fichero desde nuestro local a nuestro contenedor:

Aquí lo que hacemos es decirle que vamos a copiar el contenido de lo que hay en mi carpeta backup en el contenedor, en concreto lo copiaremos a la ruta /opt/app/

Para seguir los ejemplos puedes tanto utilizar el nombre del contenedor que hemos establecido al crearlo my-mongo-db o reemplazarlo por el identificador de contenedor de la instancia de mongo que estés ejecutando.

docker cp backup my-mongo-db:/opt/app

Ahora podemos entrar en nuestro contenedor:

docker exec -it my-mongo-db sh

Si queréis nos podemos ir a la ruta donde esta el backup

cd opt
cd app

Y restauramos el backup

mongorestore --db mymovies .

En este caso estamos esta leyendo el contenido desde la ruta opt/app

Ahora podemos seleccionar la base de datos restaurada

Arrancamos el terminal de mongo

mongo

Seleccionamos la base de datos recien restaurada:

use mymovies

Vemos que colecciones tenemos disponibles

show collections

Y ejecutamos una query contra la colección movies

db.movies.find().pretty()

Y como puedes ver tenemos todos los datos disponibles.

¿Te gusta el mundo Devops?

En Lemoncode impartimos un Bootcamp Devops Online, en él encontrarás todos los recursos necesarios: clases de los mejores profesionales del sector, tutorías en cuanto las necesites y ejercicios para desarrollar lo aprendido en los distintos módulos. Si quieres saber más puedes pinchar aquí para más información sobre este Bootcamp Devops.