TL;DR
docker run -d -p 27017:27017--name=mydb mongo:4.2
docker exec -it mydb bash
mongo#conectaramongoshelluseplatzi # crearbasededatosllamadaplatzidb.courses.insertOne({ name: "Introduction to MongoDB" }); # insertarundocumentoalacoleccioncoursesdb.courses.find() # Obtenertodoslosdocumentosdelacoleccioncourses
Instalar mongo no es un proceso realmente complicado, en windows puedes descargar un instalador y hacer el proceso clásico de “siguiente, siguiente…” mientras que en Mac/Linux usando brew y unos cuantos apt-get ya tienes el trabajo listo. Pero en este mundo moderno no hay razón para seguir manteniendo distintas formas de instalar un software cuando disponemos de tecnologías como docker.
Voy a hacer este proceso usando docker 19.x, pero debería funcionar con cualquier versión anterior ya que son comandos del core de docker que dificil sean modificados en posteriores versiones.
Lo primero es saber como se llama la imagen que nos genera un contenedor basado en mongo db, para eso podemos ir al docker hub y buscar mongodb en el buscador y listo, ya tenemos la página de la imagen oficial de mongodb en docker.
En la página podemos ver que el nombre de la imagen es mongo (gracias capitán obvio), entonces vamos a instalar usando el comando run de docker. En una terminal ejecuta lo lo siguiente:
docker run -d -p 27017:27017--name mydatabase mongo:4.2
El comando de arriba hace lo siguiente:
d: Este parámetro permite que ejecutemos el proceso en background así la terminal no nos queda ocupada.
-p 27017:27017: Acá le decimos a docker que las conexiones del puerto 27017 del contenedor se redireccionen al 27017 de nuestra máquina host (o sea nuestra computadora).
–name mydatabase: Con esto indicamos el nombre de nuestro contenedor, yo use mydatabase porque estoy practicando mi inglés, pero pueden usar el nombre que mejor los represente.
mongo:4.2: Y por último y no menos importante - por el contrario es la parte más importante - el nombre de la imagen que queremos usar más la versión separada por dos puntos. Uso la versión 4.2 porque es la actual al momento de escribir este post.
Una vez hecho eso ya tenemos nuestro contenedor listo para jugar con mongo.
Para crear una base de datos primero necesitamos conectarnos al contenedor que acabamos de generar, eso lo podemos lograr usando el comando exec de docker:
docker exec -it mydatabase bash
-it: Es para indicar que queremos ejecutar de manera interactiva y que nuestra terminal tome el control de la instrucción que vamos a pasarle al final.
mydatabase: es el nombre del contenedor sobre el cual vamos a trabajar
bash: Este es el comando que queremos ejecutar, es decir queremos acceder al shell del contenedor.
Una vez hecho esto, ya estamos dentro del contenedor de mongo, pero para poder crear la base de datos necesitamos ingresar al shell de mongo, fácilmente lo podemos realizar escribiendo mongo en la terminal
mongo
Nos aparecen muchos logs, pero vemos que ya estamos en el shell de mongo
Una vez dentro podemos crear la base de datos usando la instrucción use
use platzi # creamos una base de datos llamada platzi
Ahora estamos dentro de la base de datos, creemos una colección llamada courses y un documento
db.courses.insertOne({ name: 'Curso de MongoDB' })
Y para comprobar que mongo no nos da por nuestro lado y realmente creó el documento verificamos nuestra colección usando el método find
db.courses.find()
Conclusiones
Usar mongo con docker es sencillo y nos da un proceso único de instalación para cualquier plataforma (windows, mac, linux, etc).
Podemos trabajar con distintas versiones de mongo, simplemente indicamos el número de versión al crear el contenedor.
La imagen mongo pertenece al selecto y elegante grupo de Docker Official Images, lo cual significa que tiene algunas ventajas frente a otras imágenes como: documentación extensa en como usar la imagen, ante un fallo de seguridad la imagen será actualizada lo más rápido posible y muchas otros beneficios.
Saludos!
Como se podría configurar para que mongo acepte transacciones?
Gracias! Esto fue super útil
que pasa si queremos restaurar la basa de datos
Si presentan fallas ejecutar pueden usar:
winpty docker exec -it mydatabase bash