Para esta clase.
Les voy a pedir que busquen Mongo en Docker Hub y tomen el que dice Mongo Express esta imagen oficial.
Hagamos clic.
A pesar de que esto utiliza una versión de Bootstrap, es decir, de estilos bastante vieja.
De igual manera es muy utilizado, no ocupa una interfaz visual súper tremenda y elaborada para trabajar
aquí.
O sea, funciona bastante bien para lo que nosotros creemos.
Entonces, Monkey Express es un servidor basado en Node y nos va a permitir a nosotros hacer interacciones
con la base de datos.
Entonces vamos a utilizarla.
No le recomiendo que siempre, o sea, que no hagan el Docker Pull Mount Express.
No tratemos de no usar esto a menos de que ustedes estén conscientes que siempre van a trabajar con
la versión latest.
Y si nosotros venimos aquí en nuestro Docker Files y simplemente ponemos el no hubiéramos puesto esto?
Descarga la versión seis, la versión siete versión ocho.
Y esto puede causar ciertos problemas de incompatibilidad porque puede ser que la versión siete ahora
tenga otro nombre de variable de entorno o que la versión ocho ya no esté esperando que el comportamiento
sea de tal manera o que la versión nueve grabe la data de diferente forma y no es compatible la data
que ya teníamos en nuestro volumen.
Entonces, hay muchas razones por las cuales se aconseja de que ustedes vayan trabajando con tags específicos.
Necesito hacer un upgrade.
Básicamente solo sería poner el siete y probamos.
Pero vamos, si todo funciona, entonces ya podríamos hacer la actualización fácilmente, pero siempre
trabajemos con algún tag.
Ok?
Vamos a crearnos otro servicio.
Presionamos Enter al mismo nivel de DB.
Voy a ponerle nombre Mongo Express y voy a hacer una separación para que lo miremos claramente.
Este es el primer servicio.
Es más, van a ver que en el llámelo el archivo, ustedes van a poder contactarlo y fácilmente van a
saber si todo eso de todo este código depende de ese servicio.
Ok.
En Mongo Express yo sé que esto tiene que depender de la base de datos.
Entonces depend on service name.
Más de uno va a decir Ah, bueno, este es el service Name, no?
Este es el nombre del contenedor.
Este es el nombre del servicio.
Entonces depende de la base de datos.
Ok.
Enter y con Shift para irme para atrás.
La imagen que vamos a utilizar.
Cuál imagen es?
Entonces regresemos aquí.
Vamos a los tags.
No usemos el dólares, búsquense una que sea estable.
En este caso yo voy a utilizar y les recomiendo que usemos la misma que es el 1,00 al cuatro.
Voy a copiarla, voy a regresar acá y la imagen es de Mundo Express.
Dos puntos y el tag es uno punto 0.0 menos al cuatro.
Y ustedes pueden usar exactamente esta misma versión que yo.
Recuerden, el nombre se encuentra acá, que también ustedes podrían venir y copiar esto, solo que
aquí también copian la palabra del pool y todo lo demás, pero podrían borrar todo lo demás y simplemente
cortarlo y pegarlo por acá.
Y es exactamente lo mismo.
Bastante útil, no?
Ok, ya tenemos eso.
Pero hay otro punto.
Yo sé que eso necesitaría varias variables de entorno y adicionalmente sé que tengo que exponer algún
puerto, pero si nos vamos a la documentación, al menos en este momento, la documentación es bastante
escueta, podríamos decir.
Bueno, ustedes, la de Mono Express es medio escueta en cuanto a lo que yo tengo que utilizar, pero
bueno, más o menos, porque la verdad es que está todo en la parte de la configuración.
Puede ser mejor.
Es lo que quiero decir.
Yo no me quejo porque tampoco es que mis documentaciones son la gran cosa, pero van a ver que aquí
tenemos el comando para ejecutarlo.
Está haciendo la red una variable de entorno configuración de Mongo, algún.
Esto es un algún URL mongo va a ser la publicación del puerto 80, 80, 81 de mi equipo con el puerto
81 80 81 del contenedor Express, algo que es interesante que ustedes ya lo he hecho varias veces.
Cuando analizamos cómo fue construida esta imagen, que ya vamos a hacer esto muy pronto, cuando hagamos
nuestro nuestras imágenes personalizadas, ustedes pueden analizar lo que está aquí el comando, una
variable de entorno, el entry point, el comando que se está ejecutando.
Aquí hay un esposo, este bueno, este es el puerto 80 81 que se está exponiendo por aquí.
Ya sé que eso se está utilizando y ustedes pueden ojear estos comandos o este o estos diferentes layers,
o estos son los comandos que se usaron para crear el layer que vamos a hablar.
Todo eso muy pronto y rápidamente.
Ustedes pueden identificar el puerto en el caso de que no esté correctamente documentado.
Entonces, regresando aquí, podemos ver que tenemos una serie de variables de entorno.
En las cuales podríamos definir para.
Para la.
Aquí está Express web username y express web password.
En el caso que ustedes quieran utilizar esto de manera autenticada, eso está bien.
Por defecto está en True Mongo, db, admin, username, mongo, db, admin, password, el puerto de
la base de datos, luego el modo DB Server, que esto sería el nombre del contenedor separado por comas
en el caso que tengamos réplicas.
En fin, hay varias cosas aquí que nosotros podemos configurar.
Entonces voy a venir aquí y empezar con las variables de ambiente, entonces escribir environment y
si no les apareciera debería aparecer aquí Environment dos puntos, Enter debería aparecer.
A veces aparecen, a veces no.
En fin, no importa.
Lo importante aquí es la tabulación y voy a buscar para configurar el usuario administrador de la base
de datos.
Entonces admin y username, que eso sería mongo express config MongoDB admin user.
Voy a copiar esto que dice mongo admin username ok, voy a venir y lo pego por acá dos puntos que sería
igual a este mongo usan y así me ahorro no tener que escribirlo en varios lugares.
Voy a hacer lo mismo, voy a clonar la línea y ahora ocupo el password.
Que en este caso sería el password password.
Y también me hace falta el nombre de nuestra.
En este caso el contenedor que vamos a ocupar, que eso puede ser un poco un poco extraño.
Este mongo mongo DB Server entonces mongo DB Server voy a pegar por aquí dos puntos y aquí es donde
alguien va a preguntar Ok.
Cuál es el nombre del servidor?
Ok.
Cuál es el nombre del servidor?
Ah, yo no podría decir Ah, bueno, es el de B.
No, ese es el nombre del servicio.
Recuerden que cuando nosotros montamos los contenedores y ya están corriendo con el Docker Compass,
esto crea una red y la red crea a su vez un DNS, que es una forma de identificar los servicios o los
servidores con un nombre con un nombre legible, un nombre humano, no una dirección IP.
Entonces, al crear esa red, nosotros tenemos este pokemon de que ese es el nombre Ups, que este es
el nombre de ese servidor que tiene la base de datos.
Podemos verlo de esa manera.
Entonces es ese nombre que nosotros le pusimos, Mongo de Benin.
Entonces eso es lo que yo voy a colocar aquí.
Espero tenga sentido lo que les acabo de decir.
Recuerden que cuando se crea la red, cada uno de estos servicios que nosotros estamos creando se crea
como servicio y a la vez el nombre que tenga es el nombre de DNS que yo voy a poder utilizar para llamarlo,
siempre y cuando se encuentre dentro de la misma red.
Ok.
Espero que tenga sentido eso.
Bien, regresemos a ver qué otra configuración hay.
Nos hace falta la parte del puerto.
Vamos a ver si el puerto.
Yo sé que es el puerto 80 81, pero yo lo voy a mapear con mi puerto 80 80.
Entonces vamos a poner aquí Port Stop.
Voy a poner el puerto 80 80 de mi computadora con el puerto 80 81, que es el que expone Mongo Express.
Cómo sé yo que era el puerto?
80 81 Leyendo la documentación de Docker.
Así de la documentación de la imagen.
Y nuevamente Restore Restart.
Le voy a poner aquí start read start, dos puntos Always.
Y se los cambios.
Ok, voy a regresar a la terminal.
Voy a hacer primero un Docker post down.
Presionamos Enter.
Tengo que el UP.
Y esto debería de obviamente descargar la nueva imagen porque no teníamos la parte del mundo express
en la versión uno punto 0.0 Alpha no sé qué Alpha cuatro que era, creo que era y perfecto también.
Ustedes rápidamente pueden abrir Docker Desktop, ver que todo esté bien, y si alguno de esos contenedores
tiene algún problema, ustedes van a verlo en otro color, pueden hacer clic en él y analizar los logs
o pueden usar los logs del contenedor, como ya lo vimos y eso, no se preocupen, Service Open y permite
cualquier tipo de conexión.
Esto es porque no teníamos ningunas credenciales, pero eso está bien porque nuestra base de datos si
va a tirar error, si no están las credenciales correctas, entonces vamos a ver.
Otra cosa que les digo es que miren esto Bongo Express, como no le pusimos un nombre, le puso el nombre
de la imagen -1 que sería la réplica.
Y también podemos hacer clic aquí para abrir rápidamente nuestro local host.
Y dónde está?
En el puerto 80 80.
Y aquí vemos la base de datos.
Podemos crear aquí cualquier cosa.
Create data vez ahí ya la tenemos.
Tenemos esta cosa que acabo de crear.
Puedo entrar, puedo crearla, puedo crear nuevas colecciones, puedo escribir lo que sea ingreso y
ahí ya está funcionando.
Perfecto.
Genial.
Ahora yo puedo.
En este momento, si yo vengo a Table Plus de nuevo, voy a ingresar parte de bases de datos.
Van a ver que ahí está nuestra base de datos, no sea la que acabamos de crear utilizando un mundo express.
Si yo en este momento no necesito exponer la parte del puerto de la base de datos, esto es algo más
seguro.
A qué me refiero con esto?
Para qué vamos a exponer el puerto de la base de datos si los únicos que van a utilizar la base de datos
es esta imagen que tenemos aquí y nuestra aplicación.
Entre menos cosas estén expuestas, más seguro va a ser el trabajo de nuestros contenedores, porque
tiene que estar aislados.
O mejor dicho, entre más aislados, mejor.
Entonces, puedo comentar esas dos líneas.
Grabemos los cambios.
Voy a regresar a la terminal.
Limpiemos acá.
Flecha direccional arriba.
Voy a hacer el down y luego vamos a volverlo a subir.
Ok, regresemos al navegador web.
Recarguen.
Lo iban a ver que todo sigue funcionando.
Estamos entrando acá.
Recargamos.
Estamos con el acceso y todo lo demás.
Intentemos en Table Plus.
En Table Plus.
Recuerden que esta conexión funcionaba.
Puedo hacer doble click.
Y ahora me dice que no puede encontrar ningún servidor.
Ah, ok.
Voy a tablet.
Trae a Ken, Trae a Jen.
Y esto es porque no hay actualmente en ningún servidor de Mongo DB corriendo en mi computadora en localhost
en el puerto 27 cero 17.
Recuerden, el puerto no está expuesto.
El contenedor de Mongo DB no le está hablando a mi computadora.
No hay nada publicado y por eso no puedo conectarme de nuevo.
Y la cadena de conexión?
Ustedes saben, yo no la he tocado y ahorita ya no funciona.
Y eso es exactamente lo que nosotros queríamos hacer.
Puedo recargar?
Van a ver que aquí si funciona, podemos borrar esta base de datos que escribimos.
Van a tener que poner el nombre tan feo que le puse.
Y efectivamente, si está trabajando y noten que también montó un Apache o un PMA.
Bueno, no es un apache, es un express.
Habría que ver cómo está construido, sobre qué está construido eso.
Ya vamos a hablar más sobre construcción de imágenes muy pronto, pero por ahora esto era todo lo que
yo ocupaba.
Regresemos a la terminal.
Hagamos el Docker con pose down y nos vemos en la próxima clase.