GNU/Linux >> Tutoriales Linux >  >> Panels >> Docker

Cómo funcionan los contenedores en la nube y sus beneficios

Las tendencias tecnológicas van y vienen, pero los contenedores en la nube son una tecnología que llegó para quedarse. Sus orígenes se remontan a 1982 Unix, pero los contenedores no obtuvieron una amplia aceptación hasta la última década como el siguiente paso lógico de la virtualización. Hoy en día son un medio popular de modernización e implementación de aplicaciones.

El objetivo de la contenedorización, es decir, el proceso de migración de aplicaciones heredadas a contenedores, es ofrecer una mejor manera de crear, empaquetar e implementar aplicaciones de software complejas en diferentes entornos. La creación de contenedores proporciona una forma de hacer que las aplicaciones sean menos complejas de implementar, actualizar/cambiar/modificar y escalar.

Los contenedores son cada vez más populares en entornos de nube debido a su peso ligero en relación con las máquinas virtuales (VM). Muchas organizaciones ven los contenedores como una alternativa a las cargas de trabajo a gran escala de VM.

¿Qué son los contenedores en la nube?

Los contenedores informáticos contienen código de aplicación junto con sus bibliotecas y dependencias de funciones para que puedan ejecutarse en cualquier lugar; ya sea en una PC de escritorio, en una infraestructura de servidor de TI tradicional o en la nube.

Son pequeños, rápidos y portátiles porque, a diferencia de una máquina virtual, los contenedores no necesitan incluir un sistema operativo completo en cada instancia. Todo lo que necesitan son las bibliotecas y las dependencias necesarias para ejecutar la aplicación y aprovechar las otras funciones y los recursos necesarios del sistema operativo anfitrión.

Los contenedores se crean a partir de imágenes de contenedor, que son plantillas que contienen el sistema, las aplicaciones y el entorno del contenedor. Con las imágenes de contenedor, gran parte del trabajo de creación de un contenedor ya está hecho. Todo lo que tiene que hacer es agregar la lógica de cálculo. Hay muchas plantillas diferentes para crear contenedores de uso específico, así como bibliotecas y plantillas para desarrollar código.

Hay varios sitios de plantillas de contenedores, pero el líder del mercado es Docker, que inició la tendencia de los contenedores en 2013. Docker es un conjunto de herramientas que permite a los usuarios crear imágenes de contenedores, enviar o extraer imágenes de registros externos y ejecutar y administrar contenedores en muchos ambientes diferentes. También ejecuta el mayor centro de distribución de plantillas de contenedores. Para saber cómo instalar Docker en su sistema Linux, consulte nuestra guía de instalación y uso de Docker.

Los contenedores se reducen significativamente en tamaño y complejidad y, a menudo, realizan una sola función. El hecho de que sean pequeños no significa que no tengan que ser administrados. Los contenedores se mantienen a través de un proceso conocido como orquestación, que automatiza gran parte de las tareas operativas necesarias para ejecutar cargas de trabajo y servicios en contenedores.

La orquestación cubre la gestión del ciclo de vida de un contenedor, el aprovisionamiento, la implementación, la ampliación o reducción, las redes, el equilibrio de carga y más. Hay varias aplicaciones de orquestación, pero la más popular es Kubernetes, diseñada originalmente por Google y ahora mantenida por Cloud Native Computing Foundation.

Contenedores frente a máquinas virtuales

Los contenedores se comparan regularmente con las máquinas virtuales aquí y en otros lugares y por una buena razón. Operan con el mismo concepto, que es la operación de múltiples entornos de aplicaciones en el mismo hardware físico.

Las máquinas virtuales se consideran la base de la primera generación de computación en la nube. Con la llegada de la informática de 64 bits, los servidores evolucionaron más allá del límite de memoria de 4 GB de los procesadores de 32 bits. La llegada de la potencia de procesamiento producida por múltiples núcleos para múltiples entornos virtuales. Con suficiente memoria y núcleos, es posible ejecutar cien o más máquinas virtuales en un sistema físico.

Una máquina virtual necesita un entorno operativo completo que consuma de uno a dos gigabytes de memoria, independientemente de si se trata de un servidor Windows o una versión de Linux. Un contenedor es un entorno operativo significativamente reducido y utiliza tan solo 6 MB de memoria.

El beneficio es que puede tener cientos de contenedores en un servidor robusto, siempre que tenga la memoria y el poder de procesamiento para manejarlo todo.

Los hipervisores de VM virtualizan el hardware físico y los contenedores virtualizan el sistema operativo. El hipervisor administra y coordina todas las E/S y la actividad de la máquina, equilibra la carga y procesa todas las tareas físicas, como el procesamiento y el movimiento de datos.

Un administrador de contenedores como Kubernetes maneja tareas de software para las que el contenedor no está configurado. La aplicación dentro del contenedor tiene lo que necesita con sus bibliotecas y dependencias. Si necesita algo más del sistema operativo, el administrador de contenedores se encarga de ello.

No es una decisión de uno u otro cuando se trata de máquinas virtuales y contenedores. Pueden coexistir fácilmente, con los contenedores dentro de las VM funcionando.

¿Cómo funcionan los contenedores en la nube?

La tecnología de contenedores nació con la primera separación de particiones y procesos chroot en Unix, que luego se agregó a Linux. Los contenedores agrupan sus bibliotecas y archivos de dependencia en el contenedor en lugar de depender del sistema operativo subyacente. Las aplicaciones que se ejecutan en contenedores no son aplicaciones completas y complejas que se ejecutan en un entorno virtual o no virtual estándar. Cada contenedor opera en aislamiento virtual con cada aplicación accediendo a un kernel de sistema operativo compartido sin necesidad de máquinas virtuales.

