Está en la página 1de 25

Seminario 1.

Tecnologías de Contenedores
Índice
1. Introducción
2. Evolución histórica
3. Tecnologías base
4. Principales características
5. Soluciones para trabajar con contenedores
6. Orquestación entre contenedores
7. Otras tecnologías relacionadas
8. Cuándo usar contenedores y cuándo no
9. Caso práctico
10.Conclusiones
11. Bibliografía
1. Introducción

La tecnología de contenedores es una forma de virtualización que permite empaquetar


aplicaciones y sus dependencias en un entorno aislado y portátil. Esto significa que los
contenedores pueden desplegarse en diferentes entornos y sistemas operativos y aun
mantener su completa funcionalidad.

La tecnología de contenedores ha tenido un gran impacto en la industria del software. Al


tratarse de una tecnología más liviana y ágil que las máquinas virtuales, y su naturaleza
aislada, han permitido a las empresas desarrollar y entregar aplicaciones más rápido y con
mayor eficiencia. Además, los contenedores han ayudado a impulsar la adopción de
arquitecturas basadas en microservicios, lo que ha mejorado la escalabilidad y la flexibilidad
de las aplicaciones empresariales.
2. Evolución histórica

La tecnología de contenedores ha experimentado un notable desarrollo a lo largo de las


décadas, transformando la forma en que se despliegan y gestionan aplicaciones. En esta
sección, se explorarán los hitos clave en la evolución de los contenedores, desde sus orígenes
en los sistemas Unix hasta su influencia actual en la informática moderna gracias, en parte, a
la revolución que fue Docker en 2013.

Los orígenes de la tecnología de contenedores se remontan a las primeras implementaciones


de entornos aislados en sistemas Unix y sistemas operativos similares. Uno de los conceptos
fundamentales en esta etapa fue la introducción de chroot (change root) en Unix en la década
de 1980. ºchroot permitía cambiar el directorio raíz de un proceso, lo que creaba una especie
de espacio aislado donde un proceso podía operar sin acceso al sistema de archivos principal.
Aunque chroot tenía limitaciones en cuanto al aislamiento completo, sentó las bases para
futuras innovaciones en este ámbito [1].

Con el tiempo, se desarrollaron conceptos más avanzados, como los entornos de ejecución de
aplicaciones y los espacios de nombres (namespaces) en el kernel de Linux. Estos avances
permitieron una mayor separación y aislamiento de procesos, sentando las bases para la
tecnología de contenedores tal como la conocemos hoy en día. La evolución de estos
conceptos iniciales hacia la creación de contenedores ligeros y portables marcó el inicio de
una nueva era en la gestión de aplicaciones y la informática en la nube [1], [2].

A medida que la informática avanzaba, surgieron tecnologías pioneras, como los FreeBSD
Jails y Solaris Zones. Estas soluciones proporcionaron entornos aislados y separados en
sistemas operativos específicos, allanando el camino para lo que eventualmente se convertiría
en la tecnología de contenedores modernos.

FreeBSD Jails, introducidos por FreeBSD en la década de 2000, permitían la creación de


entornos de sistema aislados en una sola instancia de sistema operativo. Esto significaba que
múltiples aplicaciones podían ejecutarse en entornos independientes, lo que mejoraba la
seguridad y la administración de aplicaciones.

Solaris Zones, por otro lado, era una característica innovadora de Sun Microsystems
(adquirida posteriormente por Oracle) en su sistema operativo Solaris. Estas "zonas" ofrecían
una forma eficiente de particionar un sistema en múltiples entornos aislados, con su propia
vista de recursos y sistema de archivos. Esto contribuyó a la eficiencia y la consolidación de
recursos en servidores empresariales.

Pero no es hasta 2013 que se produce un hito revolucionario en la evolución de la tecnología


de contenedores con la aparición de Docker. Docker, una plataforma de código abierto creada
por Solomon Hykes y su equipo, simplificó radicalmente la gestión de contenedores y marcó
un punto de inflexión en la adopción masiva de esta tecnología en la industria de la
tecnología.

Docker introdujo un enfoque más fácil y estandarizado para crear, distribuir y ejecutar
aplicaciones en contenedores. Ofrecía un formato de contenedor portátil que eliminaba las
diferencias entre entornos de desarrollo y producción, lo que permitía a los desarrolladores
crear aplicaciones en sus máquinas locales y luego ejecutarlas de manera consistente en
cualquier sistema que admitiera Docker. Esto abrió las puertas a la creación rápida y
confiable de entornos de desarrollo y pruebas, así como a la implementación eficiente en
entornos de producción [1], [2].

La simplicidad y eficiencia de Docker lo convirtieron en un estándar de facto en la industria


de la tecnología, lo que aceleró la adopción de la tecnología de contenedores en empresas de
todos los tamaños. La popularidad de Docker también impulsó la creación de un ecosistema
rico de herramientas y servicios relacionados con contenedores, lo que contribuyó a su rápida
expansión y aceptación.

