Hoy en día las personas que desarrollamos aplicaciones usamos tecnologías diferentes para según que desarrollos. Poniendo unos ejemplos de nuestros productos:

  • OpenbravoERP: Utiliza Java, Apache tomcat y PostgreSQL.
  • SugarCRM: Utiliza Apache, PHP, MySQL y Elasticsearch.
  • Aplicaciones móviles con Ionic: Utiliza NodeJS, Apache cordova.

Esto no solo se aplica a distintos productos, sino que dentro del mismo, según la versión que tenga el cliente, se utilizan unas versiones u otras. Por ejemplo, según la versión de Sugar se necesitará una versión distinta de PHP y de Elasticsearch. En Openbravo se necesitará una versión distinta de Java, y así con cualquier proyecto.

Para alguien que desarrolla con más de una tecnología es un engorro tener que instalar en su equipo todos los servicios necesarios para poder levantar un entorno de desarrollo local. Además de que cuando formateamos o cambiamos de equipo hay que volver a instalarlo. También se hace pesado tener que estar cambiando de versiones de java para cada proyecto, por ejemplo. Todos estos problemas los podemos solucionar con Docker.

Pero… ¿Qué es Docker?

Para explicar qué es Docker, primero tenemos que tener claro el concepto de máquina virtual. Una máquina virtual es lo mismo que crear un ordenador virtual dentro del nuestro, de esta forma podemos emular un sistema operativo diferente, realizar instalaciones de prueba sin romper nuestro ordenador… El problema de las máquinas virtuales es que consumen muchos recursos de nuestro ordenador, ya que deben emular un pc completo y su sistema operativo instalado.

Docker es un sistema parecido a las máquinas virtuales. Es un sistema de contenerización de aplicaciones. No hay que emular un sistema operativo al completo. Docker utiliza el núcleo del sistema operativo de nuestro ordenador como núcleo de la máquina virtual (del contenedor en este caso). Por tanto, consume menos recursos.

Por ejemplo, cuando queremos ejecutar 3 máquinas virtuales en nuestro equipo, tenemos que cargar 3 sistemas operativos (uno en cada máquina virtual) con los recursos que eso conlleva. En cambio con el uso de contenedores simplemente tenemos una capa que sería Docker, que solo se ejecutaría una vez, y después ejecutamos los 3 contenedores con nuestras aplicaciones.

¿Cómo me ayuda Docker a desarrollar aplicaciones?

Voy a poner un ejemplo en Sugar. Como he comentado antes, según que versión tenga el cliente, necesitamos una versión de PHP y Elasticsearch distinta. La idea es que solo pierda tiempo una vez para crear una imagen para cada versión de PHP y una imagen para cada versión de Elasticsearch. Después podemos integrar Docker con distintos IDEs (el software que usamos los desarrolladores para programar) y una vez abrimos nuestro IDE, simplemente dando a un botón desplegamos un entorno completo optimizado para programar en esa versión concreta de Sugar.

Esto también ahorra tiempo a la larga, porque una persona pierde tiempo en crear las imágenes necesarias una única vez y después todo el equipo de desarrollo se beneficia de ello ya que no tienen que perder tiempo en instalar distintas versiones de PHP, Java, etc. Además, muchas veces si instalamos en el mismo sistema operativo directamente todas las tecnologías que necesitamos para programar en sus distintas versiones se ‘pegan’ entre ellas o con las distintas versiones y tenemos que perder más tiempo para que funcione todo de forma correcta.

En definitiva, Docker es una tecnología alternativa al uso de las típicas máquinas virtuales que nos permite ahorrar tiempo y recursos a la hora de montar un entorno de desarrollo, sobre todo cuando tenemos que trabajar con distintas tecnologías y distintas versiones.