prored-contenedores-software-aplicaciones

Contenedores de software

José Luis Martínez Data Center Leave a Comment

Los contenedores de software son viejos conocidos en los entornos de desarrollo de aplicaciones, pero hoy en día han adquirido una relevancia muy destacada con la popularización de soluciones como Kubernetes o Docker.

Aunque parezcan una novedad, la realidad es que llevan con nosotros desde hace mucho tiempo. En este artículo vamos a darte una visión completa de los mismos, su historia y el porqué de su proliferación actual.

¿Qué son?

Puede que “contenedor de software” sea un término que no te diga mucho sobre lo que hay detrás, pero “virtualización de software” sí lo haga. Y es que el uso de contenedores supone en esencia eso, una virtualización a nivel del sistema operativo.

Los contenedores de software son espacios virtuales que provee el sistema operativo, de forma que parecen una computadora real para los programas que se ejecutan dentro de ellos. A menudo también son llamados particiones o jaulas (jails) porque impiden el acceso al resto del sistema.

prored-esquema-arquitectura-contenedor-software

Un contenedor se encarga de ofrecer un hardware virtual al programa, es decir:

  • Una CPU, memoria, dispositivos, conexión a red…
  • Un espacio de almacenamiento, donde escribir y leer datos.
  • Unos periféricos como impresoras, lectores de tarjetas, webcams…

Una gran ventaja es que es posible personalizar el acceso a estos recursos dependiendo del programa o usuario que los solicite, pero sin duda, la gran baza y culpable de su popularización, es que nos permite migrar a otro sistema operativo/servidor sin que la aplicación se entere de nada. Esto elimina los problemas de compatibilidad de nuestro desarrollo de un plumazo, sólo necesitamos que el nuevo sistema pueda ejecutar el software de gestión de contenedores.

Breve historia

Puede parecer un punto de vista novedoso, pero este enfoque lleva con nosotros muchos más años de lo que la gente piensa.

El primer escarceo con la virtualización a nivel de S.O. lo podemos atribuir al comando chroot de Unix Version 7 en 1979. Éste invoca un proceso con un nuevo directorio raíz del sistema, creando una “zona segura” para ejecutar programas e impidiendo poder acceder más allá del directorio especificado.

prored-unix-where-there-is-a-shell

En 1991, al bueno de William Cheswick se le ocurrió utilizar el término jail para denominar la creación un señuelo o honeypot informático mediante la utilización de chroot. Este sistema trampa fue utilizado para monitorizar las acciones de un cracker en un ataque real a sus sistemas.

En 1999, en una columna sobre seguridad informática de enero del SunWorld Online, Carole Fennelly hablaba de cómo construir una celda acolchada o padded cell (suponemos haciendo referencia a las de un manicomio) para ejecutar programas potencialmente dañinos, con la ventaja de no afectar al resto del sistema operativo. Incluso se proporcionaban scripts de implementación utilizando el manido chroot.

En el año 2000 vemos la primera implementación en un sistema operativo de un contenedor de aplicaciones. Fue en FreeBSD 4.0 donde se introdujo el comando jail que permitía dividir el sistema operativo en varios mini sistemas llamados jails.

Tras estos años, se sucedieron muchas implementaciones de sistemas con contenedores software para dar respuesta a necesidades concretas de compañías, pero no fue hasta 2013 cuando se disparó su popularidad gracias a Docker. Este proyecto de código abierto ha supuesto la estandarización del uso de contenedores y su adopción en los centros de datos como una tecnología ideal para dar una respuesta escalable, segura y de coste contenido a entornos de alojamiento virtual.

Kubernetes, un sistema operativo open source liberado por Google en 2015, llevó Docker un paso por más allá, añadiendo orquestación y gestión de grupos de varios contenedores. Sin duda todo un regalo a la comunidad, pues con él gestionó gigantescos productos de computación en la nube como Gmail, Drive, Maps o el propio buscador.

En 2017 llegó el espaldarazo definitivo con la adopción por parte de los principales clouds (Google Cloud, Microsoft Azure, Amazon AWS) de esta tecnología.

kubernetes-horizontal-color

¿Qué ventajas ofrecen?

Las ventajas de los contenedores software son parecidas a la virtualización de servidores, pero las mejora en varios aspectos. Citamos las principales:

  • Seguridad: el aislamiento que proporcionan es ideal para garantizar la independencia en entornos de almacenamiento virtual, como por ejemplo un proveedor de espacio web, donde es habitual asignar recursos hardware entre muchos usuarios diferentes.
  • Tolerancia a fallos: ejecutar aplicaciones en diferentes contenedores previene de que los fallos en una de ellas se propaguen al resto. El control de cambios permite volver atrás si alguna versión de la aplicación crea un problema.
  • Compatibilidad: no hay que preocuparse de si la aplicación funcionará en un sistema distinto al actual.
  • Escalabilidad: aumentar los recursos o instancias de la aplicación es muy sencillo y no está limitado por los recursos del servidor, pues siempre podemos agregar más máquinas hardware para ejecutar más contendedores.
  • Menores recursos: exige una menor carga al sistema operativo que la virtualización hardware, ya que no necesita de un hypervisor ni un hardware de gran rendimiento.
  • Ahorro de costes: al ser en general más ligera y sencilla, redunda en un menor coste en máquinas y equipos para administrarlos. Por otra parte, muchas de las plataformas son de código abierto, totalmente gratis.
  • Migración: es muy sencillo mover un contenedor de un servidor a otro.
  • Productividad: el entorno de desarrollo se hace estándar, facilitando la labor del equipo de desarrollo y ahorrando el tiempo en detección de fallos debido a cambios del servidor.

Sólo para grandes empresas

Podemos pensar que el uso de contenedores de software se reduce a grandes empresas, con aplicaciones a escala mundial y equipos de desarrollo inmensos. Nada más lejos de la realidad. Una empresa pequeña o startup se beneficiará mucho del uso y ventajas de los contenedores. Puede externalizar toda su infraestructura hardware a un centro de datos o cloud y usar Docker o Kubernetes para desplegar sus aplicaciones en ella. Todos los problemas inherentes a gestionar un hardware de forma local desaparecen.

Escrito por

José Luis Martínez

LinkedIN

Fuentes/Recursos:

  1. Wikipedia
  2. Cheswick.com
  3. SunWorld Online
  4. Kubernetes.io
  5. Docker.com