Desde la irrupción de Docker en 2013, la tecnología de contenedores ha evolucionado


notoriamente. Se han establecido estándares abiertos, como el proyecto Open Container
Initiative (OCI), fomentando la interoperabilidad. Los contenedores han ganado terreno en la
nube, con herramientas como Kubernetes, impulsando la gestión de aplicaciones escalables.
Actualmente, los contenedores son esenciales en la informática moderna, acelerando el
desarrollo y la implementación de aplicaciones en entornos altamente competitivos. Su
flexibilidad y eficiencia han revolucionado la gestión de aplicaciones, convirtiéndolos en un
pilar fundamental en la infraestructura de TI y la informática en la nube.
3. Tecnologías base

Los contenedores informáticos son una solución tecnológica versátil y poderosa que ha
revolucionado la forma en que las aplicaciones se desarrollan, despliegan y gestionan. En su
núcleo, los contenedores dependen de un conjunto de 'Tecnologías Base' que constituyen los
cimientos de su funcionalidad. En este apartado, exploraremos estas tecnologías base,
desglosando su importancia y sus roles en el mundo de los contenedores informáticos,
proporcionando una visión integral de los elementos clave que hacen posible esta
revolucionaria tecnología.

Chroot

Es un comando en sistemas operativos tipo Unix (como Linux) que se utiliza para cambiar el
directorio raíz del sistema de archivos actual para un proceso en ejecución. Esto crea un
entorno aislado donde el proceso solo puede acceder a los archivos y directorios dentro de ese
nuevo directorio raíz, y no puede navegar más allá de ese límite.

La historia de chroot se remonta a principios de la década de 1980 y está relacionada con la


evolución de los sistemas Unix y Linux. La llamada al sistema chroot fue introducida en el
sistema operativo Unix Versión 7 (V7) en 1979, en el laboratorio de investigación Bell Labs
de AT&T, donde se desarrolló el sistema Unix original. Sin embargo, su funcionalidad y su
potencial se reconocieron y se popularizaron en las décadas siguientes.

Freebsd Jails

Es una tecnología de virtualización a nivel de sistema operativo que se originó en el sistema


operativo FreeBSD. Una "cárcel" (jail en inglés) es un entorno de sistema aislado dentro de
un sistema operativo FreeBSD que permite la ejecución de procesos y aplicaciones con un
alto grado de aislamiento y seguridad, sin necesidad de utilizar una virtualización completa
del hardware. Aunque las cárceles en FreeBSD no son lo mismo que los contenedores en
Linux, tienen algunas similitudes en cuanto a proporcionar aislamiento de procesos y
recursos.
Linux vserver

Es una tecnología de virtualización a nivel de sistema operativo que permite crear múltiples
entornos aislados en un sistema Linux. Cada uno de estos entornos aislados, llamados
"vServers," actúa como una instancia independiente de un sistema operativo Linux, con su
propio espacio de nombres de sistema, sistema de archivos raíz y configuración de red.
Linux-VServer se utiliza para mejorar la gestión de recursos y el aislamiento de aplicaciones
en un servidor Linux.

OpenVZ

Es una tecnología de virtualización a nivel de sistema operativo para sistemas basados en


Linux que permite crear múltiples entornos aislados, llamados "contenedores" o "VPS"
(Virtual Private Servers), en una única máquina física. Cada contenedor es una instancia
virtualizada de un sistema operativo Linux, con su propio sistema de archivos raíz, espacio de
nombres de procesos y configuración de red. Los contenedores de OpenVZ comparten el
mismo kernel del sistema anfitrión, lo que los hace más eficientes en términos de recursos
que las máquinas virtuales tradicionales.

Process containers

Son un concepto relacionado con la gestión y el aislamiento de procesos en sistemas


operativos, especialmente en el ámbito de Linux. A diferencia de los contenedores de
aplicaciones, como Docker, que encapsulan aplicaciones completas junto con sus
dependencias, los process containers se centran en aislar y gestionar procesos individuales o
grupos de procesos.

LXC

Es una tecnología de virtualización a nivel de sistema operativo para sistemas basados en


Linux. LXC permite crear y gestionar contenedores, que son entornos aislados y ligeros que
ejecutan aplicaciones y servicios en un sistema Linux compartiendo el mismo kernel del
sistema anfitrión. Los contenedores LXC son una forma eficiente de implementar
virtualización a nivel de sistema operativo, ya que son más ligeros en recursos que las
máquinas virtuales tradicionales y permiten el aislamiento de aplicaciones.

Warden

Es un administrador de contenedores de código abierto que se ha utilizado en el ecosistema


de la plataforma Cloud Foundry para la implementación y gestión de aplicaciones en
contenedores. Proporciona una forma de empacar y orquestar aplicaciones en contenedores
ligeros y aislados.
Namespaces

