Skip to main content

¿Qué es un Contenedor?

1.1. Entonces vamos allá, ¿qué es un contenedor?

Contenedor es, en palabras simples, la agrupación de una aplicación junto con sus dependencias, que comparten el kernel del sistema operativo del host, es decir, de la máquina (virtual o física) donde está ejecutándose. ¿Se entiende?

Los contenedores son bastante similares a las máquinas virtuales, pero más ligeros y más integrados al sistema operativo de la máquina host, ya que, como ya dijimos, comparten su kernel, lo que proporciona mejor rendimiento debido a la gestión única de los recursos.

En la mayoría de los casos, la imagen de un contenedor es bastante ligera, teniendo solamente lo necesario para el funcionamiento de la aplicación, que, cuando está en ejecución, posee un pequeño overhead si se compara con la misma aplicación ejecutándose nativamente en el sistema operativo, gran parte de esto debido a la compartición de los recursos con la máquina host.

Cuando estamos utilizando máquinas virtuales, emulamos un nuevo sistema operativo y virtualizamos todo su hardware utilizando más recursos de la máquina host, lo que no ocurre cuando utilizamos contenedores, pues los recursos son compartidos. La ganancia obvia de esto es la capacidad de ejecutar más contenedores en un único host, si se compara con la cantidad que se conseguiría con máquinas virtuales.

A continuación, en la figura, podemos notar las diferencias de cuando tenemos aplicaciones siendo ejecutadas nativamente, máquinas virtuales y por último en contenedores. Nótese que no es necesario emular un nuevo sistema operativo cuando estamos utilizando contenedores, a diferencia de las máquinas virtuales.

DIFERENCIAS ENTRE MÁQUINA VIRTUAL Y CONTENEDORES

Otro punto interesante en la utilización de contenedores es la portabilidad. No importa en qué ambiente creaste tu contenedor, se ejecutará en cualquier otro que tenga, en nuestro caso, Docker instalado, ya sea en Linux, MacOS o Windows. No necesitas preocuparte por las dependencias, está todo dentro del contenedor. :D

El desarrollador consigue, en su propia máquina, crear una aplicación en contenedor y después ejecutarla en un servidor de producción sin ningún problema de dependencia o algo similar -- ni siquiera el viejo y conocido "curioso, en mi máquina funciona" se escapa, ¿eh?

Recuerda: en la máquina virtual emulas un nuevo sistema operativo dentro del sistema operativo del host. Ya en el contenedor emulas solamente las aplicaciones y sus dependencias haciéndolo portátil.

1.2. ¿Y cuándo comenzó que no lo vi?

A pesar de que el término se ha vuelto hype en los últimos años, durante décadas ya utilizábamos contenedores en sistemas Unix a través del comando chroot. Sí, mucho más simple, es verdad, pues era apenas una forma de aislar el filesystem, ¡pero ya era el comienzo!

A continuación vinieron los jails de FreeBSD, que, además del aislamiento del filesystem, permitían también el aislamiento de procesos, seguidos de cerca por Sun, que desarrolló Solaris Zones, una solución más basada en contenedores, pero solamente para sistemas Solaris.

El gran paso hacia el escenario que tenemos hoy fue la creación, por Parallels de Virtuozzo, de un panel que permitía la fácil gestión de contenedores y la disponibilización del core de Virtuozzo como open source con el nombre de OpenVZ.

OpenVZ fue una herramienta que ganó bastante destaque en la gestión de contenedores y ayudó mucho en la popularización del VPS (Virtual Private Server) y, consecuentemente, en la creación de cientos de empresas de hosting esparcidas por el mundo. El principal punto negativo de OpenVZ era la necesidad de aplicar un patch en el kernel Linux.

Poco después de surgir OpenVZ, Google inició el desarrollo de CGroups para el kernel de Linux e inició la utilización de contenedores en sus datacenters.

En 2008, desarrolladores de empresas como Virtuozzo, IBM y el propio Google iniciaron el proyecto LXC, que traía consigo CGroups, namespaces y chroot para proveer una completa y estable solución para la creación y gestión de contenedores.

Sin embargo, fue en el año 2013 que los contenedores conquistaron el mainstream, salieron del underground a través de la utilización masiva por las empresas de internet y gigantes de tecnología e invadieron los principales eventos de tecnología alrededor del mundo, con conferencias sobre el éxito en la utilización de contenedores y con el mejor aprovechamiento de los recursos físicos como CPU y memoria, mayor agilidad en el deployment de nuevas aplicaciones en fracción de segundos y todo esto con una facilidad que impresiona. Amigo, estamos hablando del simplemente sensacional Docker.