Dockerización


Es muy probable que últimamente de una u otra forma hayas escuchado hablar de Docker en algún contexto: en una conferencia, a un desarrollador de tu empresa, a alguien de sistemas, cuando se habla de entornos, despliegues…


¿Qué es Docker?

La idea detrás de Docker es crear contenedores ligeros y portables para las aplicaciones software que puedan ejecutarse en cualquier máquina con Docker instalado, independientemente del sistema operativo que la máquina tenga por debajo, facilitando así también los despliegues. Un Docker es una herramienta que puede empaquetar una aplicación y sus dependencias en un contenedor virtual que se puede ejecutar en cualquier servidor, esto nos permite llevar esos contenedores de un servidor a otro.

Con el reciente boom de los lenguajes de scripting (lenguajes que no generan archivos binarios) este concepto se rompe un poco y los DevOps del mundo se han puesto imaginativos y a falta de un archivo binario deciden “dockerizar” las aplicaciones, entonces ahora en lugar de un archivo binario tenemos una imagen de docker que al correr sirve nuestra aplicación.



Y es que esta tecnología está bastante relacionada con el área de sistemas, con los entornos en los que se ejecutan las aplicaciones software.

Por ello, puede que al hablar de ella se utilicen palabras muy específicas, al igual que cuando se menciona Puppet (Simplifica drásticamente la administración de sistemas: Puppet en 10 min.), Chef, etc. que gente no familiarizada con estos temas no entiende.

Hoy mi objetivo con este post es que de forma clara, entiendas qué es Docker, por qué su uso se ha extendido tanto en estos años y qué beneficios aporta.

Con estas bases podrás investigar un poco más sobre Docker en la documentación oficial, foros, etc., y utilizar la herramienta de alguna manera, adaptándola a tus necesidades.


Para que podamos acceder como usuarios normales a una aplicación, dicha aplicación software necesita estar ejecutándose en una máquina, en un ordenador. Pero además, dependiendo del tipo de aplicación, dicho ordenador también necesita tener instaladas una serie de cosas para que la aplicación se ejecute correctamente: cierta versión de Java instalado, un servidor de aplicaciones (p.e tomcat, que es el software que realmente estará ejecutando mi aplicación y haciendo que pueda interactuar con ella).

Docker, me permite meter en un contenedor (“una caja”, algo auto contenido, cerrado) todas aquellas cosas que mi aplicación necesita para ser ejecutada (java, Maven, tomcat…) y la propia aplicación. Así yo me puedo llevar ese contenedor a cualquier máquina que tenga instalado Docker y ejecutar la aplicación sin tener que hacer nada más, ni preocuparme de qué versiones de software tiene instalada esa máquina, de si tiene los elementos necesarios para que funcione mi aplicación , de si son compatibles…

Yo ejecutaré mi aplicación software desde el contenedor de Docker, y dentro de él estarán todas las librerías y cosas que necesita dicha aplicación para funcionar correctamente.

En la fecha en la que se ha escrito el post, tienes que tener en cuenta que Docker utiliza ciertos aspectos de Linux, por lo que los contenedores de Docker no funcionan de forma nativa en Windows o OX. Solo funcionan en máquinas Linux, así que si necesitas ejecutar el contenedor sobre una máquina con otro sistema operativo distinto a Linux, deberás instalar una máquina virtual Linux. 

¿Qué beneficios tiene esto?
Docker es una herramienta diseñada para beneficiar tanto a desarrolladores, testers, como administradores de sistemas, en relación a las máquinas, a los entornos en sí donde se ejecutan las aplicaciones software, los procesos de despliegue, etc.

En el caso de los desarrolladores, el uso de Docker hace que puedan centrarse en desarrollar su código sin preocuparse de si dicho código funcionará en la máquina en la que se ejecutará.

Por ejemplo, sin utilizar Docker un posible escenario podría ser el siguiente (hay otras formas de solucionar este escenario, pero por poner un ejemplo claro):

– Pepe tiene en su ordenador instalado Java 8, y está programando una funcionalidad específica de la aplicación con algo que solo está disponible en esa versión de Java.

– José tiene instalado en su máquina Java 7, porque está en otro proyecto trabajando sobre otro código, pero Pepe quiere que José ejecute el código de su aplicación en su máquina. O José se instala Java 8, o la aplicación en su máquina fallará.

Este escenario desaparece con Docker. Para ejecutar la aplicación, Pepe se crea un contenedor de Docker con la aplicación, la versión 8 de Java y el resto de recursos necesarios, y se lo pasa a José.

José, teniendo Docker instalado en su ordenador, puede ejecutar la aplicación a través del contenedor, sin tener que instalar nada más.

Por eso Docker también es muy bueno para el testing, para tener entornos de pruebas. Por un lado, es muy sencillo crear y borrar un contenedor, además de que son muy ligeros, por lo que podemos ejecutar varios contenedores en una misma máquina (donde dicho contenedor tendría el entorno de nuestra aplicación: base de datos, servidor, librerías…). Por otro, un mismo contenedor funcionará en cualquier máquina Linux: un portátil, el ordenador de tu casa, máquinas alojadas en Amazon, tu propio servidor…

Esto además beneficia a la parte de sistemas, ya como los contenedores son más ligeros que las máquinas virtuales, se reduce el número de máquinas necesarias para tener un entorno.



Comentarios

Entradas más populares de este blog

¿Cómo buscar tweets antiguos de una persona?

¿Qué es la Norma GAMP 5 y para que sirve?

¿Que tipos de Mensajes de HL7 hay?