Los contenedores en la nube están diseñados para virtualizar una sola aplicación, ya sea una aplicación simple de un solo propósito o una base de datos MySQL. Los contenedores tienen un límite de aislamiento a nivel de aplicación en lugar de a nivel de servidor, por lo que el contenedor está aislado si hay un problema. Si hubo un bloqueo de la aplicación o un consumo excesivo de recursos sin explicación por parte de un proceso, solo afecta a ese contenedor individual y no a toda la máquina virtual o al servidor completo. El orquestador puede hacer girar otro contenedor para reemplazar el contenedor problemático. También apaga y reinicia el contenedor con el problema.

Los beneficios de los contenedores en la computación en la nube

Los beneficios de usar contenedores son numerosos. Primero, el uso de plantillas es similar a cómo funcionan las clases y bibliotecas en la programación orientada a objetos (OOP). En OOP, crea una clase u objeto y luego lo reutiliza en múltiples aplicaciones. Lo mismo ocurre con los contenedores. Se utiliza una sola imagen de contenedor para crear varios contenedores. El concepto de herencia de programación orientada a objetos también se aplica a los contenedores, ya que las imágenes de contenedor actúan como padres de otras imágenes de contenedor más personalizadas.

Los contenedores se ejecutan de manera uniforme en un escritorio, un servidor local o la nube. Esto hace que probarlos antes de la implementación no sea complicado. Algunos escenarios requieren un banco de pruebas de escala similar a la configuración de implementación, lo que significa dedicar recursos considerables para el entorno de prueba. Los contenedores se pueden probar localmente antes de la implementación en la nube sabiendo que el rendimiento será constante.

La principal ventaja de los contenedores, especialmente en comparación con una VM, es que los contenedores son livianos y portátiles. Los contenedores comparten el kernel del sistema operativo de la máquina, lo que elimina muchos gastos generales. Su tamaño más pequeño en comparación con las máquinas virtuales significa que pueden funcionar rápidamente y admitir mejor las aplicaciones nativas de la nube que escalan horizontalmente.

  1. Son independientes de la plataforma:los contenedores llevan consigo todas sus dependencias y puede usarlos en diferentes versiones de Linux siempre que no haga llamadas al kernel.

  2. Admite arquitecturas de desarrollo modernas:debido a una combinación de su portabilidad/consistencia de implementación entre plataformas y su tamaño pequeño, los contenedores son ideales para las metodologías de aplicaciones y desarrollo modernas, como Agile, DevOps, sin servidor y microservicios.

  3. Mejora el rendimiento:las aplicaciones en contenedores suelen ser aplicaciones grandes divididas en partes manejables. Esto tiene múltiples beneficios, uno de los cuales es la mejora del rendimiento, ya que si un componente necesita más recursos, el contenedor se escala automáticamente para ofrecer más núcleos de CPU/memoria/redes y luego se reduce cuando la carga disminuye.

  4. Depuración eficiente:otro beneficio de la contenedorización sobre las aplicaciones monolíticas es que se vuelve más rápido para encontrar cuellos de botella en el rendimiento. Con una aplicación monolítica, los desarrolladores tienen que hacer muchas pruebas y errores/procesos de eliminación para encontrar un cuello de botella en el rendimiento. Cuando se divide en componentes, el código infractor se vuelve más visible y los desarrolladores pueden acercarse más rápido al punto problemático.

  5. Compatibilidad con varias nubes/híbridas:debido a su portabilidad, los contenedores pueden migrar de un lado a otro entre el entorno local y la nube. También pueden pasar de un proveedor de nube a otro.

  6. Modernización de aplicaciones:una forma común de modernizar una aplicación local heredada es colocarla en un contenedor y moverla "tal cual" a la nube. Este modelo se conoce como "lift and shift" y no se recomienda. Las aplicaciones locales se comportan de manera diferente a las aplicaciones nativas de la nube y simplemente mover una aplicación local a la nube sin cambios no aprovecha los beneficios de la nube, como la ampliación y reducción automáticas.

  7. Mejora la utilización:en una aplicación monolítica, toda la aplicación y todo su uso de memoria deben aumentar el rendimiento. Esto ralentiza el servidor. Con una aplicación en contenedores, solo ese componente intensivo en rendimiento necesita escalar. Lo hace automáticamente, y el orquestador amplía los recursos cuando es necesario y luego los reduce cuando la tarea está completa.

Conclusión

Los contenedores son una forma cada vez más popular para que las empresas migren aplicaciones locales a la nube y obtengan todos los beneficios que ofrece la nube:escala, elasticidad, desarrollo de DevOps y descarga de recursos locales a un proveedor de nube.

La tecnología está madura, con varios competidores de Docker, incluido Microsoft Azure, y competidores de Kubernetes, como Red Hat OpenShift. La mayoría de los proveedores de la nube ofrecen algunos servicios de orquestación y contenedores listos para usar, incluidos nosotros aquí en Linode, con un servicio Kubernetes administrado.


Docker
  1. Cómo exportar e importar contenedores Docker

  2. Supervisión de contenedores Docker:ventajas, prácticas recomendadas y herramientas imprescindibles

  3. Cómo compartir datos entre contenedores Docker

  4. Cómo instalar, ejecutar y eliminar aplicaciones dentro de contenedores Docker:parte 2

  5. Cómo instalar Docker y ejecutar contenedores Docker en Ubuntu

Cómo implementar y administrar un contenedor Docker MongoDB

Cómo usar SSH en contenedores Docker [paso a paso]

Cómo ejecutar contenedores Docker

Cómo nombrar o renombrar contenedores Docker

Cómo:Introducción a los contenedores de Windows y Docker

Cómo gestionar contenedores Docker