Los namespaces son una característica del kernel de Linux que proporciona aislamiento a
nivel de sistema operativo. Los contenedores utilizan distintos tipos de namespaces, como el
namespace de proceso (PID), el namespace de red (NET), el namespace de sistema de
archivos (MNT), entre otros, para crear entornos aislados donde las aplicaciones pueden
ejecutarse sin interferir con otras.

Cgroups

Los cgroups son una característica del kernel de Linux que permite limitar y controlar los
recursos del sistema, como CPU, memoria y almacenamiento, asignados a un contenedor.
Esto garantiza que los contenedores no agoten los recursos del sistema y afecten
negativamente a otras aplicaciones.
4. Principales características

El éxito de los contenedores para la gestión de aplicaciones viene dado por una serie de
características principales que los hacen una magnífica elección para ello. En este apartado,
se explorarán en detalle algunas de estas cualidades clave, que no solo optimizan la
implementación de aplicaciones, sino que también influyen en la eficiencia operativa, la
agilidad y la seguridad en el mundo de la informática moderna [3].

● Portabilidad: La portabilidad en la tecnología de contenedores se refiere a la


capacidad de un contenedor de funcionar de manera consistente en diferentes
entornos, independientemente del sistema operativo o la infraestructura subyacente.
Los contenedores encapsulan aplicaciones y sus dependencias, lo que permite que se
ejecuten de manera uniforme en máquinas locales, servidores en la nube o cualquier
entorno compatible, lo que simplifica la implementación y migración de aplicaciones.

● Eficiencia: La eficiencia en los contenedores se traduce en el uso optimizado de


recursos computacionales. Los contenedores comparten el sistema operativo
subyacente y comparten recursos, lo que resulta en una utilización eficiente de
hardware y un menor consumo de recursos en comparación con las máquinas
virtuales, lo que es esencial para la consolidación de servidores y el ahorro de costos.

● Agilidad: Permite la creación rápida de contenedores que pueden ser desplegados en


diversos entornos y empleados para abordar una amplia gama de desafíos de DevOps.
La tecnología de orquestación, como Kubernetes, automatiza la coordinación,
administración, escalabilidad y eliminación de contenedores. Kubernetes actúa como
el director de la orquesta de contenedores, permitiendo a los desarrolladores responder
rápidamente a problemas y crear soluciones nuevas sin preocuparse por despliegues
largos y complejos.

● Mejoras rápidas: Los contenedores agilizan el proceso de entrega de aplicaciones al


proporcionar entornos de desarrollo y producción consistentes. Esto acelera el ciclo de
desarrollo al permitir a los equipos de desarrollo y operaciones trabajar juntos de
manera más eficiente, lo que resulta en entregas más rápidas de nuevas características
y actualizaciones.
● Seguridad: La seguridad en los contenedores se refiere a la capacidad de aislar
aplicaciones y recursos, reduciendo la superficie de ataque. Los contenedores utilizan
mecanismos de aislamiento para mantener las aplicaciones seguras y proteger los
datos sensibles, lo que es fundamental para mantener la integridad y la
confidencialidad de la información.

● Arranque Rápido de Aplicaciones: Los contenedores permiten el inicio rápido de


aplicaciones debido a su aislamiento eficiente y la capacidad de compartir recursos.
Esto reduce los tiempos de arranque, lo que mejora la experiencia del usuario y la
capacidad de respuesta de las aplicaciones.

● Flexibilidad: En caso de necesitar cambiar rápidamente el entorno bare-metal a


virtual o viceversa, las aplicaciones contenerizadas ya están preparadas para hacer la
transición. Las aplicaciones en contenedores, especialmente aquellas que utilizan
microservicios, son tan flexibles que pueden ejecutarse en hardware dedicado o
desplegarse en entornos de nube virtual. Esto permite a los desarrolladores
reconsiderar sus recursos disponibles, aprovechando al máximo la capacidad de las
máquinas o descubriendo oportunidades para la innovación donde antes parecía que
había limitaciones de recursos.

● Gestión Simplificada: Kubernetes ofrece una variedad de herramientas que


simplifican la gestión de contenedores, como las funciones de reversión y
actualización, como parte de la plataforma. También se encarga de la instalación.
Dispone de características de auto recuperación que intentan recuperar contenedores
fallidos, finalizan los contenedores que no pasan las comprobaciones de salud y
supervisan constantemente la salud y el estado de los contenedores. Además,
Kubernetes automatiza la gestión de recursos, permitiendo asignar una cantidad
específica de CPU y RAM a cada contenedor para realizar sus tareas. En última
instancia, gestionar contenedores con herramientas como Kubernetes es mucho más
sencillo que los métodos tradicionales de gestión de aplicaciones.

En conclusión, esta serie de características y otras más han transformado la gestión de


aplicaciones. Estas cualidades permiten una implementación rápida, un uso eficiente de
recursos y una mayor flexibilidad, convirtiendo a los contenedores en un elemento esencial
en la informática contemporánea.
5. Soluciones para trabajar con contenedores
En la actualidad existen diferentes plataformas de contenedores disponibles en el mercado
con algunas diferencias entre ellas para ajustarse diferentes necesidades o mercados, a
continuaciòn se mencionan los más relevantes:

Docker

Es la solución principal y más reconocida del mercado, empezó a desarrollarse en el 2013 y


se encuentra licenciado como un Software as a Service consiguiendo Apache License 2.0
dentro de su código. Cuenta con un servicio gratuito y cuenta con un plan de costo para
cuenta personal y dos planes más para cuentas empresariales [4].

Características
Ventajas Desventajas

● Políticas de seguridad
integradas y ● Se adapta muy bien a ● Bastante difícil de
automatizadas. CI/CD. configurar.
● Ejecuta solo imágenes de ● Ahorra espacio de ● Lleva tiempo aprender
confianza. almacenamiento. esta herramienta.
● No hay bloqueo: admite ● Abundancia de imágenes ● La creación de
casi cualquier tipo de de Docker. almacenamiento
aplicación, sistema ● Ahorra horas en parches persistente requiere
operativo, infraestructura y tiempo de inactividad mucho esfuerzo.
y orquestador. en comparación con la ● No tiene una interfaz
● Operaciones ágiles virtualización. gráfica de usuario (GUI).
unificadas y ● No trabaja con las ● No tiene soporte
automatizadas. versiones o framework incorporado para Mac.
● Contenedores portátiles que tengan los diferentes
en la nube. usuarios, sino que unifica
● Gobierno automatizado. todos a un mismo
estándar.
● Código abierto.
● importante cantidad de
complementos y de
comunidad.

AWS Fargate

Es un motor de computación sin servicio de pago por uso, centralizando soluciones sin la
necesidad de administrar servidores, es decir, que no se requiere ninguna configuración ni
cluster para ejecutar el contenedor. Fargate permite al usuario enfocarse en la solución de la
aplicación y de manera sencilla administrar la infraestructura. Todos los servicios que ofrecen
tienen un costo asociado proporcional al consumo.
Características Ventajas Desventajas

● Configura el escalado por ● Facilita la creación de ● Requiere un esfuerzo


su propia cuenta y los aplicaciones nativas de la significativo para
requisitos de nube. aprender e implementar.
infraestructura para ● Permite escalar ● Bastante costoso en
contenedores. dinámicamente las cargas comparación con otros
● Permite lanzar miles de de trabajo de manera servicios de
contenedores en cuestión sencilla. contenedores.
de segundos. ● Se integra fácilmente con ● Al ser un producto nuevo
● Admite clústeres instancias EC-2. (introducido en 2017), su
heterogéneos adecuados ● Permite ejecutar soporte al cliente no es
para un escalado contenedores sin muy sólido.
horizontal rápido. preocuparse por la ● Almacenamiento limitado
● Aborda el problema de gestión de clústeres y para tareas de contenedor.
empaquetamiento de servidores.
binarios. ● Interfaz de usuario simple
● Ofrece soporte y fácil de usar.
incorporado para la red
awsvpc.

Google Cloud Platform

Google ofrece diferentes soluciones que se pueden ajustar a las necesidades del usuario. La
tarificación según el consumo por instancia para los nodos en el clúster. Los recursos de
Compute Engine se cobran por segundo con un costo mínimo de uso de 1 minuto. cuenta con
un estimador para buscar la mejor solución. El precio variará según el número de instancias,
el tipo de nodo, el espacio de almacenamiento, entre otros.

1. Google Compute Engine

Se utiliza para ejecutar cargas de trabajo en máquinas virtuales en la infraestructura de


Google. Es adecuado para implementar aplicaciones y servicios que requieren control total
sobre la máquina virtual, lo que lo hace ideal para entornos de desarrollo, pruebas y
producción. También se utiliza en la creación de canalizaciones de Integración
Continua/Entrega Continua (CI/CD) para automatizar la compilación y el despliegue de
aplicaciones.
Características Ventajas Desventajas

● Instancias de máquinas ● Interfaz web fácil de ● La supervisión integrada


virtuales (VM). aprender y simple de a través de Stackdriver es
● Balanceo de carga, usar. un poco costosa.
escalado automático, ● Precio competitivo. ● Se proporcionan
recuperación automática, ● Fuerte gestión de inicialmente cuotas muy
actualizaciones identidad y acceso. bajas (unidades de
progresivas, etc. ● VM muy rápidas. cómputo máximas).
● Acceso directo a ● Base de conocimientos y
hardware especializado. foros limitados.
● No requiere orquestación
de contenedores.

2. Google Kubernetes Engine

Es un producto lanzado en el 2015 que facilita el despliegue de aplicaciones que se


encuentren dentro de un contenedor, elimina la necesidad de configurar y operar el propio
kubernetes del cluster [5].

Características Ventajas Desventajas

● Red híbrida a través de ● Balanceo de carga ● Configurar un clúster


Google Cloud VPN. incorporado. manualmente lleva
● Gestión de identidad y ● Interfaz de usuario muy tiempo y es costoso.
acceso a través de intuitiva. ● Lento en detectar errores
cuentas de Google. ● Configuración sencilla en y desplegar correcciones
● Cumple con HIPAA y Google Cloud. automáticas.
PCI DSS 3.1. ● Un clúster se puede ● Los registros son difíciles
● Kubernetes de código gestionar directamente a de entender.
abierto gestionado. través de la interfaz web. ● Se necesita meses para
● Soporte para imágenes de ● Escalado automático. dominar esta herramienta.
Docker. ● Muy fácil de gestionar
● Sistema operativo configuraciones.
optimizado para ● Altamente seguro.
contenedores. ● Funciona sin problemas
● Soporte para GPU. con un SLA del 99.5%.
● Panel de control
incorporado.
3. Google App Engine Flexible Environment

Está diseñado para simplificar el proceso de implementación y escalabilidad de aplicaciones.


Los desarrolladores pueden empaquetar su aplicación en un contenedor y desplegarla en App
Engine Flexible Environment sin preocuparse por la infraestructura subyacente. Es una
excelente opción para alojar aplicaciones que funcionan en contenedores y se benefician de la
administración automática de la infraestructura.

Características Ventajas Desventajas

● Plataforma como servicio ● Difícil de cambiar de la ● Difícil de cambiar de la


completamente plataforma Google plataforma Google
gestionada para ejecutar Cloud. Cloud.
aplicaciones en un solo ● Elimina la necesidad de ● No muy eficiente en
contenedor. configuración manual de costos.
● Versionado de servidores. ● La interfaz de usuario es
aplicaciones y división de ● Se integra bien con otros un poco confusa.
tráfico. servicios de Google
● Escalado automático y Cloud.
balanceo de carga
integrados.
● Soporte integrado para
microservicios y SQL.

Microsoft Azure

Ofrece alternativas que se ajustan a cada diferentes necesidades, el precio que cobra
Microsoft depende del consumo y también cuenta con un estimador de precios [6].

➔ Azure Kubernetes Service: Es un servicio que facilita la implementación,


administración y escalabilidad de aplicaciones en contenedores y cluster de escalabilidad
automática mediante Kubernetes.

➔ Azure App Service: Es un servicio que permite la implementación de aplicaciones


web y móviles. Permite la implementación de APIs y aplicaciones web basadas en
contenedores en un entorno de plataforma como servicio (PaaS).
➔ Azure Container Instances: Es un servicio que permite la implementación rápida de
contenedores individuales sin necesidad de administrar clústeres. Es ideal para cargas de
trabajo de contenedores efímeros y eventos basados en contenedores.

➔ Azure Batch: Es un servicio diseñado para administrar tareas de procesamiento


intensivas. Es ideal para la programación de trabajos en lotes de gran escala y la distribución
de cargas de trabajo de alto rendimiento.

➔ Azure Service Fabric: Es un servicio que facilita el desarrollo de aplicaciones de


microservicios altamente escalables. Permite la implementación y administración de
aplicaciones basadas en microservicios en un entorno de clúster.

➔ Azure Container Registry: Es un registro de contenedores que permite almacenar y


administrar imágenes. Es útil para almacenar y distribuir las imágenes de los contenedores de
diferentes tipos y facilitar la implementación de aplicaciones.

Características Ventajas Desventajas

● Soporte híbrido de la ● Configuración sencilla. ● Una vez implementado,


plataforma. ● Interfaz de línea de la actualización de los
● Flexibilidad en la comandos muy nodos de Kubernetes es
implementación. interactiva. bastante difícil.
● Plataforma de ● Muy flexible: puedes ● No admite un sistema
contenedores gestionar la operativo híbrido:
completamente infraestructura Windows y Linux no se
gestionada. subyacente con las pueden integrar en un
● Publicación instantánea. herramientas que elijas. solo contenedor.
● Compatible con casi ● Altamente escalable.
cualquier lenguaje de ● Configuraciones
programación. simplificadas.
● DevOps y VSTS para ● Compatible con muchas
CI/CD. herramientas cliente de
● Ejecución en local o en la código abierto.
nube.
● Docker CLI de código
abierto.
● Application Insights y
Log Analytics para
obtener una vista
completa de tus
contenedores.
6. Orquestación entre contenedores

La orquestación de contenedores es el proceso de automatizar y gestionar de manera eficiente


