Algunos motivos para usar Docker en el entorno de desarrollo

Muchas surgen prometiendo revolucionar el mundo de la tecnología, algunas pocas lo consiguen, muchas otras perecen una vez pasado un amplio bombo plublicitario, otras buenas tecnologías no consiguen masificarse. Al adoptar una nueva tecnología independientemente del hype que tengan es que realmente nos sea de utilidad o mejore sensiblemente lo que usábamos hasta ese momento. Docker es una de esas tecnologías que suponen un cambio a la hora de construir aplicaciones pero es muy probable que no tengamos necesidad en un proyecto de más de una base de datos, servidor web y servidor de aplicaciones. Seguramente el número de servicios que necesitamos no llegan a poco más de media docena.

Sin embargo, aunque las necesidades que nosotros tengamos no sean los de grandes empresas como Google, Facebook, Twitter u otras conocidas que tendrán gran cantidad servidores pululando y efímeros para ofrecer sus servicios Docker puede sernos de utilidad en otros aspectos. Un caso de uso es el del entorno de desarrollo necesario con el que se construye el proyecto.

En el equipo de Ticketbis Engineering hay variedad de sistemas operativos según las preferencias de cada uno, mayoritariamente Ubuntu y Mac OS X pero también Debian, Arch Linux y Windows. Esto no nos ha supuesto mucha dificultad pero tiene el inconveniente de que no utilizamos las mismas versiones de servicios, por ejemplo, con MySQL hemos visto algunas diferencias de comportamiento entre 5.5, 5.6 y 5.7. Los paquetes de Debian suelen ser de versiones antiguas y los de Arch Linux son los últimos en cada actualización. Una de las cosas en que Docker nos es de utilidad es poder usar al menos en sus versiones mayor y minor las mismas versiones de los servicios que tengamos en producción.

Además que cada uno tenga su propio entorno de desarrollo que contendrán diferencias es posible que produzca eso de «en mi máquina funciona», Docker es el entorno de ejecución de las aplicaciones que será uniforme para todos. Cuando algo cambie en el entono de desarrollo por una nueva versión o por la adición de un servicio con Docker evitaremos que cada uno lo tenga que hacer de forma individual en su equipo, ahorraremos tiempo y también problemas al usar versiones distintas como alternativa si una no está disponible en nuestro sistema.

Las veces que he instalado el paquete OpenJDK para Java en Ubuntu he visto que instala una buena cantidad de dependencias junto con él, si no queremos «ensuciar» el ordenador con la instalación de todas estas dependencias junto con las que necesiten los paquetes de otros servicios con Docker quedarán recluídas en el sistema de archivos de sus imágenes.

Instalar el entorno de desarrollo lleva tiempo, lo primero saber que hay que instalar y cada vez que en el futuro se reinstale el sistema volver a hacer lo mismo. Con Docker basta que lo instalemos, obtengamos el código de la aplicación e iniciemos el entorno con el comando $ docker-compose up, lo que es mucho más rápido para cualquiera pero sobre todo para las nuevas incorporaciones. Los archivos Dockerfile son las descripciones de nuestros servicios y como están configurados y el archivo docker-compose.yml contiene la descripción para arrancar el entorno de desarrollo, estos archivos nos sirven de documentación de lo necesario para el proyecto y como decía basta con que uno los cambie para que todos tengamos el mismo entorno modificado.

Hay que tener en cuenta que en un equipo no todos los perfiles son de desarrolladores pero que igualmente necesitan de un entorno de desarrollo como diseñadores o QAs si quieren hacer alguna prueba su equipo y no tienen el entorno de pruebas disponible. Docker les proporciona a estos perfiles un entorno de desarrollo de forma más sencilla.

Estos son varios buenos motivos para usarlo al menos para el entorno de desarrollo, y eso es importante que nos sea de utilidad tenga o no hype, lo usen muchos o un pequeño grupo de irreductibles.