Docker vs Máquinas Virtuales: ¿qué es mejor?

Dificultad: Fácil
Tiempo de Lectura: 4 minutos

El desafío de hoy involucra a dos partes fundamentales del trabajo de Sysadmins y Desarrolladores web, es decir: la virtualización. Docker vs Máquinas virtuales es un pequeño versus donde mostramos por qué Docker está revolucionando la forma de virtualizar sistemas y servicios en comparación a los sistemas tradicionales como vmware, virtualbox, etc.

Docker vs Máquinas Virtuales

Cuando se trata de comparar los dos tipos de tecnologías se podría decir que Docker y sus contenedores tienen mucho más potencial que las máquinas virtuales. Este desafío vs no ha comenzado y ya vemos un claro ganador en base a nuestra experiencia. Sin embargo, vamos a detallar bien cada punto destacando los aspectos fuertes y débiles al usar Docker vs VM, distinguiendo categorías como rendimiento, rapidez, portabilidad, seguridad y administración.

Rapidez

Docker y sus contenedores son capaces de compartir un solo núcleo y compartir bibliotecas de aplicaciones, esto ayuda a que los contenedores presenten una carga más baja de sistema que las máquinas virtuales.

En comparación con las máquinas virtuales, los contenedores pueden ser más rápidos y consumirán menos recursos siempre que el usuario está dispuesto a pegarse a una única plataforma para proporcionar el sistema operativo compartido.

Una máquina virtual puede tardar hasta varios minutos para crearse y poner en marcha mientras que un contenedor puede ser creado y lanzado sólo en unos pocos segundos. Aplicaciones contenidas en contenedores ofrecen un rendimiento superior, en comparación a la ejecución de la aplicación dentro de una máquina virtual.

Para dar un ejemplo claro, los tiempos de inicio y detención de Docker son menores a 50ms, mientras que las máquinas virtuales inician en 30-45 segundos, y se detienen en 10 segundos o menos.

Portabilidad

Todas las aplicaciones tienen sus propias dependencias, que incluyen tanto los recursos de software y hardware. Los Contenedores Docker aportarán numerosos beneficios en comparación con las tecnologías existentes. En términos de tecnología, es bastante interesante en escenarios donde ayuda en la promoción de la portabilidad de la nube mediante la ejecución de las mismas aplicaciones en diferentes entornos virtuales esto es muy útil en el ciclo de vida para el desarrollo de software.

Docker es una plataforma abierta para desarrolladores, es un mecanismo que ayuda a aislar las dependencias por cada aplicación mediante la creación de contenedores. Los contenedores son escalables y seguros si los comparamos con el enfoque anterior del uso de máquinas virtuales.

Seguridad

Una de las ventajas de la utilización de máquinas virtuales es la abstracción a nivel de hardware físico que se traduce en kernels individuales, que limitan la superficie de ataque al hipervisor (el monitor o núcleo de la virtualización). En teoría, las vulnerabilidades particulares en las versiones de sistemas operativos no se pueden aprovechar para poner en peligro otras máquinas virtuales que se ejecutan en la misma máquina física.

100% compatible con sistemas de seguridad de kernel como SELinux, GRSEC, etc. Docker también ofrece grupos de control de acceso al demonio que controla la virtualización, restringiéndolo así sobre posibles cambios que puedan hacerse al sistema.

Una lista completa sobre la seguridad de Docker puede encontrarse aquí.

Administración

Soluciones tales como Docker hacen más fácil la gestión de contenedores, pero muchos clientes todavía encuentran la gestión de contenedores más un arte que una ciencia. Para varios usuarios que han estado trabajando con Docker recientemente y comparten su experiencia y su frustración de la gestión del Docker en un entorno de producción.

Solución Híbrida: Máquinas Virtuales y Docker juntos

A veces se puede utilizar un enfoque híbrido que utiliza tanto la máquina virtual como Docker, la cual puede traer consigo muchos beneficios en determinados escenarios. Por ejemplo, en el desarrollo de una app podemos encontrar una forma de usar Docker y máquinas virtuales para probar el software que hemos desarrollado:

  1. Correr varias pruebas para ver si una app está funcionando correctamente. Esto puede hacerse usando los contenedores de Docker.
  2. Emular el entorno del cliente lo más idéntico posible a la realidad (topología de red, sistema operativo, firewall, servicios, etc), en este caso podemos usar también las máquinas virtuales junto con Docker para hacer las pruebas.

Si quieres ir al mundo real, en este ejemplo podrás ver cómo Azure, la nube de Microsoft está usando Docker con VMs para dar soluciones a sus clientes.

Casos como estos encontrarás siempre, por eso no te aconsejamos que descartes las máquinas virtuales por completo, puedes usarlas como complementos para casos específicos.

¿Cuál es el mejor?

En nuestra experiencia, trabajando en equipo y desarrollando en las plataformas Cloud Infranetworking, podríamos decirte que los contenedores de Docker están superando las máquinas virtuales. Sin embargo, lo que nos sirve a nosotros puede que no sea el ideal para ti o tu equipo de trabajo. Debes probar ambos sistemas, y ver en qué te beneficiaría el uso de Docker vs VMs, pues el diseño de la aplicación es el punto de vista crucial para ver cuál de los dos debe ser elegido.

 

Conclusión

En el desafío Docker vs Máquinas Virtuales hemos visto de manear clara cómo Docker y sus contenedores están transformando las operaciones de los DevOps como una herramienta importante en el mundo del desarrollo web. Los casos de uso para los contenedores de Docker dentro del ámbito de DevOps son muchos,  ejecutar aplicaciones en un contenedor  y luego desplegar en cualquier lugar (la nube o en las instalaciones o cualquier distribución de Linux) es una realidad ahora.

Sin dudas Docker ha aportado mucho al mundo de la virtualización, sin embargo dudamos que al menos en el corto plazo los usuarios dejen de usar soluciones de virtualización tradicionales como vmware, openvz, etc.

Si te interesa conocer más sobre Docker y Kubernetes, una tecnología emergente de gran adopción, te recomendamos leer: Docker vs Kubernetes.

¿Qué hay de ti? ¿Sigues usando las tradicionales máquinas virtuales? ¿O ya usas Docker de manera activa en tus desarrollos?


¿Te resultó útil el artículo? Compártelo con tus colegas: