¿Que es Docker?

Si eres del mundillo IT seguro que lo has oído mencionar en algún momento. Está de moda, DevOps, Docker, Continous Delivery, Continous Integration…

Mi interés en esta herramienta fue inmediato. ¿Cuantas veces he querido probar algún framework de PHP, JS, servidores de aplicaciones o servicios, y al instalar las dependencias necesarias o al configurar alguna cosilla ha entrado en conflicto con algo que ya tenía?

Simplificando mucho, Docker es un conjunto de herramientas para construir, distribuir y desplegar aplicaciones portables basada en la tecnología de contenedores. Esta tecnología es de las más usadas en la nube, gracias a lo fácil de reproducir estas aplicaciones basadas en contenedores.

Evolución del despliegue

Tradicional: HW -> OS -> APP

Al principio si queríamos ejecutar una aplicación solo teníamos una opción: Comprar un servidor, instalar un OS e instalar la aplicación. De modo que todas las aplicaciones del servidor comparten OS, entorno, sistema de archivos, memoria, CPU… De modo que si se ‘hackea’ una aplicación podría comprometer la seguridad del resto de aplicaciones e incluso del OS.

Pros:

  • Es lo que se ha hecho desde siempre

Contras:

  • Dificilmente escalable
  • Desperdicio de recursos
  • Solo un entorno de ejecución

traditional_app_anatomy

Virtualización: HW -> OS -> HV -> VM -> OS -> APP

Con la virtualización llega el aislamiento de aplicaciones. Las distintas tecnologías de virtualización usan un HyperVisor para gestionar las distintas máquinas virtuales (VM).

Pros

  • Escalable
  • Clusterización por debajo del HyperVisor
  • Varios entornos, uno por cada VM

Contras

  • Hay que mantener varios OS (actualizaciones, configuraciones,…)
  • Se desperdician muchísimos recursos del Hardware anfitrión
  • Imágenes muy pesadas (varios GB)

vm_iaas_app_anatomy

Contenedores: HW -> OS -> C -> APP

Haciendo uso de las herramientas de aislamiento de recursos del kernel de Linux, que veremos más adelante. Docker se componente de una parte servidor y otra parte cliente.

Pros

  • Muy facilmente escalable
  • Entornos distintos (Java7, OpenJDK,…) sobre el mismo OS
  • Imágenes ligeras (cientos de MB)
  • El tamaño de un contenedor, solo depende de los archivos modificados de la imagen original.
  • No es necesario tener el servidor y el cliente en el mismo OS

Contras

  • Dependencia del Kernel de Linux
  • Solo se pueden usar aplicaciones de Linux
  • Menos seguros que las VM ya que las aplicaciones se ejecutan sobre el OS anfitrión.
  • En OS X y Windows necesitamos una VM de Linux (boot2Docker) para ejecutarlo

paas_app_anatomy

Docker by example!

Actualmente uso Docker con la finalidad de no “ensuciar” mi entorno de ejecución con variables, librerías y otras cosas que puede que solo use un par de veces en algún MeetUp. También se puede usar para probar nuestra aplicación web Node.JS con distintas versiones, 0.12.7, 4, 4.1.1…

Docker user guide

Dentro de mi entorno una de las aplicaciones más utilizadas es Jenkins, un servidor de integración continua donde se compila código, ejecutan test… hay cientos de plugins!

-p 80:8080 => Mapeo del puerto interno 8080 del contenedor al puerto 80 de nuestro localhost
–name localJenkins => Nombre de la instancia del contenedor, de otra forma se genera uno automático
-v ~/Docker/Jenkins:/var/jenkins_home: => Mapeo de mi carpeta ~/Docker/Jenkins (OSX) a la carpeta /var/jenkins_home del contenedor
jenkins:1.565.2 => Imagen usada y versión, si no se especifica se usa la última

Las imágenes que más útiles me están siendo:

  • JBoss/jBpm y olvídate de tener que descargar, instalar y configurar un servidor de aplicaciones!
    https://gist.github.com/carlosjgp/78b2e95ba2078da520fdd94827a66765#file-drools-sh
  • JBoss/WildFly mi servidor de aplicaciones favorito
    https://gist.github.com/carlosjgp/78b2e95ba2078da520fdd94827a66765#file-wildfly-sh
  • Node.JS
  • MongoDB
  • MEAN.JS

No solo de Contenedores vive el developer

Detalles técnicos de Docker

Artículo de seguridad
Ilustración del uso del Kernel

Otros enlaces

Docker official
Docker Toolbox – Gracias desde OSX y Windows!
Javier Garzás – Que es Docker, sencillo
Javier Garzás – Entendiendo Docker
RedHat – Implantanción de Docker en RH
Docker Cookbook

Deja un comentario

Tu dirección de correo electrónico no será publicada.