Docker vs Máquinas virtuales; ¿cómo llegamos a la actualidad?

Docker vs Máquinas virtuales; ¿cómo llegamos a la actualidad?

Este es mi primer post, espero que el contenido que te comparto a continuación te sirva de algo o tener algunas cosas claras de como esta el mundo en la actualidad.

Si eres un programador o estás en el mundo de la tecnología, posiblemente hayas escuchado sobre docker, una herramienta que te permite correr, depurar y probar tus app desde un “contenedor”.

Desde programadores hasta SysAdmin lo usan, desde las grandes empresas como Microsoft o Amazon lo usan hasta pequeñas empresas.

Tal vez suena algo raro o difícil de procesar, te contaré cómo surgió hasta cómo llegó a su época dorada.


VM a Contenedores

A continuación le mostraré algunas diferencias entre las mismas, ya que comparten los mismos objetivos; Mantener aislada la aplicación y sus dependencias necesarias, y por último que pueda ejecutarse en cualquier lado.Veamos cómo cada uno logra lo que se necesita de distinta formas.

Diagrama de comparación, docker.com

VMs

Diagrama de una máquina virtual

En los viejos días, los desarrolladores tenían la necesidad de desarrollar una nueva aplicación, cuando esa aplicación estaba terminada debía pasarse a los ingenieros de operaciones, los mismos que se encargan de pasar la aplicación a los servidores de producción y encargarse de que se mantenga corriendo.

Si los ingenieros de operaciones tenían algo de suerte siguiendo las instrucciones de los programadores podrían ir todo bien, todo correcto y la vida sería más fácil. Parte sencilla, ¿cierto?, ahora las cosas se ponen un poco más complejas en una empresa más grandes, habrá más equipos de desarrollo, más aplicaciones que deben pasar a los servidores de producción, cada una con sus necesidades independientes de las demás, dígase sus dependencias como un framework o una librería, algunas veces una aplicación necesitaba una versión diferente de la dependencia y otra aplicación también, trayendo consigo problemas de compatibilidad. Siendo la vida de los ingenieros de producción un poco más complicada.

Los mismos tenían que ser creativos buscando formas de cómo mantener las aplicaciones corriendo, sin que nada explote(“que todo deje de funcionar”). Instalar una nueva versión de un software era un desafío totalmente para los ingenieros.

Así surgen las máquinas virtuales en vez de correr varias aplicaciones en un mismo servidor, son empaquetadas y corren en una máquina virtual separada, con esto todos los problemas de compatibilidad son resueltos y la vida vuelve a ser fácil.

Las máquinas virtuales, son una simulación de una computadora real, donde puedes ejecutar programas y hacer todo lo que necesites. Las máquinas virtuales necesitan un hipervisor para funcionar.

Un hipervisor es una pieza de software, firmware o hardware que se encarga de crear y correr máquinas virtuales. Los mismos deben ejecutarse en una computadora física. una computadora que ejecuta un hipervisor o una o varias máquinas virtuales se llama una máquina anfitriona(“host machine”).

Las mismas usan recursos como CPU o RAM, los mismos son distribuidos entre cada máquina virtual por el hipervisor. Si una aplicación necesita más recursos se incrementan los mismos asignados a la máquina virtual.

Lo primero que se puede observar en el funcionamiento de una máquina virtual, después de un hipervisor, es que cada máquina virtual requiere un sistema operativo para funcionar.

Una máquina virtual proporciona un entorno aislado del resto de la máquina, de tal manera que todo lo que se ejecute dentro de la máquina virtual no interfiera con lo demás que se ejecute en el hardware de la máquina anfitriona.

Las máquinas virtuales en un momento han dado una revolución en la industria, de pasar a la oportunidad de tener una o varias corriendo en un mismo servidor a tener varias aplicaciones corriendo en distintas máquinas virtuales para sacar mayor provecho del hardware físico, ya no tiene tanto auge como antes :(.

Docker

Diagrama de docker

Continuando la historia que comencé no hace poco, las máquinas virtuales resolvieron algunos problemas que surgieron en ese momento dado pero la misma trajo otro más, las máquinas virtuales son muy pesadas, como cada máquina virtual debe ejecutar un sistema operativo como Windows Server o Linux, todo eso solamente para una aplicación.

La solución definitiva para resolver este mismo problema sería algo que sea más ligero que las máquinas virtuales pero de la oportunidad de encapsular toda la aplicación. Todas las dependencias externas, frameworks, librerías, configuraciones y más, lo resuelve el mecanismo de contenedores de Docker.

Docker añade un concepto nuevo o lo lleva a un nuevo nivel, los contenedores. Los programadores usan los contenedores para empaquetar sus aplicaciones, sus frameworks y librerías en los mismos, asimismo se los pasan a los tester o ingenieros de operaciones.

Los contenedores son una caja negra, una caja negra estandarizada. Todos los contenedores independientemente de la aplicación que se ejecute dentro de ellos, se puede tratar por igual. Si puede ejecutarse en un servidor puede ejecutarse entonces cualquier otro contenedor también puede ejecutarse, esto en su mayoría es cierto, a excepción de algunos casos que siempre existen :).

El mecanismo de Docker para manejar contenedores permite a los programadores ejecutar sus aplicaciones dentro del mismo, sin necesidad de tener un sistema operativo corriendo aparte de utilizado por la máquina anfitriona.

Esto ofrece la oportunidad de poder ejecutar apps, con menos recursos ofreciendo el mismo o mayor rendimiento. los programadores pueden también correr las apps en laptops o sin necesidad de una gran cantidad de recursos en el equipo.

Docker para mantener su inmutabilidad o estándar utiliza las imágenes siguiendo el mismo acercamiento que usan las máquinas virtuales, cada imagen surge de otra imagen base o un sistema operativo base donde generalmente se utilizan algunas distribuciones de Linux. A la hora de empacar la aplicación docker solamente registra los cambios realizados en la imagen.

El presente

Los contenedores es una tecnología que va creciendo con rapidez en la actualidad, con la flexibilidad y las oportunidades que traen al mundo,desde la oportunidad de tener todo lo que te ofrece una máquina virtual pero de una forma más ligera.

Hago una apuesta de que la misma involucra Linux, al igual, la gran mayoría de los servidores del mundo utilizan linux, cada vez se busca una forma más fácil de las aplicaciones desde la etapa de desarrollo a la etapa de producción sin inconvenientes.

Conclusión

Espero que hayas tenido un entendimiento sobre cómo funciona docker y sus ventajas o por lo menos noción del mismo. Espero que ahora tengas el suficiente conocimiento para empezar a aprender docker y utilizarlo en algún proyecto personal algún día.

Escríbeme en los comentarios si he cometido algún error o si puedo ser útil de alguna manera. Espero que te haya servido de algo.