El núcleo de docker

Por que usar Docker

En la informática todo se mueve muy rápido y lo que hoy es lo último mañana no se utilizará salvo para su mantenimiento. (A no ser que seas un banco y estés atado a IBM y Cobol de por vida). Cada día vemos aparecer conceptos que nos resultan novedosos y hay tantos que no sabemos muy bien cual usar.

Hace una temporada, estábamos pensando en definir nuestra infraestructura y que todo utilizase Puppet para la ampliación automática de la misma. Dado que no tenía mucha idea de Ruby me costó mucho definir este proyecto. Tanto, que antes de terminar vi que existía otra herramienta más fácil y potente (esto es una opinión personal) y basada en un lenguaje que conocía: Ansible. Aunque tenía más manejo con Python la migración no es nada trivial y me obligo a dedicarle mucho tiempo. Lo que saque de esta experiencia es que si ahora mismo sigo buscando otra herramienta similares y más potente seguro que ya existen otras 5. Así que:

En estos tiempos los importante es acertar y no escoger

También tenemos que saber que hay muchas modas que nos pueden hacer perder mucho tiempo y a veces dinero. Porque no tenemos que utilizar todas las herramientas que aparezcan en la red o las típicas buzzword o buzztools.

Algunas me dejo guiar por mi corta experiencia pero siempre busco tareas que automaticen procesos (supongo que como todo el mundo) Si algo tienes que realizarlo muchas veces es mejor que sea automático.

Tras estas palabras a modo de introducción me centraré en lo que verdaderamente quiero expresar: por que usar Docker.

Precisamente, por lo que hablaba antes, es la forma más simple que conozco de automatizar la puesta en marcha de los sistemas. Cuando las aplicaciones eran sencillas y solo usaban PHP, APACHE y MYSQL, podías tirarte un par de horas para instalar estos simples requerimientos en una máquina. Ahora las aplicaciones son más complejas y suelen estar separadas en backend, frontend, APIScaches y otras partes que requieren de una configuración precisa para su puesta en marcha. Aquí es donde entra Docker, pero no como una moda sino como una herramienta que verdaderamente te hace la vida más fácil  (❤ Docker)

Que es exactamente.

Docker es una amalgama de tecnologías que estaban disponibles en el kernel de linux y que juntas conforman esta tecnología. Como he dicho Docker necesita del núcleo de linux por lo tanto solo funciona natívamente en este entorno pero se han hecho grandes avances en la migración tanto en Windows como en MacOSX para correr nativamente este sistema.

Dentro del kernel, Docker se apoya en:

  • lxc: tecnología del kernel para correr contendores.
  • cgroups: sistema del kernel que permite aislar procesos y asignarles PID para cada contenedor
  • aufs: es el sistema de ficheros que utiliza Docker.

Pues con todas esas tecnologías, Docker, consigue que tengas distintas “máquinas virtuales” un la misma máquina física sin necesidad de usar software de virtualización y con un consumo muy inferior de recursos.

Entonces, porqué usarlo.

La respuesta es que vamos a construir nuestra máquina virtual capa a capa hasta llegar a lo que necesitamos pero siguiendo la típica filosofía Unix:

Hacer elementos que hagan una sola cosa y que lo hagan bien

Osea que si queremos tener nuestro sistema LAMP, no creemos una máquina con todo sino que tendremos que disponer de una máquina para la base de datos, otra para PHP y Apache y otra para el código. Esto nos simplificará mucho las cosas a la hora de construir cada una que su propósito será único

Si además de esta filosofía atendemos a que vamos a construir  las máquina capa a capa podremos reutilizarlas y difundirlas con mucha más facilidad que las típicas imágenes ISO que cargarías en un sistema virtual con VMWARE o KVM.

Siguiendo con el ejemplo LAMP, si quisiéramos crear la máquina de PHP + Apache partiríamos de una imagen Linux sencilla, sin nada instalado.

>_ apt-get update && apt-get install -y apache

Una vez hecho esto ya tendríamos una máquina con apache que podemos guardar y reutilizar para disponer de un servidor de ficheros estáticos.
Siguiendo el proceso, a la máquina con Apache le instalaremos php5 y ya tendremos un servidor de páginas dinámicas que también podremos guardar como base de cualquier proyecto php5. Ahora falta instalar las librerías para conectar a base de datos o de compresión.

cajas_desacopladas_dondocker
Cajas desacopladas

Otra de las ventajas que que tiene Docker es que ya tiene máquinas creadas con todo tipo de propósito pensadas para integrar en nuestra aplicación sin ninguna configuración avanzada. Es el caso de la máquina de MySQL. Esta máquina dispone de una sencilla configuración con variables de entorno para definir 2 o 3 cosas básicas como: usuario, password base de datos. Con estos simples parámetros ya podrás disponer de una base de datos para tu proyecto.

Recapitulamos.

El uso de Docker siempre queda a elección de cada uno, pero pensar que ya tienes todo tipo de arquitecturas ya definidas por expertos y que ya han sido probadas es una característica importante como para pensar en usarlo.

Otro de los motivos es que ha pasado de ser una moda a instalarse en todas las empresas porque tiene una facilidad enorme para distribuirse junto con el código.

Por último, usar Docker de una manera indirecta nos ayuda a organizar mucho mejor nuestra arquitectura ya que nos obliga a tratar los elementos como cajas desacopladas, algo que la primera vez que oí me sonó raro pero con el tiempo te ayuda a que todo pueda crecer sin traumas.

Si todavía no lo usas te recomiendo que lo instales y hagas unas pequeñas pruebas. Si ya has empezado puede que estos artículos te sean de utilidad.

Leave a comment

Tu dirección de correo electrónico no será publicada. Los campos necesarios están marcados *