todas las etapas del ciclo de vida de los contenedores, lo que incluye su implementación,
redes, escalabilidad, disponibilidad y administración. En el panorama actual, Kubernetes se
destaca como la plataforma líder para orquestar contenedores, y la mayoría de los principales
proveedores de servicios en la nube pública. También existen otras herramientas de
orquestación de contenedores, como Docker Swarm y Apache Mesos, que brindan opciones
adicionales para satisfacer diversas necesidades de orquestación de contenedores [7].

Imagen obtenida de MiddleWare [8].

Cada uno de los contenedores es considerado como un microservicio, la conexión y


administración entre ellos se puede realizar por diferentes herramientas, las cuales a parte de
realizar su orquestación, permite monitorizar cada uno de forma individual [8].

Cómo funciona la orquestación

● Definición de la Aplicación: Los desarrolladores describen cómo debe funcionar su


aplicación en un archivo de configuración, que especifica los contenedores necesarios, cómo
se deben comunicar, cómo escalar, etc.
● Creación de Contenedores: La plataforma de orquestación inicia contenedores
basados en la configuración proporcionada. Esto puede ocurrir en una máquina local,
servidores en la nube o incluso en un clúster de servidores.

● Gestión de Recursos: La plataforma garantiza que los contenedores obtengan los


recursos necesarios, como CPU y memoria, y los distribuye de manera eficiente en el
hardware subyacente.

● Orquestación: La plataforma se encarga de la gestión de los contenedores en términos


de escalabilidad. Si la aplicación necesita más recursos, se inician más contenedores; si hay
una caída en la demanda, se pueden reducir.

● Balanceo de Carga: Los contenedores pueden distribuirse en varios servidores físicos


o virtuales, y la plataforma de orquestación se encarga de equilibrar la carga para que ninguna
máquina esté sobrecargada.

● Descubrimiento de Servicios: La plataforma proporciona una forma de que los


contenedores se encuentren y se comuniquen entre sí, incluso si están en diferentes hosts.

● Actualizaciones y Despliegues: La orquestación facilita la implementación de


actualizaciones sin tiempo de inactividad. Puede iniciar nuevos contenedores con la última
versión y, si es necesario, detener los antiguos.

● Monitorización y Registro: Las plataformas de orquestación a menudo incluyen


herramientas para el monitoreo y registro de la actividad de los contenedores y las
aplicaciones.

● Autoscaling: En función de la carga de trabajo, la plataforma puede escalar


automáticamente la cantidad de contenedores arriba o abajo.
● Recuperación de Fallos: Si un contenedor o servidor falla, la orquestación puede
garantizar que se reemplace automáticamente para mantener la disponibilidad de la
aplicación.

● Seguridad: La orquestación puede aplicar políticas de seguridad, como la gestión de


accesos y la limitación de recursos, para garantizar la seguridad de la aplicación.

Imagen obtenida de MiddleWare [8].


7. Otras tecnologías relacionadas

Los contenedores, tecnologías que permiten la ejecución de aplicaciones en entornos aislados


y portables, se apoyan en una serie de tecnologías complementarias que desempeñan un papel
fundamental en su funcionamiento. Estas 'Otras Tecnologías Relacionadas' abarcan aspectos
como la orquestación de contenedores, la virtualización de servidores, la gestión de redes
definidas por software (SDN), y soluciones de almacenamiento avanzadas, entre otras .

Docker:

Docker es una plataforma de contenedores que simplifica la creación, implementación y


gestión de aplicaciones en contenedores.Permite empaquetar una aplicación y sus
dependencias en un contenedor, lo que garantiza la portabilidad y la facilidad de despliegue
en diferentes entornos.

Kubernetes:

Kubernetes es una plataforma de orquestación de contenedores de código abierto para


gestionar aplicaciones en contenedores a escala. Facilita la implementación, escalabilidad,
administración y operación de aplicaciones en contenedores en clústeres de servidores.

Containerd:

Containerd es un tiempo de ejecución de contenedores de código abierto que proporciona las


capacidades básicas para ejecutar contenedores.Ofrece un entorno para ejecutar contenedores
en sistemas operativos Linux y Windows, y es un componente central de muchas plataformas
de contenedores.

rkt (Rocket):

rkt es un tiempo de ejecución de contenedores de código abierto desarrollado por CoreOS,


diseñado para enfocarse en la seguridad y la simplicidad. Proporciona una forma de ejecutar
aplicaciones en contenedores con un enfoque en la seguridad y la gestión sencilla.

Open Container Initiative (OCI):

OCI es una especificación de contenedor de código abierto que establece un estándar para
formatos y tiempo de ejecución de contenedores. Proporciona interoperabilidad entre
diferentes implementaciones de contenedores, como Docker y Containerd.

8. Cuándo usar contenedores y cuándo no usarlos


