MongoDB es una base de datos NoSQL basada en documentos que es buena para el almacenamiento de datos de gran volumen. En lugar de utilizar tablas y filas como las bases de datos relacionales tradicionales, MongoDB hace uso de colecciones y documentos. Los documentos constan de pares clave-valor que son la unidad básica de datos en MongoDB. En este tutorial, usaremos Docker para lanzar un contenedor que ejecuta MongoDB. Una vez que está funcionando en un contenedor, podemos conectarnos a él en un shell y probar algunos de los comandos comunes de Mongo.

Inicie MongoDB en Docker

Con Docker instalado y en ejecución, la activación de un contenedor Mongo se realiza usando el comando aquí.

vegibit @ ThinkPad MINGW64 ~
$ docker ejecutar --name mongo -d mongo
No se puede encontrar la imagen 'mongo: última' localmente
último: Extrayendo de la biblioteca / mongo
171857c49d0f: Tirando de la capa fs
419640447d26: Tirando de la capa fs
61e52f862619: Tirando de la capa fs
892787ca4521: Tirando de la capa fs
06e2d54757a5: Tirando de la capa fs
e2f7d90822f3: Tirando de la capa fs
f518d3776320: Tirando de la capa fs
feb8e9d469d8: Tirando de la capa fs
69705b632494: Tirando de la capa fs
c7daea26376d: Tirando de la capa fs
13d1f9e1fc77: Tirando de la capa fs
f87e65fe7ffd: Tirando de la capa fs
feb8e9d469d8: Esperando
e2f7d90822f3: Esperando
c7daea26376d: Esperando
13d1f9e1fc77: Esperando
69705b632494: Esperando
f518d3776320: Esperando
892787ca4521: Esperando
f87e65fe7ffd: Esperando
06e2d54757a5: Esperando
419640447d26: Verificación de suma de comprobación
419640447d26: Descarga completa
61e52f862619: verificación de suma de comprobación
61e52f862619: Descarga completa
892787ca4521: verificación de suma de comprobación
892787ca4521: Descarga completa
e2f7d90822f3: Verificación de suma de comprobación
e2f7d90822f3: Descarga completa
06e2d54757a5: Verificación de suma de comprobación
06e2d54757a5: Descarga completa
171857c49d0f: Descarga completa
f518d3776320: Verificación de suma de comprobación
f518d3776320: Descarga completa
171857c49d0f: Extracción completa
419640447d26: Tire completo
61e52f862619: Tire completo
892787ca4521: Tire completo
06e2d54757a5: Tire completo
e2f7d90822f3: Pull complete
f518d3776320: Extracción completa
69705b632494: Verificación de suma de comprobación
69705b632494: Descarga completa
feb8e9d469d8: Verificación de la suma de comprobación
feb8e9d469d8: Descarga completa
feb8e9d469d8: Pull complete
69705b632494: Tire completo
13d1f9e1fc77: Verificación de suma de comprobación
13d1f9e1fc77: Descarga completa
f87e65fe7ffd: Verificación de suma de comprobación
f87e65fe7ffd: Descarga completa
c7daea26376d: Verificación de suma de comprobación
c7daea26376d: Descarga completa
c7daea26376d: extracción completa
13d1f9e1fc77: Tire completo
f87e65fe7ffd: Extracción completa
Resumen: sha256: a4448eb5f6e6097353d0ab97eb50aeb0238bb4e60c37e401920d3c2c4fc73eb9
Estado: imagen más reciente descargada para mongo: última
08190185820c9b1d513375f9ff011e4042fae95487fd3bcbc3e9c18b5048dc99

¿Qué sucedió cuando corrimos? Docker run –name mongo -d mongo

