Contenedores de software para empaquetar aplicaciones
Actualmente un desarrollador es capaz de crear código y de distribuirlo sin problemas. Antes estas labores que estaban diferenciadas entre desarrolladores y administradores de sistemas, se unen en la figura del DevOps. Esto no quiere decir que ninguna de las profesiones deje de existir, sino que existe una nueva que une lo mejor de cada una de ellas. Para haber podido dar este paso ha sido fundamental la aparición del contenedor de software.
¿Qué es un contenedor de software?
Los contenedores de software son como esos enormes contenedores que se transportan en barco y que contienen diferentes tipos de mercancías. Si bien en este caso puede que unos productos y otros no tengan nada que ver entre sí, todo lo que se encuentra dentro de un contenedor de software es necesario para poder ejecutar una aplicación en otro lugar. Así, dentro de un contenedor de software se encontrará el código, las librerías necesarias y cualquier tipo de configuración que permiten a dicha aplicación funcionar correctamente. Podríamos decir que un contenedor de software es como un sistema completo virtualizado pero reducido a su mínima expresión; que solo necesita el sistema operativo del servidor que lo contiene para funcionar.
Estos contenedores acaban con los típicos problemas entre entornos de desarrollo y producción. Puesto que todo lo necesario se encuentra dentro del contenedor, es posible hacer pruebas de una aplicación sin tener que preocuparse por si el código se rompe. Cualquier cambio que se vaya a realizar se hará de la forma más segura. Igualmente, en el caso de utilizar diferentes versiones de lenguajes de programación o cualquier elemento de software incluyendo el sistema operativo.
Dentro de un contenedor de software está todo lo necesario para que cualquier aplicación pueda ejecutarse correctamente. Además, al incluirse un archivo de configuración, es posible que cualquier desarrollador o administrador de sistemas pueda trabajar con el contenido del contenedor de software sin necesidad de conocer el funcionamiento de la aplicación.
¿Docker o Kubernetes?
Aunque se trata de sistemas relacionados, cada uno tiene sus propias funciones. Por ello, no es posible elegir entre uno u otro, sino que es necesario utilizar los dos.
Por un lado, Docker es un gestor de contenedores de código abierto; es decir, una plataforma open source que permite crear, estandarizar y distribuir aplicaciones en contenedores. Un entorno en el que desarrollar aplicaciones ligeras al no ser necesario incluir en el contenedor un sistema operativo. Mientras que Kubernetes es un orquestador de contenedores. Es decir, el encargado de manejar los procesos que se llevan a cabo dentro de un contenedor de software creado a partir de Docker.
A medida que el número de aplicaciones o contenedores de software va creciendo, es posible que Docker ya no sea suficiente para gestionarlo. Se requiere de una plataforma de orquestación que se encargue de hacer funcionar cada contenedor de software bajo la misma arquitectura. Como si fuese un director de orquesta Kubernetes se ocupa de que todo lo desarrollado en Docker funcione bien. La principal ventaja de Kubernetes es que puede ser utilizado en cualquier lugar y sobre todo tipo de infraestructuras. Un orquestador como Kubernetes se encargará de crear y reconfigurar servidores, monitorizar y realizar las configuraciones necesarias para que las aplicaciones que se encuentran dentro de un contenedor de software estén siempre operativas. El propósito no es otro que automatizar las tareas para tener un mejor control de una infraestructura.
Ni la idea de los contenedores ni del orquestador son nuevas, pero sí se han hecho más populares en los últimos años. Así, la idea de los contenedores se remonta a la virtualización de sistemas y el concepto de orquestador, entendido al modo de Kubernetes, está relacionado con Google, que ya contaba con su propio sistema antes de que apareciera Kubernetes. La principal función de estos dos sistemas es permitir que las aplicaciones puedan funcionar correctamente por sí mismas, y también en relación con las demás. Hasta el punto de que el sistema no requiera de la interacción humana para poder funcionar.
Contenedores vs máquinas virtuales
Es muy común confundir un contenedor de software con técnicas de virtualización. La virtualización es una tecnología que permite crear diferentes máquinas virtuales a partir de un único elemento físico. Cada una de estas máquinas virtuales pueden tener su propio sistema operativo y una configuración específica, a pesar de estar ejecutándose en una misma máquina física que puede tener unas características diferentes.
La virtualización es una de las técnicas que han posibilitado la tecnología cloud, tanto para crear diferentes servidores cloud en una misma máquina física, como para permitir que cada uno de ellos utilice un sistema operativo diferente. Así, la virtualización permitió dejar de utilizar máquinas físicas como única forma de aislar a un cliente de los demás, con el ahorro económico, de espacio e impacto ambiental que eso supone.
La principal diferencia entre un contenedor de software y una máquina virtual es que los contenedores no requieren de la copia del sistema operativo. Esto se debe a que comparten el mismo núcleo que la máquina en la que se ejecutarán, haciendo que el peso del contenedor se reduzca. Así, mientras que una máquina virtual ocupará varios gigas, un contenedor de software se reduce a unos cuantos megas.
En los últimos años los contenedores de software han avanzado mucho, hasta el punto de convertir una tecnología de nicho en un estándar para desplegar software. A pesar de ello, aún queda mucho por hacer con relación a ello.