Una de las cuestiones más de moda en los últimos meses en el mundo devops es el uso de contenedores, la tecnología de contenedores va un paso más allá de la virtualización para ofrecer entornos ligeros de ejecución aislados del sistema operativo, pero sin toda la carga que conlleva hacer una verdadera virtualización.
Una confusión común en estos entornos es la de mezclar tecnologías diferentes, y un ejemplo claro de esto es la confusión que hay entre dos tecnologías muy conocidas relacionadas con todo esto las cuales son: Docker y Vagrant.
Docker es una tecnología Open Source para crear contenedores ligeros y portables para cualquier aplicación. Lo bueno que tiene es que podemos empaquetar nuestra app en un contenedor Docker desde nuestro portátil y moverla tal cual a un servidor, una máquina virtual o a la nube sin hacer cambio de ningún tipo, asegurándonos que va a funcionar exactamente de la misma manera. Con esto nos olvidamos de la versión del sistema operativo, bibliotecas y demas dependencias.
Lo que proporciona Vagrant es la creación y gestión sencilla de entornos de trabajo “portables” y replicables que funcionan sobre tecnologías de virtualización conocidas, ofreciendo además un modo de trabajo claro para poder transportar dichos entornos y que funcionen sin problemas en otro lugar: nuevamente en un servidor, la nube. En realidad Vagrant se puede asimilar a un gestor de máquinas virtuales ya que por debajo usa la tecnología de virtualización que nos interese: VMWare, VirtualBox, Hyper-V, Amazon web Services, RackSpace Cloud, Google Compute Engine. Su factor diferencial es lo mucho que facilita la creación de las máquinas virtuales: creas un archivo que describe el tipo de máquina que necesitas, el software que tiene que tener instalado, la forma de acceder a la máquina virtual
Son tecnologías diferentes y no son excluyentes entre sí. Es decir, es posible utilizar Vagrant para crear un entorno capaz de ejecutar Docker dentro de éste y así desplegar una aplicación. Es más, Vagrant viene “de serie” con un proveedor para generar contenedores Docker directamente en el sistema operativo actual.
Otras diferencias que podemos mencionar son:
Característica | Docker | Vagrant |
Tipo de virtualización: | Contenedores | Máquina virtual |
Nivel de aislamiento: | Débil | Muy alto |
Tiempo de creación: | <10 min | >10 min |
Tamaño del despliegue: | Al menos 100MB | Al menos 1GB |
Tiempo de arranque: | Segundos | Minutos |
Impacto en el sistema: | Muy bajo | Alto |
Garantiza recursos en el S.O.: | No | Sí |
Cuántos se pueden albergar a la vez: | >50 | <10 |
Principal ventaja: | Rápido, ligero, fácil de aprender | Fácil de gestionar, muy bien preparado para entornos de empresa |
Ambas herramientas son excelentes para entornos de desarrollo y de pruebas y para pasar a producción entornos completos sin la preocupación por las posibles diferencias o la falta de bibliotecas o servicios necesarios.