En muchas ocasiones nos hemos referido a la virtualización como a una técnica mediante la cual, utilizando un software determinado, como Docker, podemos crear un hardware «virtual», que a grandes rasgos funciona como un ordenador independiente, en el que instalar otro sistema operativo en él, por encima de nuestro sistema principal, y utilizarlo como si se tratase de un sistema operativo independiente y con la seguridad de que nada de lo que hagamos perjudicará al sistema real. Sin embargo, en los últimos años ha cogido mucho peso un nuevo concepto similar, pero totalmente diferente, lo que se conoce como «contenedores».
Cuando virtualizamos un sistema operativo utilizamos uno de los software de virtualización, como VirtualBox, el cual se encarga de crear el hardware virtual, configurarlos y permitirnos trabajar con él. Este tipo de máquinas virtuales trabajan directamente con un Hypervisor, y dentro de él se instala el sistema operativo completo, no utilizando ninguna dependencia del sistema principal ni compartiendo dependencias entre otros sistemas virtuales.
A la hora de virtualizar un sistema operativo con VirtualBox, lo único que se tiene en comparte es la infraestructura (nuestro hardware real) y el hypervisor. Utilizando estos dos elementos se crean elementos aislados se crean máquinas virtuales completamente aisladas sobre las que trabajar.
Igual que nos referimos a VirtualBox, estaría incluido VMware, Hyper-V, QEMU y cualquier otro software similar.
Cuando hablamos de contenedores la cosa cambia. Este tipo de tecnología no solo comparte la infraestructura y delega el resto al hipervisor, sino que además depende, por un lado, del sistema operativo principal, y por otro de una herramienta encargada de hacer funcionar estos contenedores, como, por ejemplo, Docker.
Docker cuenta con las librerías y dependencias necesarias para crear contenedores, por lo que dentro de estos, en lugar de existir un sistema operativo completo, solo se incluyen los binarios y librerías necesarias (las dependencias) y la aplicación en cuestión que queremos virtualizar.
Entonces, ¿en qué se diferencias estas dos tecnologías?
La principal diferencia entre ambas tecnologías es que, por un lado, cuando virtualizamos un sistema operativo con VirtualBox instalamos y ejecutamos el 100% del sistema operativo, con su kernel, su entorno, sus librerías, sus dependencias, etc. Igual que instalamos Windows o Linux en un ordenador real se instala al completo en VirtualBox.
Cuando utilizamos los contenedores de Docker, por ejemplo, la cosa cambia. En lugar de virtualizar un sistema operativo completo, solo creamos un pequeño kernel con las librerías y dependencias necesarias para realizar nuestra tarea, obviando todo lo demás. De esta manera, los contenedores no son un sistema operativo virtual como tal, sino más bien se entienden como «paquetes» que se ejecutan aislados sobre el sistema operativo principal, pero sin depender de un sistema virtual.
¿Cuándo debo usar VirtualBox y cuándo Docker?
En caso de querer utilizar un sistema operativo completo por encima del nuestro principal, entonces lo mejor que podemos hacer es recurrir a VirtualBox. De esta manera vamos a tener el sistema completo y podremos utilizarlo igual que utilizamos nuestro sistema principal, pero con la seguridad de que si ocurre algo (por ejemplo, nos infectamos por un virus), el sistema principal no se ve afectado.
Por el contrario, si lo que necesitamos es una aplicación en concreto, o varias instancias de un servidor (por ejemplo, varios servidores web Apache), en vez de tener que instalar varios sistemas operativos virtuales y correrlos completos en la memoria, la mejor opción es Docker, ejecutando lo estrictamente necesario para cumplir nuestras necesidades, sin malgastar recursos y, además, de una forma mucho más rápida y sencilla.
¿Sueles utilizar VirtualBox o Docker?
Os recomendamos leer el tutorial puerto SFP vs puerto RJ45: cuáles son las diferencias y para qué sirven.