Construir una vez, correr en cualquier lugar

2

En la actualidad es habitual que personas que trabajan en sistemas se cuestionen ¿Qué es mejor? ¿Trabajar con contenedores o con máquinas virtuales?

Si bien internet está lleno de posts sobre como funcionan y que son los contenedores y máquinas virtuales, no encontré ninguna guía conceptual para principiantes, por lo que voy a orientarlos para hallar la respuesta a nuestra pregunta.

Comencemos por entender qué son los contenedores y las máquinas virtuales:

Ambos tienen objetivos similares: aislar una aplicación y sus dependencias en una unidad independiente que puede ejecutarse en cualquier lugar. Además, los contenedores y las máquinas virtuales eliminan la necesidad de hardware físico, lo que permite un uso más eficiente de los recursos informáticos, tanto en términos de consumo de energía como de rentabilidad.

La principal diferencia entre los contenedores y las máquinas virtuales está en su arquitectura.

Máquinas virtuales

Una máquina virtual es esencialmente una emulación de una computadora real que ejecuta programas como si fuera una computadora real.

Las máquinas virtuales se ejecutan sobre un equipo físico utilizando un "hipervisor". Los hipervisores, a su vez, se ejecutan en equipos físicos, que se denominan "HOSTS". Estos equipos hosts proporcionan los recursos a las máquinas virtuales, incluidos RAM y CPU; que, a su vez, se dividen entre máquinas virtuales y se pueden distribuir como a uno mejor le parezca.

Por lo tanto, si una máquina virtual ejecuta una aplicación con más recursos, se pueden asignar más recursos a ese equipo antes que las otras máquinas virtuales que se ejecutan en el mismo HOST.

Por ende, las virtuales se ejecutan en equipos Host (nuevamente, mediante un hipervisor) que contiene tanto la aplicación como lo que sea necesario para ejecutar esa aplicación (por ejemplo, binarios y librerías del sistema). También tienen componentes de hardware virtualizados que incluyen adaptadores de red, almacenamiento y CPU virtualizados. Es decir, también tienen su propio sistema operativo.

Desde el interior, la máquina virtual se comporta como una unidad propia con sus propios recursos dedicados. Desde el exterior, sabemos que es una VM que comparte los recursos proporcionados por el HOST.

Containers

A diferencia de una máquina virtual que proporciona virtualización de hardware, un contenedor proporciona virtualización a nivel de sistema operativo al abstraer el "espacio de usuario".

Para todos los propósitos, los contenedores parecen una máquina virtual. Por ejemplo, tienen espacio privado para procesar, pueden ejecutar comandos como root, tienen una interfaz de red privada y una dirección IP, permiten rutas personalizadas y reglas de iptables, pueden montar sistemas de archivos, etc.

La única gran diferencia entre los contenedores y las máquinas virtuales es que los contenedores COMPARTEN el núcleo del sistema host con otros contenedores.

En la imagen 1 se puede ver que los contenedores permiten el empaquetado de la aplicación como un todo, extrayendo el sistema operativo, la máquina, e incluso el propio código. Cada contenedor obtiene su propio espacio de trabajo aislado para permitir que múltiples contenedores se ejecuten en un host.

Esto es lo que hace que los contenedores tengan mejor performance que las máquinas virtuales debido a que comparten el Kernel del sistema operativo, se inician más rápido y utilizan una fracción de memoria en comparación con el inicio de un sistema operativo.

¿Por qué Docker?

Docker es un proyecto de código abierto basado en contenedores de Linux. Utiliza las características del kernel de Linux (como los espacios de nombres y los grupos de control) para crear contenedores sobre un sistema operativo.

Los contenedores están lejos de ser nuevos; Google ha estado utilizando su propia tecnología de contenedores durante años.

Entonces, ¿por qué Docker está ganando valor?

  1. Facilidad de uso: Docker facilitó a los desarrolladores, administradores de sistemas, arquitectos y otros, el aprovechamiento de los contenedores para construir y probar rápidamente aplicaciones portátiles. Esta tecnología permite a cualquier persona empaquetar una aplicación en su computadora portátil, que a su vez puede ejecutarse sin modificaciones en cualquier nube pública, nube privada o incluso completa.
  2. Velocidad: los contenedores Docker son muy ligeros y rápidos. Dado que los contenedores son solo entornos de espacio aislado que se ejecutan en el kernel, ocupan menos recursos. Se puede crear y ejecutar un contenedor Docker en segundos, en comparación con las máquinas virtuales, que pueden demorar más al tener que iniciar un sistema operativo virtual completo cada vez.
  3. Docker Hub: los usuarios de Docker también se benefician del ecosistema cada vez más rico de Docker Hub, que se puede considerar como una "tienda de aplicaciones para imágenes de Docker". Docker Hub tiene decenas de miles de imágenes públicas creadas por la comunidad que están disponibles al alcance de un click. Es muy fácil buscar imágenes que satisfagan sus necesidades, listas para desplegar y usar con poca o ninguna modificación.
  4. Modularidad y escalabilidad: Docker facilita la división de la funcionalidad de su aplicación en contenedores individuales. Por ejemplo, puede tener su base de datos Postgres ejecutándose en un contenedor y su servidor SAS de Visual Analytics ejecutándose en un segundo contenedor mientras sus Microservicios están en un tercer Contenedor.

Con Docker, es más fácil vincular estos contenedores para crear su aplicación, lo que facilita la escala o actualización de componentes de forma independiente en el futuro.

Ahora bien, luego de todo lo expuesto, si algún día nos cruzamos y me preguntan ¿Qué es mejor: utilizar contenedores o máquinas virtuales? Mi respuesta será:

"Nada es mejor o peor, todo va a depender de lo que vayas a querer hacer"

Podría seguir hablando sobre la arquitectura de los Dockers, como trabajarlos con SAS y demás. La semana pasada estuvimos en la convención en Raleigh, donde tratamos estos temas, pero los dejo con la intriga para el próximo artículo de arquitectura.

Share

About Author

Luis López

Systems Engineer, Fraud

Luis cuenta con más de 10 años de experiencia en el sector de informática y tecnologías de la información. Actualmente se desempeña como Head of Platform & Fraud en el área de preventas de SAS Cono Sur, brindando asistencia en los procesos de venta y preventa y articulando conocimientos tanto técnicos como de negocio que permiten demostrar el valor de las soluciones de SAS en las diferentes industrias. Anteriormente se desempeñó en el área de servicios profesionales de SAS como arquitecto. Luis es ingeniero en sistemas por la Universidad Argentina de la Empresa.

2 Comments

  1. yo lo único que veo es que no necesita un sistema operativo invitado, eso seguro lo hace más rápido, cuando te referís a la maquina puede correr en X86 como en POWER? y con respecto al propio código te referís al lenguaje de programación.
    Disculpame si las preguntas son muy obvias pero soy un comercial y dias pasados nos dieron una capacitación de una hora y no me quedo del todo claro.

    Muchas gracias

    • Luis López

      Lautaro, Los contenedores utilizan el sistema operativo del host. Hoy en día lo estamos trabajando con sistema operativo Linux (A pesar de que se hicieron ya pruebas con Windows 10).
      El hardware puede ser X64 o X86. Es indistinto.
      Cualquier consulta o duda envíame un mail a luis.lopez@sas.com y te mostramos una demo de SAS en contenedores o bien puedes participar del evento de arquitectura donde vamos a hablar de máquinas virtuales, Cloud, contenedores y kubernetes. https://www.sas.com/content/sascom/es_ar/events/19q2/foro-eyap.html

      Slds,
      Luis

Leave A Reply

Back to Top