Docker es un proyecto open-source que permite automatizar el despliegue de aplicaciones en entornos Linux. Está basado en el formato estándar de contenedores de Linux(LXC) y permite correr aplicaciones en ambientes aislados de manera ligera.

Necessidad

Hace unos años la virtualización de sistemas era una apuesta de futuro en el mundo de las TI. Hoy en día es una herramienta de optimización muy extendida en el mundo empresarial gracias a las ventajas que proporciona, como por ejemplo:

A medida que los sistemas se van escalando, empieza a ser necesario optimizar (aún más) los recursos que usamos para desplegar aplicaciones para reducir costos y mejorar la disponibilidad, y Docker nos presenta como una posible solución.

¿Qué es Docker?

Docker es un proyecto open-source que permite automatizar el despliegue de aplicaciones en entornos Linux. Está basado en el formato estándar de contenedores de Linux(LXC) y permite correr aplicaciones en ambientes aislados de manera ligera.

Docker nos permite crear «imágenes» con nuestra aplicación y sus dependencias, garantizando que ésta funcionará, a escala, en producción o en cualquier otro ambiente. De esta manera evitamos el llamado «dependency hell» y facilitamos el desarrollo y mantenimiento de las aplicaciones.

Origen imagen : https://www.docker.io/the_whole_story/

¿Qué diferencias tiene con una MV entonces?

A diferencia de las máquinas virtuales tradicionales, un contenedor Docker no incluye un sistema operativo independiente, sino que se basa en la funcionalidad del sistema operativo proporcionado por la infraestructura subyacente. Esto es gracias a usar contenedores de Linux (LXC), ya que corren sobre el mismo sistema operativo que el mismo host. Además usa AuFS1 para sistema de archivos y se encarga de las redes por los usuarios.

Origen imagen : https://www.docker.io/the_whole_story/

Ejemplos

Para ver ejemplos prácticos la web de Docker es un muy buen recurso ya que proporciona varios ejemplos, desde un simple «hello world» en una aplicación web en Node.js o cómo compartir datos entre varios contenedores con CouchDB :

http://docs.docker.io/en/latest/examples/

Videos-tutorial

A continuación compartimos la trilogía de tutoriales que hemos creado con nuestra experiencia adquirida después de las tareas que llevamos a cabo con Telefónica I+D:

Tutorial Docker 1: Installation Dockerfile
En el primer vídeo se puede ver cómo instalar Docker y cómo crear un Dockerfile (lo que viene a ser un script para automatizar las builds de las imágenes).

Tutorial Docker 2: Tutorial PrivateRegistry
En el segundo vamos paso a paso en la creación de un Registry privado. El objetivo es conseguir tener un repositorio privado donde almacenar nuestras imágenes privadas, en lugar de usar el repositorio público de Docker.

Tutorial Docker 3: Tutorial autoDeploy Conclusion
En el tercero se puede ver el script de automatización que creamos para desplegar contenedores de Docker automáticamente especificando ciertos parámetros de configuración.

Puede consultar el código del script en el siguiente enlace: https://github.com/PDI-DGS-Protolab/docker_deployment

Recursos

LXC
https://help.ubuntu.com/lts/serverguide/lxc.html
http://linuxcontainers.org/

AuFS
http://en.wikipedia.org/wiki/Aufs
http://www.thegeekstuff.com/2013/05/linux-aufs/

Docker
https://www.docker.io/the_whole_story/
https://www.docker.io/learn/dockerfile/

Autoría

Este artículo ha sido realizado por María José Rodríguez y Carlos Person como resultado del trabajo realizado por ellos mismos y Marc Comino, integrantes del equipo uLab UPC.

—————————–
AuFS1
es un sistema de archivos en capas, de modo que se puede tener una parte sólo de lectura, y una parte de escritura, y combinarlo. De esta manera se pueden tener partes comunes del SO de sólo lectura que se compartan a través de todos los contenedores, y entonces asignar a cada contenedor su propia montura para la escritura.