Una vez que ejecutamos el comando anterior, vimos bastante salida en la terminal. Entonces, ¿qué está pasando exactamente aquí? Estos pasos dan un breve resumen.

  1. Docker busca la imagen de mongo localmente
  2. Docker no encuentra la imagen de mongo localmente, por lo que luego verifica hub.docker.com
  3. La imagen se encuentra y descarga cada capa.
  4. Se crea un nuevo contenedor basado en la imagen de mongo
  5. El contenedor se ejecuta y se puede ver a través de cli o Docker Desktop

Podemos ver nuestro nuevo contenedor Mongo ejecutándose con el comando docker container ls .

vegibit @ ThinkPad MINGW64 ~
$ contenedor docker ls
ID DE CONTENEDOR COMANDO DE IMAGEN ESTADO CREADO NOMBRES DE PUERTOS
08190185820c mongo "docker-entrypoint.s…" Hace 7 minutos Hasta 7 minutos 27017 / tcp mongo

Con docker container top mongo podemos ver el proceso en ejecución. Un contenedor es solo un proceso que se limita a los recursos a los que puede acceder. No son máquinas virtuales.

vegibit @ ThinkPad MINGW64 ~
$ docker contenedor superior mongo
COMANDO DE TIEMPO DE USUARIO PID
986999 0:05 mongod --bind_ip_all

Usar Docker Desktop también es una excelente manera de poder ver y administrar cualquier contenedor en el sistema.
contenedor mongo ejecutándose en docker

Docker Connect To Container cli

El docker execcomando ejecuta un nuevo comando en un contenedor en ejecución. Podemos usar esto para ejecutar el comando ps aux dentro del contenedor para ver los procesos en ejecución.

vegibit @ ThinkPad MINGW64 ~
$ docker exec mongo ps aux
USUARIO PID% CPU% MEM VSZ RSS TTY ESTADO COMANDO HORA DE INICIO
mongodb 1 1,1 2,1 1584916 136412? Ssl 15:20 1:00 mongod --bind_ip_all
raíz 76 0.0 0.0 34404 2804? Rs 16:50 0:00 ps aux

Detener el contenedor Mongo

vegibit @ ThinkPad MINGW64 ~
 $ docker stop mongo
mongo

vegibit @ ThinkPad MINGW64 ~
$ docker ps
ID DE CONTENEDOR COMANDO DE IMAGEN ESTADO CREADO NOMBRES DE PUERTOS

vegibit @ ThinkPad MINGW64 ~
$ docker top mongo
Respuesta de error del daemon: El contenedor 08190185820c9b1d513375f9ff011e4042fae95487fd3bcbc3e9c18b5048dc99 no se está ejecutando

vegibit @ ThinkPad MINGW64 ~
$ docker exec mongo ps aux
Respuesta de error del daemon: El contenedor 08190185820c9b1d513375f9ff011e4042fae95487fd3bcbc3e9c18b5048dc99 no se está ejecutando

Reinicie el contenedor Mongo

vegibit @ ThinkPad MINGW64 ~
 $ docker start mongo
mongo

vegibit @ ThinkPad MINGW64 ~
$ lista de contenedores docker
ID DE CONTENEDOR COMANDO DE IMAGEN ESTADO CREADO NOMBRES DE PUERTOS
08190185820c mongo "docker-entrypoint.s…" Hace 2 horas Hasta 19 segundos 27017 / tcp mongo

vegibit @ ThinkPad MINGW64 ~
$ docker mongo top
docker: 'mongo' no es un comando de docker.
Ver 'docker --help'

vegibit @ ThinkPad MINGW64 ~
$ docker top mongo
COMANDO DE TIEMPO DE USUARIO PID
1253999 0:01 mongod --bind_ip_all

Conéctese al contenedor Shell Of Mongo

Vale genial. Tenemos un contenedor MongoDB en ejecución, pero ¿cómo podemos interactuar con él? Para hacer esto, podemos usar el comando docker execHay algunas partes del comando, así que revisemos lo que hace cada parte.

  1. docker exec ejecuta un nuevo comando en un contenedor en ejecución
  2. -it -i = # stdin, -t = # interactivo
  3. mongo el nombre del contenedor para ejecutar el comando en
  4. / bin / sh el comando a ejecutar, en este caso lanza el shell
