Una de las preguntas frecuentes que se hacen más los estudiantes y personas que están aprendiendo a trabajar con Docker es la diferencia entre este y una Máquina virtual de toda la vida. A continuación, vemos una tabla comparativa para después profundizar más en cada una de las características.
Máquina Virtual | Contenedor Docker |
---|---|
Aislamiento de procesos a nivel de hardware | Aislamiento de procesos a nivel de sistema operativo |
Cada máquina virtual tiene un sistema operativo separado | Cada contenedor puede compartir el sistema operativo |
Arranca en minutos | Arranca en segundos |
Las máquinas virtuales ocupan varios GB | Los contenedores son ligeros (KB/MB) |
Es difícil encontrar máquinas virtuales preconfiguradas | Los contenedores de Docker preconstruidos están fácilmente disponibles |
Las máquinas virtuales se pueden mover fácilmente a un nuevo host | Los contenedores se destruyen y recrean en lugar de moverse |
Crear una máquina virtual lleva relativamente más tiempo | Los contenedores se pueden crear en segundos |
Mayor uso de recursos | Menor uso de recursos |
Las Máquinas Virtuales
Una máquina virtual es un sistema que actúa exactamente como un ordenador.
En términos sencillos, permite ejecutar muchos ordenadores separados en un solo hardware, es decir, un mismo ordenador real. Cada máquina virtual requiere su propio sistema operativo subyacente, y luego el hardware se virtualiza.
Docker
Docker es una herramienta que utiliza contenedores para facilitar la creación, implementación y ejecución de aplicaciones. Agrupa la aplicación y sus dependencias dentro de un contenedor.
Docker vs. Máquinas Virtuales
Ahora veremos las diferencias significativas entre los contenedores de Docker y las máquinas virtuales.
Las diferencias significativas se encuentran en el soporte del sistema operativo, la seguridad, la portabilidad y el rendimiento.
Así que discutamos cada uno de estos términos uno por uno.
Soporte del Sistema Operativo
El soporte del sistema operativo de la máquina virtual y el contenedor de Docker es muy diferente.
Cada máquina virtual tiene su propio sistema operativo invitado por encima del sistema operativo anfitrión, lo que hace que las máquinas virtuales sean pesadas. Por otro lado, los contenedores de Docker comparten el sistema operativo anfitrión, por eso son livianos.
Compartir el sistema operativo anfitrión entre los contenedores los hace muy livianos y les permite arrancar en solo unos segundos. Por lo tanto, la sobrecarga para administrar el sistema de contenedores es muy baja en comparación con el de las máquinas virtuales.
Los contenedores de Docker son adecuados para situaciones en las que deseas ejecutar múltiples aplicaciones sobre un solo núcleo del sistema operativo. Pero si tienes aplicaciones o servidores que necesitan ejecutarse en diferentes versiones de sistemas operativos, entonces se requieren máquinas virtuales.
Seguridad
Las máquinas virtuales no comparten el sistema operativo y tienen un aislamiento fuerte en el kernel del host. Por lo tanto, son más seguras en comparación con los contenedores. Un contenedor tiene muchos riesgos de seguridad y vulnerabilidades ya que comparten el kernel del host.
Además, dado que los recursos de Docker se comparten y no están en un espacio de nombres (namespaced), un atacante puede explotar todos los contenedores en un clúster si obtiene acceso a un solo contenedor. En una máquina virtual, no tienes acceso directo a los recursos y el hipervisor está presente para restringir el uso de recursos en una VM.
Portabilidad
Los contenedores de Docker son fácilmente portátiles porque no tienen sistemas operativos separados.
Un contenedor se puede llevar a un sistema operativo diferente y puede iniciarse de inmediato. Por otro lado, las máquinas virtuales tienen sistemas operativos separados, por lo que es difícil trasladar una máquina virtual en comparación con los contenedores, y también lleva mucho tiempo trasladar una máquina virtual debido a su tamaño.
Rendimiento
Comparar las máquinas virtuales y los contenedores de Docker no sería justo porque se utilizan para diferentes propósitos. Pero la arquitectura liviana de Docker y su característica de bajo consumo de recursos lo convierten en una mejor opción que una máquina virtual. Como resultado, los contenedores pueden iniciar muy rápido en comparación con las máquinas virtuales, y el uso de recursos varía según la carga o el tráfico.
A diferencia de las máquinas virtuales, no es necesario asignar recursos permanentemente a los contenedores. Escalar y duplicar los contenedores también es una tarea fácil en comparación con las máquinas virtuales, ya que no es necesario instalar un sistema operativo en ellos.