Recuerden, en la clase pasada nos quedamos con esto.
Service App no tiene ni una imagen o un contexto especificado, entonces no se puede ejecutar.
Básicamente lo que tenemos aquí es que en este servicio de app, eso sería básicamente un nuevo contenedor.
No sabe que hacer, no tiene ninguna imagen base, no sabe como levantarlo, no sabe cómo crear esa
imagen, no sabe absolutamente nada, simplemente sabe que tiene un volumen que hace el map.
El mapeo en nuestra carpeta con el app tiene el nombre del contenedor, tiene un par de puertos y una
variable de entorno.
Eso es todo lo que tiene.
Nuevamente, mágicamente.
No esperen que esto funcione.
Hay varias maneras de configurarlo.
Vamos a comenzar aquí y a escribir el comando del build o la propiedad build.
Podemos aplicar un path, pero yo quiero hacer varias propiedades.
Entonces hagámoslo exactamente igual que yo.
Puedo especificar el contexto.
El contexto.
Voy a poner un punto que básicamente donde quiero que busque el archivo del Docker file.
Ustedes pueden tener esto.
Por ejemplo, pueden crearse una carpeta que se llame Docker y colocar todo lo de Docker ahí, exceptuando
el Doc Minor, que sí debería estar en el root al mismo nivel de el root de su aplicación.
Pero ustedes pueden poner esto diferentes en diferentes directorios.
También pueden cambiarle el nombre del Docker File y escribir Docker File.
Por defecto va a buscar el Docker field, pero si quieren pueden especificar así o si tienen un nombre
especial también lo pueden especificar que por cierto, ustedes pueden tener Docker para producción
y Docker Compass para producción también.
Aunque lo que les voy a enseñar en esta clase les va a permitir a ustedes ejecutar ciertos segmentos
del mismo Docker fail y así no tener como 50 o tres o cuatro Docker Fields por si están en staging,
si están en producción, si están en desarrollo, si están en testing, todo será lo mismo.
También se puede hacer de esa manera.
En fin, tenemos nuestro perfil y básicamente estas instrucciones le va a decir está la forma de construirla,
pero si yo lo dejo así y analizamos nuestro Docker file como que esto es mi configuración de Docker
Field para producción.
No sé ustedes, pero tal vez lo piensan de esa manera.
Si yo ejecuto mi Docker Field ahora va a hacer la parte de las dependencias, va a ser el Builder,
que es el Giant Build, que es.
No es lo que yo quiero hacer, porque yo lo que quiero eventualmente hacer es el comando start que teníamos
acá, el staff, dos puntos de para empezar y continuar desarrollando mi aplicación.
Pero, pero si yo lo dejo así, entonces va a entrar al Docker File y ejecutar toda esa serie de procesos.
Y yo no quiero eso.
Necesito crearme un nuevo state para únicamente el paso de desarrollo o el paso de testing, o el paso
de Staging o el paso que ustedes necesiten.
En este caso, voy a venir a mí.
Docker File Copias esta primera primera imagen que tenemos aquí, este grupo de instrucciones y voy
a crear uno al inicio.
Puede ser que ustedes lo pongan al final o pongan adelante.
La verdad es que no importa mucho, todo va a depender del nombre que ustedes le den y en este caso
le voy a poner dev de desarrollo o el nombre que ustedes consideren conveniente y noten que este paso
dev y tenemos un paso que se llama proud, que son básicamente, digamos que son son como hermanos,
pero qué es lo que vamos a hacer en el paso de desarrollo?
Está bien que nos movamos al Waking Directory de App, porque todo quiero que trabaje dentro de ese
directorio, porque ese directorio ya viene creado por la gente de Node y ahí es donde viene la aplicación
de nuestro contenedor y ahí es donde quiero montar todo.
Está bien que pasemos el paquete JSON y lo peguemos ahí, o lo pegamos con ese nombre o lo peguemos
en el Working directory como ustedes quieran.
Luego voy a hacer el jan install porque esto vamos a hacer la instalación de todas las dependencias
ok?
Todas las dependencias.
Podemos remover la parte del local si ustedes quieren.
Y eso es básicamente y luego voy a poner aquí un CMD y el ejecutable va a ser Jan y voy a poner el start
dos puntos de antes de dejarlo así.
También voy a ocupar que en nuestro Docker post File vamos a tener que hacer un mapeo adicional por
este lado, porque en el caso de que no tengamos los módulos de NOT, que esto es algo que se va a construir
del lado de el Docker file y este DIS también lo podemos probar, pero este de ahí se va a construir
cuando nosotros lo ejecutemos.
Es algo extraño, pero básicamente esto es algo muy propio de Node.
Lo que quiero decir es que como esta carpeta, la carpeta de los módulos se va a construir en este punto
también tengo que mapear de manera individual y lo podemos hacer de esta manera.
Voy a poner slash app es las node modules y de esta manera estoy creando este volumen también.
Ese es nuestro bind value de nuestro proyecto.
Y esto es en el caso de que no exista esa carpeta, también nosotros la vamos a tener por acá.
Y hacer mapeo del volumen.
Entonces voy a grabar los cambios.
Voy a venir aquí a la consola y hagamos un Docker con pose down.
En el caso de que nosotros tengamos algo.
Yo he hecho esto varias veces y también hay una manera de borrar hasta los volúmenes y ustedes lo hacen
de esta manera Valiums, lo que compone Down Valiums.
Esto también borra los volúmenes que ya se han utilizado, es decir, todo está totalmente limpio y
podemos hacer lo siguiente Docker compost Build Center.
Este procedimiento va a empezar a realizar lo que es o las instrucciones que nosotros tenemos definidas
únicamente para llegar hasta este punto.
Si hubieran otras dependencias, por ejemplo otras secciones antes, se pueden ejecutar nuevamente.
Hay personas que a un pequeño paréntesis aquí le estoy dando una pequeña hablada porque este procedimiento
puede tardar su buen rato.
Bueno, hay personas que lo que prefieren en lugar de tener todo esto, el de desarrollo y las demás
etapas, aquí crean un archivo independiente y le ponen Docker, Compass o Docker File Point o lo que
punto.
Y así lo mantienen separados también.
Pero nuevamente prefiero explicarles a ustedes que están estas opciones y luego ustedes pueden irse
por el camino más fácil si les parece.
Ok.
Bueno, echamos a andar la aplicación, espero que para el caso de ustedes ya haya terminado o esté
cerca de terminar.
Este procedimiento puede demorar hasta un minuto porque esas dependencias son bastantes y ahora podemos
hacer el Docker Compass up.
Voy a presionar Enter.
Eso debería de fallar.
Pero no se preocupen.
Miren que está creando el contenedor de mes A.
Eso va a fallar.
No se preocupen.
Esto va a fallar.
Esperemos un momento.
Y aquí está lo que está.
Lo que yo esperaba que fallara.
Por eso tenemos nuestra aplicación aquí corriendo.
Y también me creo los módulos de No, pero pareciera que los módulos de NET están vacíos.
Pero si estuvieran realmente vacíos, si esto realmente estuviera vacío, no podría ni siquiera ejecutar
esta parte.
Y nos diría que hay que instalar Nest y que no sé qué, pero realmente esos módulos de Node están del
lado de nuestra imagen OK, de la imagen que nosotros estamos creando en este punto, que es la que
estamos montando acá.
Es más, también hay otro tip que les puedo dar es que si ustedes no quieren ejecutar este comando aquí
perfectamente pueden poner cual es el comando a ejecutar.
Aquí pueden poner el comando de Janna Start, dos puntos, que es exactamente lo mismo solo para explicar
también que este comando se puede ejecutar cuando se monta esta imagen y ese de aquí sería innecesario
si siquiera lo vamos a ver.
Ok, pero Fernando, Fernando pasa aquí todavía.
Eso está fallando.
Ok, vamos a analizar qué es lo que está fallando.
Me dice que no puede encontrar a base de datos y que empieza a reintentar, reintentar y y connection.
Esto básicamente dice que está rechazando la conexión.
Y estoy aquí.
Tal vez es difícil verlo la primera vez, pero significa que está rechazando la conexión al local host,
al local host del contenedor, pero en nuestro contenedor de la aplicación en esa app no hay ninguna
base de datos.
No está ahí la base de datos, la imagen de la base de datos, o mejor dicho, la base de datos no está
corriendo, está en su propio contenedor que se llama texto de V.
No está en el localhost, entonces eso hay que cambiarlo.
Podemos presionar control para cancelar esto varias veces y cancelemos todo eso.
Regresemos a Visual Studio Code en nuestras variables de entorno.
Y aquí nosotros teníamos divi host local host, pero el host de la base de datos no es local host va
a ser en este caso lo debe.
Y esa es la ventaja de tenerlo en variables de entorno que fácilmente yo las puedo cambiar acorde al
entorno.
Ok.
Bueno, regresemos a nuestro locker final.
Noten que yo comencé esta línea, pero esta línea técnicamente es lo mismo que nosotros teníamos acá.
Si yo lo dejo así como está, si yo lo dejo así como está y alguien llegar a ejecutar esta imagen,
la imagen simplemente se monta y se apaga y ya, porque no hay ninguna instrucción subsiguiente y una
vez llega al final y esta instrucción no es consecutiva, es decir, no mantiene este proceso ejecutándose,
entonces una vez termina proceso se cierra.
Pero, pero cuando termine de hacer estos pasos y encuentra un comando, este es el comando que va a
ejecutar dentro de esta imagen.
Inmediatamente se monta a ejecutar esa imagen.
Pero nuevamente queda cuestión de gustos.
Vamos a probarlo de nuevo.
Voy a hacer el Docker post up, voy a presionar Enter y esto empieza a montarse.
Esperamos un segundo.
Ahí dice que ya encontró las dependencias.
La aplicación está corriendo el puerto 3000 y efectivamente está funcionando de la manera que yo esperaba.
Podemos regresar a el navegador web.
Escriba en localhost 2.31000, presiona enter y aquí tenemos este punto.
Puedo poner aquí el Slash API y tenemos esto funcionando.
Si ustedes no ven esto, pues si ven esto, mejor dicho, está funcionando.
Perfecto.
Aquí tenemos un par de errores, pero estos errores es porque intentó servir la carpeta app public index.
HTML, lo cual no tiene nada.
Y eso está bien porque yo lo removí, pero la aplicación está funcionando bien.
Que interesante.
Ok, bien, que interesante todo esto.
Técnicamente voy a comentar eso y prefiero dejarlo acá porque esto es siempre que se va a ejecutar en
el paso de desarrollo.
Siempre voy a ejecutar eso y prefiero dejarlo ahí.
Ok.
Antes de terminar.
Antes de terminar esta clase, presione en control de control.
Sé.
Limpien esto.
Y ahora hagamos un Docker con post build.
Ok y presionen enter.
Este toque con pose bald posiblemente le va a realizar un proceso un poco más rápido, pero este toque
con pose baile lo que hace es crearnos a nosotros.
Bueno, déjenme hacer un toque, no que imagine menos.
Bueno, nada más pruebe esto.
No hace falta que lo hagan.
Solo quiero mostrárselas a ustedes.
O sea, claramente, para que no haya confusión.
Estoy limpiando un montón de ejercicios que yo he hecho.
Ok, ven un montón de ejercicios.
Y estoy dejando esto para que nos acordemos como era todo el procedimiento.
Voy a hacer el vino nuevamente y hago un Docker y Mach ls y van a ver que aquí tenemos nuestro test
Low Shop App Lares y ahí dice que fue creado hace dos horas, pero que he estado grabando esto y bueno,
dejé grabar un rato, pero aquí tenemos nuestra aplicación.
Lo que vamos a hacer muy pronto es tomar este esas mismas instrucciones y generar el bill de producción
basado en una variable de entorno también.
Por ejemplo, si estoy en desarrollo lo dejo así, pero cuando yo ya quiero pasarme, en teoría, lo
único que voy a tener que hacer aquí es ponerlo en producción.
Ok, pero por ahora, por ahora ese es el tema de la próxima clase, dejémoslo así, no se estresen
mucho y nos vemos en el siguiente video.