Comparte este artículo

Se han invertido numerosas horas de análisis exhaustivo y desarrollo, y tú y tu máquina sois el último obstáculo entre el software y su lanzamiento a producción. Te pones a punto, instalas, realizas el testing adecuado de tus casos de prueba, previamente acordados con el resto de tu equipo, y todo va como la seda. Luz verde. El programa está listo para “salir ahí fuera”. Sin embargo, en un giro inesperado de los acontecimientos, comienza a fallar en manos de los clientes, y se desata el caos y el nerviosismo. ¿Por qué? ¿Qué ha pasado si todo ha ido bien? La respuesta es sencilla (aunque su solución no tanto): las reglas del juego han cambiado.

Actualmente, el mundo de la tecnología es un mundo extremadamente heterogéneo, donde conviven numerosos sistemas operativos, que a su vez tienen versiones diferentes, y que a su vez tienen instalados programas de todo tipo. Que tu software haya funcionado en tu máquina de testeo, ya no quiere decir que vaya a funcionar en la de tus clientes. Ellos juegan con otras piezas.

PRIMERA APROXIMACIÓN: LAS MÁQUINAS VIRTUALES

Una vez recuperado del pánico del momento y vuelta a la calma en tu mente para analizar la situación, hasta ahora, una de las primeras soluciones que se pueden pasar por delante es la de las máquinas virtuales.

Una máquina virtual se encarga de simular un entorno predefinido completo y controlado, de forma que se podría ir creando aquellos entornos en los que consideres que tus clientes pueden utilizar el software y realizar el testeo por separado. Pero presentan un grave problema: la escalabilidad.

Como hemos comentado, es un mundo heterogéneo, y los entornos que habría que simular mediante máquinas virtuales son demasiados. Dado que una máquina virtual, para crearse y vivir, necesita consumir los recursos del sistema anfitrión, el establecer un gran número de máquinas virtuales, hace que sea inviable por las limitaciones que presenta.

SURGE DOCKER: CONTENEDORES PARA TODO

Las máquinas virtuales ya no son una opción, por tanto se necesita “aligerar peso”. De esta premisa, necesitamos una herramienta que nos permita desplegar entornos de una forma sencilla, frágil y rápida: Docker.

surger docker container

Docker nos permite desplegar entornos sin la necesidad de virtualizar el sistema completo (lo que Docker denomina contenedores). Bajo nuestro Sistema Operativo, de una forma transparente, los contenedores disponen exclusivamente de los programas necesarios para hacer funcionar nuestra aplicación. Además, se permite “empaquetarlo” y desplegarlo en cualquier otro sistema, sea el que sea. Sus ventajas son:

  • Portabilidad

Un contenedor de Docker puede desplegarse en cualquier otro sistema de forma instantánea, ahorrándonos tener que instalar los programas necesarios de nuevo.

  • Ligereza

Al no tener que simular el sistema completo con su sistema operativo, los contenedores de Docker son muy ligeros, ocupando pocos MB de memoria y consumiendo muy pocos recursos del sistema anfitrión.

  • Independencia

Un contenedor de Docker es independiente y aislado de otros contenedores y del propio sistema anfitrión. De esta forma, se evita el “ruido” externo de otras aplicaciones o instalaciones y la comunicación entre el Sistema Operativo y el contenedor es controlado por el desarrollador.

De esta forma, con Docker, podemos crear un contenedor por entorno de forma muy sencilla, con los programas y sus versiones, todos ellos diferentes, y que cubren todo el abanico de posibilidades que podrían utilizar nuestros clientes.

Por ejemplo, si nuestra aplicación usa una base de datos Microsoft SQL Server, en nuestra máquina es probable que tengamos instalada la última versión, la 2016. Sin embargo, existen versiones anteriores (2003, 2005, 2008, 2010, etc…) que también deberíamos contemplar. Mediante Docker, crearíamos varios contenedores con las diferentes versiones de SQL Server y lanzar nuestros tests en ellos, asegurándonos de que funciona en todas, con lo cual estamos en posición de asegurar que no vamos a tener problemas con SQL Server en producción.

REFINANDO LA SOLUCIÓN: HAGÁMOSLO AUTOMÁTICO

Llegados a este punto, nos hemos recuperado del desastre, y además hemos dado con una solución adecuada a nuestros intereses y que puede mitigar fallos anteriores (incluso anticiparnos a ellos, creando contenedores con futuras versiones de un programa, por ejemplo). Pero todavía podemos ampliarlo mucho más si añadimos otro factor a la ecuación: la automatización.

Docker permite, mediante un servidor de integración continua, construir y desplegar contenedores de forma automática, realizar operaciones de testeo dentro de dichos contenedores, y realizar informes de las ejecuciones. Dicho de otra manera, le pasamos la responsabilidad al servidor de IC para que realice todo el proceso de forma automática, y sea el encargado de gestionar y destruir los contenedores.

docker

En conclusión, con Docker no solamente hemos salvado las limitaciones de recursos y escalabilidad que tenían las máquinas virtuales de antaño, sino que además, disponemos de una herramienta que permite simular de una vez cualquier entorno posible en el que nuestra aplicación va a ser usado, de una forma sencilla, ligera y portable, pudiendo incluso a automatizar el proceso de testeo.

 

Ahora sí jugamos con todas las piezas.


Comparte este artículo