Solo relájense un momento y escúchenme, porque esto es una presentación corta en la cual vamos a explicar
que es Docker y por qué debo de saberlo.
Primeramente, antes de Docker, cuando venía un nuevo desarrollador a nuestro proyecto, nosotros le
pedimos Por favor instala estas herramientas que estamos hablando de María de Ready y también necesito
una base de datos de Mongo, de B.
Entonces el programador llega, los instala.
Pero sabes qué?
Se me olvidó decirte algo.
Yo necesito que instales estas versiones en específico.
Por qué?
Porque esa aplicación es Legacy.
Porque esta aplicación está usando la versión antigua de Reddit.
Porque esta versión, a pesar de que estamos en la última versión de Mongo, la verdad es que todavía
tenemos interacciones que no hemos migrado de María de V.
Entonces hay ciertas cosas en las cuales ocupamos estas versiones en específico para trabajar y luego
viene algo un poco más complicado.
Resulta que el desarrollador tiene dos computadoras, le damos una desktop para cuando él viene a la
oficina y tiene una laptop que él se lleva a su casa para seguir trabajando allá, suponiendo de que
la computadora en la oficina es Linux y la computadora que él se llevó, o la laptop que se lleva es
Windows.
Eso implicaría que podemos tener diferentes puntos de errores.
Es decir, si estamos en Windows, puede ser que la versión x x x no es compatible.
Si nos dieran una Mac puede que el software ni siquiera exista.
O sea, no existe nada similar para la Mac y en Linux puede que esa versión que nosotros queramos instalar
no es compatible con la distribución de Linux que tengo.
Esto ya hace bastante complicada la instalación y que una persona empieza a ser productiva rápidamente.
Luego viene un tercer problema aún más feo, el cual es que nosotros tenemos otra aplicación dos, es
decir, una aplicación dos tres, que la persona también va a tener que darle mantenimiento, la cual
usa versiones diferentes de estas tecnologías.
Y aunque ustedes digan pero esto no va a pasar, esto casi nunca sucede, Esto es muy raro.
Esto es más común de lo que ustedes creen.
Entonces nosotros tenemos ahora una aplicación doble en la cual el programador tiene que darle nuevamente
seguimiento y mantenimiento y actualizarla, la cual usa la última versión en este momento, la última
versión, de manera que puede que el día de mañana ya no sea la última versión, la versión siete de
redes y la versión cuatro de Mongo, porque todavía no hemos migrado a la versión cinco de Mongo por
ciertas características que son incompatibles.
Esta tarea parece ser imposible si nosotros estamos trabajando en nuestra computadora y mantener esto
en dos computadoras.
Tres computadoras es realmente un verdadero infierno.
También más de uno dice Bueno, pero una solución sería que nosotros trabajemos con máquinas virtuales.
No voy a hacer mucho énfasis en las máquinas virtuales aún, pero si nosotros no podemos, las máquinas
virtuales son muy pesadas, es decir, porque nosotros estamos emulando la capa de aplicaciones y el
kernel del sistema operativo, y esto incluye muchas cosas que nosotros no ocupamos.
No ocupamos los juegos que pueden venir en el sistema operativo preinstalado, no ocupamos toda la interfaz
visual porque solo queremos los procedimientos corriendo.
También son más lentas porque cambiarlas, iniciarlas, ejecutarlas y transferirlas.
Esto es algo que funciona mucho tiempo, sin contar que también hay muchos recursos que tener.
Estas máquinas virtuales requieren.
Imagínese que es tener una máquina virtual con cada una de esas configuraciones que yo les mencioné.
La verdad es que se va a requerir bastante poder computacional para simplemente correr la aplicación,
no para desarrollarla.
Con Docker esto ya es una revolución.
Básicamente lo que nos permite a nosotros manejar imágenes, entiéndase una imagen por ahora, que vamos
a entrar en detalle y cada una de las cosas como una fotografía de la versión de cada una de estas tecnologías
totalmente funcional que hicieron los mismos autores de esas tecnologías.
Claro, también hay imágenes que son de terceros, pero ya hablaremos de eso.
En pocas palabras.
Yo ahora puedo tomar estas imágenes, que sería todo lo que yo necesito para correr.
María de V.
En la versión 10.3 y esa imagen la monto en un contenedor, el cual es algo aislado.
Lo mismo voy a hacer con Ready.
Lo mismo voy a hacer con Mongo y no importa en qué sistema operativo esté.
Docker se encarga de asegurarse de que va a funcionar exactamente igual en cada uno de estos sistemas
operativos y con cada una de esas versiones que yo estoy seleccionando, lo cual es increíblemente útil.
Luego resolver el problema que nosotros teníamos de las versiones específico para la aplicación uno
y dos es exactamente el mismo proceso, porque nosotros vamos a poder tener identificado cada una de
las versiones que yo necesito para esa aplicación en particular.
La ventaja de trabajarlo de esta manera es que con Docker nosotros tenemos nuestros nuestras imágenes
o contenedores totalmente aislados entre sí.
Es decir, ustedes van a poder tener inclusive varias instancias de la misma base de datos o varias
instancias de la misma imagen, corriendo al mismo tiempo en la misma computadora sin ningún inconveniente
y también sin hacer configuraciones adicionales.
Con un solo comando podemos descargar, levantar y correr todo lo que necesitamos, todos esos montón
de tecnologías para poder continuar desarrollando una aplicación.
Cada contenedor contiene todo lo que se.
Necesita para ejecutarse de manera al abrigo de la caja, por decirlo así.
Y también es indiferente del sistema operativo host en el cual nosotros estamos corriendo esos contenedores.
A diferencia de las máquinas virtuales, los contenedores se levantan en milésimas de segundo o segundos
dependiendo de los procesos o si hay que hacer algún tipo de descarga.
Analizamos un flujo de trabajo utilizando Docker.
Nosotros empezamos a crear nuestra aplicación, la cual utiliza not, bombones y express.
Nosotros estamos creando la aplicación, la estamos desarrollando, pero de repente se nos pide que
tenemos que hacer una un moment de la aplicación porque el cliente la quiere ver o el desarrollador
del frontend necesita empezar a trabajar con ella.
Qué sé yo.
X oye, razón nosotros ocupamos ya empezar a empaquetar nuestra aplicación y distribuirla.
Entonces llegamos nosotros y vamos a generar nuestra imagen.
Hacemos el Bill Process, el cual se puede automatizar mediante Git y Jenkins, para que automáticamente
haga todo el proceso de construcción de nuestra imagen.
Inclusive el siguiente paso también lo automatiza, que ya lo vamos a ver, pero construimos la imagen,
entiéndase esta imagen que ahí ya estaría node instalado la aplicación instalada con únicamente las
dependencias de producción, que no hay que ni siquiera instalar las dependencias de producción porque
ya están empaquetadas ahí.
Es decir, la imagen contiene todo lo que yo necesito para ejecutar la aplicación.
Esa imagen yo la subo a un repositorio, la cual es muy parecido a GitHub, GitHub, GitHub, muy parecido
a Big Box y todo lo demás, solo que está especializado para recibir imágenes de Docker.
Hay repositorios públicos y privados y ya lo vamos a ver más adelante.
Y cuando hagamos ese procedimiento, obviamente todo lo que ustedes están viendo aquí está simplificado
para fines educativos, pero básicamente este es el proceso macro.
Luego, cuando nosotros queremos desplegar esa imagen a un servidor, simplemente el servidor hace el
pull de la imagen de la versión específica que nosotros queremos y el servidor se encarga de correr
ese contenedor y ya tiene esa imagen en un contenedor y ya literalmente tiene todo lo que nosotros ocupábamos
para correr la aplicación específicamente como yo lo necesito.
Esto incluye que puede ser que otro desarrollador necesite esa aplicación de imagen que yo tengo específicamente
para correr localmente y así seguir su desarrollo.
Esto es increíblemente útil y poderoso.
Cambiar de versiones y hacer versiones de versiones.
Si algo sale mal en una versión nueva de producción que nosotros desplegamos.
Es sumamente sencillo.
Inclusive si ustedes no necesitan nada de esto, es sumamente productivo poder montar, borrar, volver
a montar, cambiar de versión y sin dejar ningún rastro ni basura de configurar o configuraciones a
medias en nuestro equipo.
Esto vale la pena y aunque ustedes digan bueno, yo puedo hacer esto manual, no me cuesta nada.
Eventualmente ustedes van a llegar a un punto donde necesitan saber Docker y posiblemente esa es la
razón por la cual ustedes están tomando este curso en este momento.
Así que comencemos toda la guía práctica a partir del siguiente video.