En los últimos años, la necesidad de desarrollar aplicaciones de forma cada vez más ágil y rápida ha llevado a la emergencia de un concepto que cada vez resulta más popular. Son los llamados contenedores.
A la hora de establecer una definición de contenedor, podríamos decir que se trata de una unidad de software estándar que empaqueta código para que la aplicación se desarrolle y ejecute de forma rápida y segura. Además, también permite su paso de un entorno informático a otro, con gran agilidad. Esto hace que los contenedores se hayan erigido como la solución ideal para solventar el problema a la hora de hacer que el software funcione de manera segura cuando se mueve de un entorno a otro.
Esta característica implica importantes ventajas ya que, a la hora de desplegar aplicaciones, el desarrollador puede mover ese software desde su propio ordenador hasta un entorno de prueba, o bien hasta uno de producción, e incluso más allá, hasta un entorno de nube pública o privada.
Los contenedores disponen de un entorno de ejecución que elimina las diferencias en distintas distribuciones
Se trata de un avance importante a la hora de agilizar el despliegue de aplicaciones. No obstante, hay que tener en cuenta factores que pueden obstaculizarlo, como la disponibilidad de distinto software, que la topología de red sea diferente o que las políticas de seguridad y almacenamiento sean distintas. A pesar de todas estas, y otras dificultades que pueden surgir, el software debe poder ejecutarse.
Esto es posible gracias a que los contenedores disponen de un entorno de ejecución que consta de la aplicación más todas sus dependencias, incluidos los archivos de configuración necesarios para ejecutarla, bibliotecas, herramientas de sistema, código y tiempo de ejecución, agrupadas en un único paquete. Al estar todo contenido en este paquete, se eliminan las diferencias que puedan darse en las distintas distribuciones y la infraestructura subyacente.
Ventajas del uso de contenedores
Si bien esta configuración de los contenedores ya constituye una de las grandes ventajas que los han popularizado, otro de los grandes beneficios que proporciona su utilización es que permiten un menor uso de los recursos disponibles. Cuando un servidor ejecuta distintas aplicaciones en contenedores, ejecuta un solo sistema operativo y cada contenedor comparte el núcleo del sistema operativo con los otros contenedores. Las partes compartidas del sistema operativo son solo de lectura, mientras que cada contenedor tiene su propio soporte para escribir. Esto significa que usan menos recursos que las máquinas virtuales.
El menor consumo de recursos y una ejecución más rápidas, grandes ventajas de los contenedores
Además, otra ventaja respecto a las máquinas virtuales es que, mientras que éstas pueden tardar varios minutos en poner en marcha sus sistemas operativos y ejecutar las aplicaciones que alojan, las aplicaciones en contenedores se inician de forma mucho más rápida. Los beneficios de esto van más allá ya que, al poder iniciar las aplicaciones de forma instantánea justo cuando se necesitan y “desaparecer” cuando no se necesitan, se liberan recursos en los hosts.
Todo esto ha llevado también a disfrutar de otra ventaja como es un enfoque de microservicios. Las aplicaciones que son más complejas se pueden dividir en distintos módulos de manera que se puedan gestionar de forma más sencilla y se realicen los cambios necesarios en los distintos módulos en lugar de tener que modificar toda la aplicación.
Docker y Kubernetes, el binomio más popular
De manera general, se asocia Docker como tecnología de contenedores por excelencia ya que se ha convertido en la más popular hasta el momento. Sin embargo, no se trata de una tecnología nueva ya que se ha integrado en Linux en forma de LXC durante más de 10 años. De esta forma, Docker permite automatizar el despliegue de aplicaciones de forma rápida dentro de contenedores de software que incluyen todo cuanto necesitan para su ejecución.
Y si Docker es el contenedor por excelencia, Kubernetes se ha erigido en la plataforma de orquestación de contenedores más común en los entornos de desarrollo. Se trata de un proyecto que inició Google, y que posteriormente donó a la Cloud Native Computing Foundation, que permite implementar, mantener y escalar aplicaciones en contenedores.
Si Docker Enterprise Edition es la solución de gestión de contenedores más conocida y soportada por Kubernetes, existen muchas otras, como Tectonic de CoreOS, Open Shift Container Platform de Red Hat, que también soporta para la ejecución de estos contenedores.
Los distintos desarrollos han evidenciado la necesidad de contar con estándares para cualquier plataforma
Todos estos desarrollos han puesto en evidencia la importancia de contar con estándares. En 2015, la iniciativa Open Container Project, que posteriormente pasó a denominarse Open Container Initiative (OCI) consiguió, auspiciada por la Fundación Linux, desarrollar estándares para un formato de contenedor y software que pudiera ejecutarse en todas las plataformas. El punto de partida fue la tecnología Docker, que donó cerca del 5% de su base de código al proyecto en el que también están firmas como HP, Microsoft, Oracle, Red Hat y VMware, entre otras.
La idea es que los bloques de construcción fundamentales de la tecnología de contenedores estén estandarizados para que todos puedan aprovecharlos. Esto implica que, en lugar de gastar recursos en desarrollar tecnologías de contenedores que compitan entre ellas, las compañías pueden centrarse en desarrollar el software necesario.
Despliegue seguro de contenedores
Ante la popularidad que están adquiriendo los contenedores, mantener la seguridad de los datos que manejan es un aspecto crucial a tener muy en cuenta. Firmas como Qualys, apuntan que para una adopción de contenedores segura es importante comenzar por una búsqueda de contenedores partiendo de en qué partes de la organización se utilizan para ayudar a los desarrolladores, que suelen construir y ejecutar sus propias aplicaciones en la nube.
Otro aspecto importante es ver qué parte del desarrollo de software se basa en el uso de contenedores ya que, por lo general, el desarrollo se extiende a lo largo de toda la empresa. En este sentido, hay que tener en cuenta que, si los proyectos iniciales se desarrollan en contenedores, las pruebas, los tests de calidad y las instancias de producción se trasladarán también a los contenedores.
Es clave tener una continuidad en la evaluación y cumplimiento de toda la gestión de contenedores
Un aspecto clave a tener muy en cuenta es que, para llevar a cabo la gestión de todos estos procesos, es importante tener una buena visibilidad de todos los activos de TI. De esta forma, se tendrá conocimiento de aquellos que se conocen bien y de los que requieren datos adicionales. En este sentido, si se detecta alguna laguna, se precisará qué información hace falta, como suele ser habitual en el caso de las imágenes.
Esto pone de relevancia la necesidad de agentes integrados en cualquier contenedor estándar, una especie de sensores que permiten que los contenedores reporten automáticamente datos sobre el estado. Se trata de algo muy útil a la hora de conocer, por ejemplo, qué paquetes de software están en el entorno de ejecución y si están actualizados.
Junto a esto, es importante la continuidad en cada una de las etapas. Teniendo en cuenta que los contenedores se pueden crear y eliminar en función de la demanda, evaluación y protección de las aplicaciones que deben implementarse, es crucial tener una continuidad en la evaluación y cumplimiento de todas las partes que intervienen en la gestión de contenedores.
Tener todos estos aspectos en consideración, especialmente a la hora de trabajar en entornos cloud, contribuirá a reforzar el éxito a la hora de desarrollar, desplegar y gestionar aplicaciones de la forma en la que hoy precisan las empresas.
Imagen inicial | Guillaume Bolduc