Docker como herramienta para la modernización de aplicaciones tradicionales
No es ningún secreto para nadie que en los últimos 2 años Docker se ha convertido en una herramienta fundamental en cuanto tecnología de contenedores, esto ha sido un resultado de la comunidad y clientes activos que favorecen la modernización de aplicaciones tradicionales con tecnología de contenedores.
Dichas aplicaciones benefician típicamente a aquellas aplicaciones del tipo monolíticas y que corren sobre sistemas operativos como lo son Windows Server 2008 o Windows Server 2003, en los cuales son difíciles de realizar el traslado de los centros de datos o la nube.
La plataforma Docker permite resolver todos esos puntos de inflexibilidad, desacoplando la aplicación de un sistema operativo, todo ello mediante patrones de arquitectura de microservicios los cuales favorecen la portabilidad a través de las instalaciones, cloud y ambientes híbridos
Docker ha invertido en herramientas y métodos para agilizar la transmisión de contenedores y al mismo tiempo disminuir el tiempo necesario para experimentar un valor superior por parte de la plataforma.
Descubrimiento y evaluación de aplicaciones
Los desarrollos empresariales mantienen un gran portafolio de aplicaciones, dichas aplicaciones cuentan con diferentes lenguajes, idiomas y marcos de arquitectura desarrollado por terceros. El primer paso se requiere al implementar Docker es determinar cuáles aplicaciones cumplen con los parámetros para ser contenida así como determinar dónde iniciar cada proceso.
El primer paso común es seleccionar la aplicación más compleja y sofisticada para ser contenida; la razón principal es el razonamiento de complejidad, asumiendo que si es posible contener una aplicación robusta, las aplicaciones que tienen menor peso responderán de la misma manera.
Para aquellas organizaciones nuevas la implementación de Docker suele ser un poco difícil debido en gran medida por la curva de aprendizaje, una aproximación prudente es el acercamiento al proceso de contenedores con aplicaciones menos complejas, lo cual permite alinear los objetivos y las metas, este proceso fomenta las habilidades del equipo, incrementando su experiencia para posteriores proyectos de mayor complejidad.
De igual manera Docker ha desarrollado una serie de arquetipos que permiten agrupar aplicaciones similares basadas en características de arquitectura, con el fin de estimar la complejidad que requiere a la hora de ser contenidas.
Evaluar los portafolios de aplicaciones con cada uno de los arquetipos beneficia al proceso de estimación de nivel de dificultad, así como la rápida selección de los candidatos más idóneos para ser contenidos en cada proyecto. Existen diversos métodos para la evaluación como lo son:
- Evaluación manual de cada una de las aplicaciones.
Este método funciona bien con un pequeño número de aplicaciones, sin embargo es complicado realizarlo en entornos escalables (más de 100 aplicaciones)
- Configurar un (CMDBs) Configuration Management Databases
Cuando se aplica en una organización es una poderosa herramienta que provee información detallada acerca del ambiente como lo son características y arquetipos relacionados.
- Herramientas automatizadas como RISC Networks, Movere, BMC Helix Discovery
Son herramientas de terceros que ofrecen información detallada sobre los ambientes de los centros de datos (data center), monitoreando la información durante un periodo de tiempo y generando reportes, dichos reportes pueden ser utilizados en el proceso de contener aplicaciones y a su vez permite conocer la carga de trabajo que implica.
Automatización de contenedores
Construir un contenedor para aplicaciones tradicionales puede presentar muchos retos, alguna de las razones habituales que se presentan es que el desarrollador original de la aplicación ya no está trabajando más en el proyecto o en el equipo, lo cual dificulta el proceso de entender cuál es la lógica de la aplicación o como fue construida, el código fuente no está disponible o las aplicaciones se ejecutan en máquinas virtuales sin activos, por ello la escalabilidad de los esfuerzos de contener docenas o ciento de aplicaciones requieren de mucha más tiempo.
Debido a esas particulares necesidades Docker cuenta con herramientas que ayudan al usuario, que a su vez forman parte de Docker Enterprise Platform, esta herramienta ha sido desarrollada para automatizar y generar archivos “Dockerfiles” para aquellas aplicaciones que corren sobre un maquina virtual o un servidor. Los servidores son escaneados para determinar cómo es el sistema operativo así como su configuración, como los servicios web están configurados y como el código está corriendo. Todos los datos son unidos dentro de un DockerFiles y el código de la aplicación es puesto dentro de un directorio el cual está listo para ser implementado en un moderno sistema operativo, por ejemplo, un Windows Server 2003 puede ser escaneado para generar DockerFiles para aplicaciones IIS-Based.Net que se ejecutan en grupos de aplicaciones IIS Pools. Esta manera de trabajo y automatización permite cambiar de ser un autor a convertirse en un editor, disminuyendo significativamente el tiempo y esfuerzo que se invierte en realizar contenedores tradicionales de aplicaciones.
Gestión de Cluster
Correr contenedores sobre un único servidor puede ser suficiente para un solo desarrollador, sin embargo un cluster que tiene servidores trabajando en conjunto requiere de sistemas de contenedores, históricamente la creación y administración de este tipo de clusters son controlados por un servidor público en la nube, vinculando a los usuario para que pueda utilizar la infraestructura.
Un nuevo Docker CLI Plugin, llamado “Docker Cluster” es incluido en el paquete de Docker Enterprise 3.0, Docker Cluster simplifica la creación inicial de Docker Enterprise consumiendo un archivo declarado YAML, el cual automáticamente provee y configura los recursos de la infraestructura. Los Clusters tal vez utilizan una variedad de infraestructuras, incluyendo Azure, AWS, and VMware, con el fin de mantener plataformas de contenedores idénticas en cada una de sus infraestructuras objetivo.
A su vez agrega flexibilidad y disminuye las necesidades de elegir un único proveedor, permitiendo a su vez utilizar entornos multi-clound, entornos híbridos y provee la opción de desplegar contenedores ya sea los orquestadores Kubernetes o Swarm.
Más allá de la herramienta de automatización, docker también ofrece detalles específicos sobre la infraestructura, referentes a la arquitectura la cual incluye un catálogo de las mejores prácticas para varios proveedores, dichos documentos ofrecen una guía exhaustiva sobre la implementación de Docker Enterprise adicionalmente a la herramienta CLI.
En conclusión, el proceso de crear contenedores ha sido ampliamente simplificado por Docker Enterprise mediante soluciones como Docker Cluster, Solution Briefs y Reference Architectures, estas herramientas le permiten enfocarse en el proceso de contener aplicaciones heredadas en lugar de invertir tiempo adicional en la configuración de un clúster de contenedores.