Los equipos DevOps están sometidos a una presión cada vez mayor para ofrecer rápidamente una mayor funcionalidad a los clientes. Los proveedores de la nube ofrecen una solución a través de plataformas escalables con excelentes integraciones CLI y API. Por desgracia, las interfaces expuestas por los proveedores de la nube pueden ser incompatibles. Pero algunas herramientas nativas de la nube ayudan a los equipos DevOps a crear soluciones personalizadas para cualquier proveedor de la nube.

Dos de estas herramientas son Vagrant y Docker. Entender lo que hacen y cómo funcionan juntas es clave para sacar el máximo partido a tu entorno en la nube.

Vagrant es una herramienta para construir y gestionar entornos de máquinas virtuales (VM) en un único flujo de trabajo. Tanto si estás construyendo máquinas virtuales locales para ejecutarlas con hipervisores como si solo quieres máquinas virtuales en la nube, Vagrant proporciona un formato de configuración coherente, una única CLI y aprovisionadores compartidos para instalar software y modificar configuraciones.

Docker proporciona la capacidad de empaquetar software y configuración de apoyo en imágenes que se ejecutan de forma coherente en múltiples plataformas. Docker permite a los equipos de DevOps confiar en que el software se ejecutará en una estación de trabajo local de forma muy similar a como se ejecuta en una plataforma gestionada en la nube.

Aunque Vagrant y Docker comparten el objetivo de crear entornos reproducibles, lo hacen de formas diferentes pero complementarias. Este artículo explora cómo Vagrant y Docker logran sus objetivos.

¿Qué es Docker?

Docker es una plataforma de código abierto para desarrollar, enviar y ejecutar aplicaciones. Permite a los equipos de DevOps empaquetar software personalizado, aplicaciones de soporte y bibliotecas, así como instrucciones de configuración, redes, montajes de archivos, comprobaciones de estado y scripts de lanzamiento en un artefacto autocontenido llamado imagen.

A continuación, las imágenes se ejecutan en un entorno ligero y aislado llamado contenedor. A diferencia de las máquinas virtuales, que suelen reservar cantidades fijas de memoria y limitan estrictamente el uso de la CPU, los contenedores son mucho más elásticos y sólo consumen la memoria y la CPU que necesitan.

Esto permite que muchos contenedores se ejecuten uno al lado del otro de forma eficiente, reduciendo costes y aumentando la escala. Sin embargo, los contenedores no se consideran tan seguros como las máquinas virtuales, lo que significa que no son una solución ideal para ejecutar código no fiable.

Captura de pantalla: Sitio web Docker — Vagrant vs Docker.
Docker

¿Por Qué Utilizar Docker (frente a Vagrant)?

Los equipos DevOps suelen utilizar Docker para entregar y ejecutar aplicaciones web, incluidas las aplicaciones nativas en la nube que se integran con colas de mensajes o se alojan en plataformas de función como servicio (FaaS) que responden a desencadenantes y eventos basados en la nube.

Plataformas como Kubernetes se basan en Docker, lo que permite orquestar contenedores a escala. Además, todos los proveedores de servicios en la nube soportan la capacidad de ejecutar contenedores Docker en sus ofertas de plataforma como servicio (PaaS). Hoy en día es raro encontrar una PaaS que no admita Docker.

Docker también puede distribuir y ejecutar herramientas basadas en CLI, y todas las herramientas nativas de la nube más populares ofrecen imágenes Docker que incorporan su CLI.

¿Cuáles Son las Ventajas de Docker?

Docker resuelve un problema común al que se enfrentan los procesos tradicionales de despliegue de software, en los que las aplicaciones personalizadas podían mostrar resultados diferentes cuando se ejecutaban en la estación de trabajo local de un desarrollador y en un entorno de producción. Estas diferencias suelen ser el resultado de que los desarrolladores ejecutan versiones diferentes de lenguajes de programación, tienen configuraciones diferentes para soportar aplicaciones como servidores web, o ejecutan sistemas operativos completamente diferentes a los del entorno de producción. Estas diferencias llevan a que los problemas de soporte reboten de un lado a otro entre los equipos con comentarios como: «Funciona en mi máquina»

