28 julio, 2020

contenedoresdocker - Contenedores vs. Instancias cloud

Contenedores vs. Instancias cloud

La virtualización se viene utilizando desde hace mucho tiempo con el fin de que el software pueda aprovechar toda la capacidad del hardware. Simulando recursos hardware a través del software, la virtualización permite ejecutar múltiples aplicaciones utilizando una parte del hardware físico. Normalmente, cuando se habla de virtualización, se está hablando de la creación de máquinas virtuales que ejecutan un sistema operativo y que tienen asignadas unos recursos parciales del hardware total de la máquina física. 

Actualmente, en virtualización se ha hecho muy popular el uso de contenedores, que crean un entorno aislado para ejecutar aplicaciones. El uso de contenedores ayuda a conseguir mayor flexibilidad a la hora de portar aplicaciones entre distintos entornos, pudiendo ser trasladadas entre ambientes con un mínimo o nulo impacto. 

En este artículo hablaremos de contenedores y veremos qué son los contenedores Docker y qué es una máquina virtual.

Qué son los contenedores

Los contenedores son unos mecanismos de empaquetado de aplicaciones que permiten ejecutarlas en distintos entornos. Los contenedores separan las aplicaciones del entorno donde se ejecutan permitiendo que se implementen de forma sencilla en distintos tipos de ambientes como servidores, nubes públicas, nubes privadas u ordenadores personales de los propios desarrolladores.

Un contenedor es un entorno de pruebas seguro donde los desarrolladores pueden trabajar en una aplicación en su entorno original, sin tener que preocuparse por la portabilidad de la misma. 

Los contenedores se inician a partir de imágenes que incluyen la aplicación, así como los componentes requeridos para que se ejecuten (archivos de configuración, librerías, etc.). El uso de estas imágenes hace que la instalación sea muy sencilla (introduciendo una simple línea de comando).

Por qué usar contenedores

Los contenedores se han hecho muy populares en la actualidad gracias a los múltiples beneficios que aportan. Podemos destacar entre las principales ventajas de los contenedores:

  • Ligereza. Los contenedores no virtualizan el sistema operativo completo, ejecutándose directamente en el kernel del sistema operativo, lo que hace que sean mucho más livianos y rápidos a la hora de arrancar. Los contenedores son ideales para transferir y migrar cargas de trabajo por lo que son ideales el desarrollo e implementación de aplicaciones.
  • Uniformidad. Los contenedores aportan a los desarrolladores un entorno completo y uniforme que contiene todas las dependencias de software que la aplicación requiere (bibliotecas, versiones de lenguajes de programación y similares).
  • Portabilidad. El uso de contenedores brinda una portabilidad y autosuficiencia que permiten ejecutar la aplicación en cualquier entorno como distintos sistemas operativos (Windows, Linux y macOS), equipos físicos, máquinas virtuales, o en la nube.
  • Aislamiento. Cada contenedor aísla la aplicación del sistema operativo y de otras aplicaciones. Este aislamiento permite que los desarrolladores puedan trabajar y testear aplicaciones sin que interfieran con otras.
  • Ocupan poco espacio. Al contrario de las máquinas virtuales que pueden ocupar muchos gigas de espacio, los contenedores ocupan poco espacio en el disco. 

Qué son los contenedores Docker

Docker es un proyecto de código abierto que automatiza el despliegue de aplicaciones dentro de contenedores de software, proporcionando una capa adicional de abstracción y automatización de virtualización de aplicaciones en múltiples sistemas operativos.

Con Docker es posible encapsular todo el entorno de trabajo permitiendo trabajar en los distintos entornos de desarrollo (local, producción, test, etc.) con la misma configuración.

Docker es un programa de código abierto para crear contenedores que cuenta con una gran comunidad de usuarios que, por ejemplo, comparten contenedores a través de Docker hub. Su tecnología permite utilizar el kernel de Linux y sus funciones para separar los procesos (como Cgroups y Namespaces) y permitir que puedan ejecutarse de forma independiente. De esta forma Docker se convierte en una excelente herramienta para la gestión de contenedores individuales.

Cuando el número de contenedores con el que se trabaja empieza a ser elevado, su gestión comienza a complicarse, siendo necesario recurrir a una plataforma de gestión de contenedores, como pueden ser Docker Swarm o Kubernetes.

contenedor docker 2 - Contenedores vs. Instancias cloud
Imagen de Google Cloud

Qué son las máquinas virtuales (VM)

A medida que la capacidad del hardware ha ido aumentando (procesamiento, memoria y almacenamiento), los servidores quedaban sobredimensionados, ya que las aplicaciones seguían utilizando los mismos recursos que antes. Con el objetivo de optimizar toda esta nueva capacidad se crearon las máquinas virtuales (VM – Virtual Machine).

Las máquinas virtuales emulan un sistema operativo y tienen asignada parte del hardware físico de la máquina. Así era posible ejecutar diferentes máquinas virtuales bajo un mismo hardware, asignando a cada una unos recursos propios. Con el uso de máquinas virtuales es posible utilizar un sistema operativo dentro de otro sistema operativo.

Cuáles son las ventajas de las máquinas virtuales

El uso de una máquina virtual aporta una serie de beneficios entre los que podemos destacar:

  • La máquina virtual ofrece una arquitectura de conjunto de instrucciones distinta a la del ordenador donde se ejecuta.
  • El mantenimiento y los controles de seguridad de una máquina virtual son más sencillos y controlables.
  • Permite instalar múltiples sistemas operativos en una misma máquina, siendo independientes entre sí. Por ejemplo, es posible disponer en el mismo equipo de una máquina con Linux, otra con Windows y una tercera con macOS, todas ellas independientes.
  • Se pueden restaurar o reiniciar fácilmente y en muy poco tiempo.
  • Su uso permite reducir costes en infraestructura, aprovisionamiento más rápido del servidor y recuperación de desastres.
  • Son escalables, pudiendo aumentar sus recursos de forma sencilla.

Cuando se habla de virtualización, lo habitual es pensar en máquinas virtuales, aunque solo se trata de un tipo de virtualización donde se utiliza un sistema operativo con unos recursos virtuales. Los contenedores son otro tipo de virtualización donde la aplicación es empaquetada con las dependencias necesarias para su funcionamiento, permitiendo que se ejecute en distintos ambientes de forma óptima.

Los contenedores son una alternativa para la virtualización de hardware que aporta una gran cantidad de beneficios. Sin embargo, el uso de contenedores significa tener un nivel más bajo de seguridad que la virtualización convencional del hardware (máquinas virtuales), debido a que una vulnerabilidad del sistema afectará a todos los contenedores. Además, existen escenarios donde la paquetización de los contenedores no es una solución apropiada. Por esto, a pesar de que el uso de contenedores está muy extendido, no pueden de momento sustituir por completo a las máquinas virtuales.

 

¿Aún estás despierto?

Nosotros también. Ponte en contacto con nosotros y te ayudaremos en lo que necesites.
Contáctanos