docker exec -it mongo / bin / sh 
#

El hashtag que ve es el nuevo mensaje dentro del contenedor. Desde allí, podemos lanzar el shell interactivo de mongo:

# mongo
MongoDB shell versión v4.4.1
conectándose a: mongodb: //127.0.0.1: 27017 /? compressors = disabled & gssapiServiceName = mongodb
Sesión implícita: sesión {"id": UUID ("d882e577-b5a5-438d-8a35-4a2e0002bf50")}
Versión del servidor MongoDB: 4.4.1
---
El servidor generó estas advertencias de inicio al arrancar:
        2020-09-30T17: 50: 54.021 + 00: 00: Se recomienda encarecidamente utilizar el sistema de archivos XFS con el motor de almacenamiento WiredTiger. Ver http://dochub.mongodb.org/core/prodnotes-filesystem
        2020-09-30T17: 50: 54.720 + 00: 00: El control de acceso no está habilitado para la base de datos. El acceso de lectura y escritura a los datos y la configuración no está restringido
        2020-09-30T17: 50: 54.720 + 00: 00: / sys / kernel / mm / transparent_hugepage / enabled es 'siempre'. Sugerimos configurarlo en 'nunca'
---
---
        Habilite el servicio de monitoreo gratuito basado en la nube de MongoDB, que luego recibirá y mostrará
        métricas sobre su implementación (utilización del disco, CPU, estadísticas de operación, etc.).

        Los datos de monitoreo estarán disponibles en un sitio web de MongoDB con una URL única accesible para usted
        y cualquier persona con quien comparta la URL. MongoDB puede usar esta información para hacer productos
        mejoras y para sugerirle productos y opciones de implementación de MongoDB.

        Para habilitar el monitoreo gratuito, ejecute el siguiente comando: db.enableFreeMonitoring ()
        Para deshabilitar permanentemente este recordatorio, ejecute el siguiente comando: db.disableFreeMonitoring ()
---
>

Podemos probar varios comandos de Mongo en el contenedor para ver cómo funciona.

> mostrar dbs
administración 0.000GB
config 0.000GB
local 0.000GB
> utilizar myNewDataBase
cambió a db myNewDataBase
> db
myNewDataBase
> db.dropDatabase ()
{"ok": 1}
> db.createCollection ("Contenedor");
{"ok": 1}
> mostrar colecciones
Envase
> db.Container.drop ()
cierto
> mostrar colecciones
> db.createCollection ("Computadora")
{"ok": 1}
> db.Computer.insert ({_id: 1, elemento: "Macbook", cantidad: 1})
WriteResult ({"nInserted": 1})
> mostrar colecciones
Computadora
> db.Computer.count ()
1
> db.Computer.find ()
{"_id": 1, "item": "Macbook", "qty": 1}
>

Limpiar

Bueno eso fue divertido. Limpiemos nuestro entorno de ventana acoplable ahora deteniendo el contenedor, eliminándolo y enumerando todos los contenedores para asegurarnos de que se haya ido.

$   docker container stop mongo
mongo
$   contenedor docker rm mongo
mongo
$   docker container ls -a 
ID DE CONTENEDOR IMAGEN COMANDO ESTADO CREADO PUERTOS NOMBRES


Resumen

La conclusión es que una vez que tenemos Docker configurado y en funcionamiento, es bastante fácil iniciar cualquier tipo de contenedor que desee. En este caso, usamos MongoDB. Con la misma facilidad podría haber sido MySQL, Oracle, Java, Postgres, Redis, Ubuntu o lo que queramos. Otra cosa para recordar es que un contenedor es solo un proceso, no es una máquina virtual. Los contenedores son mucho más livianos que una máquina virtual completa y son fáciles de poner en marcha, probar y destruir muy rápidamente.