Los contenedores son una tecnología versátil que se puede utilizar en una variedad de
escenarios, pero no siempre son la mejor elección para cada situación. Saber cuándo y cómo
usar contenedores es crucial para aprovechar al máximo esta tecnología.

Principalmente, la decisión de utilizar contenedores debe basarse en una evaluación


exhaustiva de las necesidades específicas de la aplicación y la infraestructura.

Imagen obtenida de BMC [9].

A continuación, se muestra una lista de cuando utiilizar y no utilizar contenedores:

Cuándo usar contenedores:


● Portabilidad y aislamiento. Los contenedores son altamente portátiles, lo que significa
que se pueden ejecutar en cualquier entorno que admita el tiempo de ejecución de
contenedores. Esto los hace ideales para desarrollar y desplegar aplicaciones que deben
funcionar en una variedad de entornos. Además, los contenedores están aislados entre
sí, lo que significa que no pueden interferir entre sí ni con el sistema operativo
subyacente. Todo esto los convierte en una buena elección para cuando es necesario
una alta portabilidad para las aplicaciones y un fuerte aislamiento entre ellas.
● Agilidad y DevOps. Los contenedores se pueden crear, iniciar y detener de manera
rápida y sencilla. Esto los convierte en una buena opción para flujos de trabajo de
desarrollo ágiles y DevOps. Los desarrolladores pueden crear y probar contenedores
localmente y luego desplegarlos en producción con un esfuerzo mínimo.
● Escalabilidad y eficiencia. Los contenedores son muy ligeros, lo que significa que
utilizan menos recursos que las máquinas virtuales tradicionales. Esto los convierte en
una buena elección para ejecutar un gran número de aplicaciones en un solo servidor.
Además, los contenedores se pueden escalar fácilmente según sea necesario.
● Arquitecturas de microservicios: los contenedores son una buena opción para las
arquitecturas de microservicios. En una arquitectura de microservicios, una aplicación
se descompone en varios servicios pequeños e independientes. Cada servicio se puede
ejecutar en su propio contenedor, lo que facilita el desarrollo, el despliegue y la
escalabilidad de la aplicación.

Cuándo no usar contenedores


● Rendimiento. Los contenedores pueden tener un ligero sobrecoste en comparación con
las máquinas virtuales tradicionales. Esto se debe a que los contenedores comparten el
mismo núcleo que el sistema operativo anfitrión. En algunos casos, esto puede dar
lugar a problemas de rendimiento, lo que en aplicaciones que requieran un rendimiento
elevado no son la mejor opción.
● Control sobre la infraestructura subyacente. Con los contenedores, se tiene menos
control sobre la infraestructura subyacente en comparación con las máquinas virtuales.
Esto puede ser un problema si necesitas realizar cambios en el sistema operativo
subyacente o si necesitas ejecutar aplicaciones que requieran características de
hardware específicas.
● Aplicaciones heredadas. No todas las aplicaciones están diseñadas para ejecutarse en
contenedores. Si se tiene una aplicación heredada que no está diseñada para ser
contenerizada, puede ser difícil o imposible ejecutarla en un contenedor.

Imagen obtenida de BMC [10].


9. Descripción de un caso práctico que aprovecha esta
tecnología
Un caso práctico que aprovecha la tecnología de contenedores es la implementación de una
plataforma de comercio electrónico basada en microservicios. A continuación se presenta una
descripción de cómo se puede aplicar la tecnología de contenedores en este contexto:

Escenario: Plataforma de Comercio Electrónico basada en Microservicios

Descripción del problema: Una empresa de comercio electrónico en crecimiento quiere


modernizar su arquitectura monolítica existente, mejorar la escalabilidad y reducir el tiempo
de inactividad durante los despliegues. También tienen como objetivo simplificar los entornos
de desarrollo, pruebas y producción.

Solución: Aprovechar la tecnología de contenedores para crear una plataforma de comercio


electrónico basada en microservicios.

● Contenerización: Los diversos componentes de la plataforma de comercio electrónico,


