Una de las preguntas frecuentes sobre Docker es en qué se diferencia de la VM (máquina virtual).
Cuando se trata de infraestructura en la nube, la máquina virtual ha sido el estándar al que se ha recurrido por muchas de sus ventajas. Sin embargo, ¿qué pasaría si existiera una alternativa a la máquina virtual que fuera más ligera, económica y escalable? Eso es precisamente Docker.
Docker es una tecnología basada en contenedores que le permite desarrollar aplicaciones distribuidas. En esta entrada del blog, explicaré las diferencias entre las máquinas virtuales y los contenedores Docker.
¿Qué es una máquina virtual?
Una máquina virtual es un sistema que actúa exactamente como un ordenador.
En términos sencillos, hace posible ejecutar lo que parece estar en muchos ordenadores separados en un hardware, que es un solo ordenador. Cada máquina virtual requiere su sistema operativo subyacente, y luego se virtualiza el hardware.
¿Qué es Docker?
Docker es una herramienta que utiliza contenedores para facilitar la creación, el despliegue y la ejecución de aplicaciones. Vincula una aplicación y sus dependencias dentro de un contenedor.
Docker vs. VM
Ahora le contaré las diferencias significativas entre los contenedores Docker y las máquinas virtuales. Bueno, las diferencias significativas son su compatibilidad con el sistema operativo, la seguridad, la portabilidad y el rendimiento.
Así que vamos a discutir cada uno de estos términos uno por uno.
Soporte del sistema operativo
El soporte del sistema operativo de la máquina virtual y del contenedor Docker es muy diferente. Por la imagen anterior, puede ver que cada máquina virtual tiene su sistema operativo invitado por encima del sistema operativo anfitrión, lo que hace que las máquinas virtuales sean pesadas. Mientras que, por otro lado, los contenedores Docker comparten el sistema operativo anfitrión, y por eso son ligeros.
El hecho de que los contenedores compartan el sistema operativo anfitrión los hace muy ligeros y les ayuda a arrancar en sólo unos segundos. Por lo tanto, la sobrecarga para gestionar el sistema de contenedores es muy baja en comparación con la de las máquinas virtuales.
Los contenedores Docker son adecuados para situaciones en las que desee ejecutar varias aplicaciones sobre un único núcleo del sistema operativo. Pero si tiene aplicaciones o servidores que necesitan ejecutarse en diferentes sabores de sistema operativo, entonces se requieren máquinas virtuales.
Seguridad
La máquina virtual no comparte sistema operativo y existe un fuerte aislamiento en el núcleo anfitrión. Por lo tanto, son más seguras en comparación con los contenedores. Un contenedor tiene muchos riesgos de seguridad, y vulnerabilidades ya que los contenedores tienen un núcleo anfitrión compartido.
Además, como los recursos de Docker son compartidos y no tienen namespace, un atacante puede explotar todos los contenedores de un clúster si consigue acceder incluso a un contenedor. En una máquina virtual, no se obtiene acceso directo a los recursos, y el hipervisor está ahí para restringir el uso de los recursos en una VM.
Portabilidad
Los contenedores Docker son fácilmente portables porque no tienen sistemas operativos separados. Un contenedor puede ser portado a un sistema operativo diferente, y puede arrancar inmediatamente. Por otro lado, las máquinas virtuales tienen sistemas operativos separados, por lo que portar una máquina virtual es difícil en comparación con los contenedores, y también lleva mucho tiempo portar una máquina virtual debido a su tamaño.
Para fines de desarrollo en los que las aplicaciones deben desarrollarse y probarse en diferentes plataformas, los contenedores Docker son la opción ideal.
Rendimiento
Comparar las máquinas virtuales y los contenedores Docker no sería justo porque ambos se utilizan para fines diferentes. Pero la arquitectura ligera de Docker y su menor consumo de recursos la convierten en una mejor opción que una máquina virtual. Como resultado, de que los contenedores pueden arrancar muy rápido en comparación con la de las máquinas virtuales, y el uso de recursos varía en función de la carga o el tráfico en el mismo.
A diferencia del caso de las máquinas virtuales, no es necesario asignar recursos de forma permanente a los contenedores. Escalar y duplicar los contenedores también es una tarea fácil en comparación con la de las máquinas virtuales, ya que no es necesario instalar un sistema operativo en ellos.
Conclusión
He aquí una tabla que concluye sobre las diferencias entre una máquina virtual y un contenedor Docker.
Máquina virtual | Contenedor Docker |
Aislamiento de procesos a nivel de hardware | Aislamiento de procesos a nivel de SO |
Cada máquina virtual tiene un SO independiente | Cada contenedor puede compartir SO |
Arranca en minutos | Arranca en segundos |
Las VMs son de pocos GBs | Los contenedores son ligeros (KBs/MBs) |
Las VMs prefabricadas son difíciles de encontrar | Los contenedores docker preconstruidos son fáciles de encontrar |
Las VMs pueden moverse a un nuevo host fácilmente | Los contenedores se destruyen y se vuelven a crear en lugar de moverse |
La creación de VM lleva un tiempo relativamente más largo | Los contenedores pueden crearse en segundos |
Mayor uso de recursos | Menos uso de recursos |