Como las imágenes Docker incluyen el código de las aplicaciones personalizadas, todas las aplicaciones de soporte y las bibliotecas, las imágenes se ejecutan en contenedores que proporcionan resultados más coherentes independientemente de dónde se ejecuten.

Las imágenes Docker son fáciles de distribuir utilizando registros como Docker Hub, lo que permite a los equipos DevOps compartir imágenes entre ellos rápidamente y desplegar las imágenes utilizando las distintas plataformas de alojamiento. Por ejemplo, encontrarás Docker detrás de la suite de desarrollo de WordPress DevKinsta de Kinsta.

Cuando se requieren stacks de aplicaciones más complejas, como desplegar una base de datos junto a una aplicación backend, o una colección de microservicios relacionados, Docker Compose ofrece la posibilidad de crear y enlazar varios contenedores Docker con un solo comando. Todos los contenedores, los ajustes asociados y las configuraciones de red se definen en un único archivo YAML. A continuación, Docker Compose lee este archivo para crear y gestionar varios contenedores como una sola unidad.

Docker también goza de un soporte casi universal en los principales proveedores de la nube, lo que significa que los equipos DevOps tienen mucho donde elegir a la hora de ejecutar sus imágenes Docker en la nube.

¿Qué es Vagrant?

Durante décadas, las máquinas virtuales han demostrado ser una solución fiable y segura para particionar y aprovisionar recursos informáticos. Las VM siguen siendo los servicios más populares expuestos por los proveedores de la nube y muchas soluciones comerciales y de código abierto para equipos buscan ejecutar VM en las instalaciones.

Sin embargo, esta variedad plantea un reto para los equipos de DevOps. Cada solución expone una CLI y una API diferentes para crear y gestionar máquinas virtuales, lo que dificulta mantener la coherencia entre los entornos de desarrollo locales y las plataformas basadas en la nube.

Vagrant ofrece una solución al abstraer las diferencias subyacentes entre las plataformas de máquinas virtuales, permitiendo a los equipos de DevOps aprovisionar nuevas máquinas virtuales con una única CLI y una sintaxis de configuración coherente. Los equipos que adoptan Vagrant pueden crear máquinas virtuales coherentes independientemente de si se ejecutarán en las instalaciones o en un entorno en la nube, y pueden cambiar fácilmente de un entorno a otro. Vagrant tiene multitud de usos diferentes, entre ellos como sustituto de MAMP (macOS, Apache, MySQL/MariaDB y PHP, Perl o Python).

Captura de pantalla: Sitio web Vagrant - Vagrant vs Docker.
Vagrant

¿Por Qué Usar Vagrant (frente a Docker)?

Es posible arrancar una máquina virtual y configurar manualmente el sistema operativo instalando manualmente el software y editando los archivos de configuración. Esto no es lo ideal, ya que el proceso no es replicable, lo que significa que las máquinas virtuales deben volver a crearse manualmente para diferentes sistemas operativos y proveedores. También hace casi imposible comprender cómo se configuró una máquina virtual más adelante.

Una opción mejor es automatizar el proceso necesario para configurar una máquina virtual. Vagrant proporciona una única herramienta para automatizar el proceso de construcción de máquinas virtuales para muchos proveedores. Vagrant también proporciona una gran selección de máquinas virtuales de alta calidad en Vagrant Cloud que los equipos DevOps pueden utilizar para iniciar sus propias máquinas virtuales.

¿Cuáles Son las Ventajas de Vagrant?

Los equipos DevOps que utilizan Vagrant solo tienen una herramienta que aprender, independientemente de si están creando máquinas virtuales para plataformas locales, plataformas en la nube o ambas. Puedes modificar fácilmente los archivos de configuración de Vagrant y volver a ejecutarlos o revisarlos más adelante para comprender cómo se construyó una máquina virtual.