como el catálogo de productos, el carrito de compras, la autenticación de usuarios y el
procesamiento de pagos, se contenerizan utilizando herramientas como Docker. Cada
microservicio se empaqueta como un contenedor separado con todas sus dependencias.
● Orquestación: Se utiliza una plataforma de orquestación de contenedores, como
Kubernetes, para gestionar y escalar los contenedores. Kubernetes proporciona
funciones como el equilibrio de carga, el escalado automático y la auto recuperación, lo
que garantiza una alta disponibilidad y escalabilidad.
● Integración continua/Despliegue continuo (CI/CD): Los contenedores facilitan la
implementación de un flujo de trabajo de CI/CD. Los desarrolladores pueden enviar
cambios a sus microservicios, que se crean y despliegan automáticamente en
contenedores. Esto conduce a ciclos de desarrollo más rápidos y reduce los problemas
de despliegue.
● Portabilidad: Los contenedores son altamente portátiles, lo que significa que el mismo
microservicio en contenedor puede ejecutarse en entornos de desarrollo, pruebas y
producción con cambios mínimos. Esto elimina el problema de "Funciona en mi
máquina" y garantiza la consistencia.
● Escalabilidad: Los contenedores se pueden escalar fácilmente según las demandas de
tráfico. Kubernetes puede agregar o quitar contenedores automáticamente para
mantener un rendimiento óptimo, garantizando una experiencia de compra sin
problemas para los clientes.
● Aislamiento: Los contenedores proporcionan un fuerte aislamiento entre los
microservicios. Si un microservicio tiene problemas, no afectará a los demás, lo que
contribuye a la fiabilidad del sistema.
● Eficiencia de recursos: Los contenedores son ligeros, por lo que utilizan los recursos
del sistema de manera eficiente. Esto significa que puedes ejecutar más microservicios
en el mismo hardware en comparación con la virtualización tradicional.
● Versionado: Los contenedores permiten la creación de versiones de microservicios.
Esto significa que puedes tener múltiples versiones de un microservicio en
funcionamiento simultáneamente para acomodar implementaciones graduales y pruebas
A/B.
● Integraciones de terceros: Los servicios de terceros, como pasarelas de pago y
herramientas de análisis, se pueden integrar en la plataforma mediante contenedores, lo
que garantiza una gestión y actualización sencilla de estos servicios.
● Supervisión y registro: Las plataformas de orquestación de contenedores suelen
proporcionar herramientas para la supervisión y el registro. Esto facilita el seguimiento
de la salud y el rendimiento de los microservicios.

Al adoptar la tecnología de contenedores en este escenario de comercio electrónico, la


empresa puede lograr una mayor agilidad, escalabilidad y fiabilidad. Les permite responder
rápidamente a los cambios del mercado, gestionar cargas más altas durante las temporadas de
mayor actividad y optimizar sus procesos de desarrollo y despliegue.
10. Conclusiones

A lo largo del trabajo hemos visto cómo se originaron los contenedores y su impacto en el
desarrollo de software actualmente, así como las tecnologías que los sustentan y las diferentes
plataformas a nuestro alcance que nos permitirán el despliegue de nuestras aplicaciones.

Los contenedores son una tecnología muy potente, hemos podido comprobar que aunque en
ciertos escenarios nos puede proporcionar una mayor agilidad, escalabilidad y fiabilidad.
Pero hay que tener en cuenta otros factores como el rendimiento, el control y la naturaleza de
las aplicaciones que queremos ejecutar. Es primordial evaluar las necesidades de cada
producto y decidir si los contenedores son la mejor opción o no.
11. Bibliografía

[1] D2IQ, «A Brief History of Containers», D2IQ. Accedido: 2 de noviembre de 2023. [En
línea]. Disponible en: https://d2iq.com/blog/brief-history-containers
[2] E. Marquez, «The History of Container Technology», Pluralsight. Accedido: 2 de
noviembre de 2023. [En línea]. Disponible en:
https://www.pluralsight.com/resources/blog/cloud/history-of-container-technology
[3] R. Powell, «Benefits of containerization», circleci Blog. Accedido: 2 de noviembre de
2023. [En línea]. Disponible en: https://circleci.com/blog/benefits-of-containerization/
[4] «Docker Overview», Docker Documentation. Accedido: 2 de noviembre de 2023. [En
línea]. Disponible en: https://docs.docker.com/get-started/overview/
[5] K. Hightower, B. Burns, y J. Beda, Kubernetes: up and running: dive into the future of
infrastructure, First edition. Sebastopol, CA: O’Reilly Media, 2017.
[6] «Containers on Azure: Deploy, manage, and scale container applications using
Kubernetes and Azure Service Fabric», Microsoft Azure. Accedido: 2 de noviembre de
2023. [En línea]. Disponible en: https://azure.microsoft.com/en-us/solutions/containers/
[7] IBM, «¿Qué es la orquestación de contenedores?», IBM Topics. Accedido: 2 de
noviembre de 2023. [En línea]. Disponible en:
https://www.ibm.com/es-es/topics/container-orchestration
[8] MW Team, «What is Container orchestration: Explained with benefits and challenges»,
MiddleWare. Accedido: 2 de noviembre de 2023. [En línea]. Disponible en:
https://middleware.io/blog/what-is-container-orchestration/
[9] S. Wickramasinghe, «How Containers & Kubernetes Work Together», BMC. Accedido:
2 de noviembre de 2023. [En línea]. Disponible en:
https://www.bmc.com/blogs/containers-vs-kubernetes/
[10] J. Johnson, «Containers & Containerization: A Beginner’s Guide», BMC. Accedido: 2
de noviembre de 2023. [En línea]. Disponible en:
https://www.bmc.com/blogs/what-is-a-container-containerization-explained/

También podría gustarte