Vagrant también permite a los equipos DevOps migrar a la nube o entre proveedores sin rediseñar el proceso que utilizan para construir máquinas virtuales.

Las VM creadas por Vagrant proporcionan un alto nivel de aislamiento, a menudo aprovechando el soporte de virtualización especializado incorporado en las CPU modernas. Esto hace que las máquinas virtuales, y las herramientas que las crean, como Vagrant, sean la mejor opción cuando la seguridad y el aislamiento son una gran prioridad.

Muchas distribuciones de Linux, como Ubuntu y Fedora, también proporcionan cajas Vagrant oficiales en las que los equipos DevOps pueden construir. Esto reduce el tiempo necesario para crear máquinas virtuales personalizadas.

Vagrant vs Docker: Una Visión Más Cercana

Tanto Vagrant como Docker hacen que los equipos DevOps sean más eficientes al automatizar la creación, distribución y ejecución de aplicaciones de software.

Docker logra este objetivo con un formato de empaquetado personalizado en forma de imágenes y un entorno de ejecución ligero mediante contenedores. Los contenedores se ejecutan de forma consistente entre plataformas, dando a los equipos DevOps una mayor confianza en que su software funciona como se esperaba. Docker está bien soportado por las plataformas en la nube PaaS y FaaS, lo que permite a los equipos DevOps elegir la mejor plataforma para sus necesidades.

Muchos contenedores pueden coexistir en un único alojamiento, principalmente — aunque no completamente — aislados unos de otros, pero compartiendo el mismo conjunto de recursos. Esto permite a los contenedores escalar eficientemente.

Vagrant logra este objetivo proporcionando un método coherente para construir máquinas virtuales con los proveedores existentes. Es una opción ideal para los equipos que ya han invertido en máquinas virtuales, confiando en su alto nivel de aislamiento, seguridad, control y personalización.

Docker también ofrece la mejor solución a la hora de ejecutar código de confianza y minimizar los costes informáticos. Los contenedores están razonablemente aislados entre sí, pero incurren en muy poca sobrecarga. Esto significa que muchos contenedores pueden ejecutarse simultáneamente en un OS compartido. Las máquinas virtuales proporcionan la mejor solución cuando los equipos necesitan altos niveles de aislamiento y seguridad o requieren la capacidad de ejecutar muchos sistemas operativos diferentes al mismo tiempo, con Vagrant proporcionando una solución conveniente para construir máquinas virtuales de una manera automatizada y replicable.

Vagrant y Docker no son tecnologías mutuamente excluyentes, y ambas herramientas pueden utilizarse juntas. Por ejemplo, los equipos de DevOps pueden utilizar Docker para desarrollar y ejecutar aplicaciones y Vagrant para recrear entornos especializados para reproducir problemas. Docker puede incluso ejecutarse dentro de una máquina virtual creada por Vagrant, quizá para probar nuevas versiones de Docker o para probar herramientas distribuidas como imágenes Docker en un entorno aislado.

Resumen

Los equipos DevOps tienen muchas opciones a la hora de crear, distribuir y ejecutar aplicaciones.

Docker proporciona un formato de imagen personalizado y un entorno de ejecución de contenedores que permite un uso eficiente y a gran escala de los recursos, y es compatible con todas las plataformas PaaS y FaaS.

Las máquinas virtuales ofrecen entornos de ejecución seguros y aislados de muchos proveedores de máquinas virtuales locales y en la nube, y Vagrant elimina muchas diferencias para proporcionar una única CLI y una sintaxis de configuración coherente para instanciar máquinas virtuales en todos los proveedores.

Antes de empezar a desarrollar tu próxima aplicación, echa un vistazo a cómo el servicio de Alojamiento de Aplicaciones de Kinsta puede aprovechar Dockerfiles para gestionar el despliegue de tu código.

Salman Ravoof

Salman Ravoof is a self-taught web developer, writer, creator, and a huge admirer of Free and Open Source Software (FOSS). Besides tech, he's excited by science, philosophy, photography, arts, cats, and food. Learn more about him on his website, and connect with Salman on Twitter.