¿Qué es Docker?

Docker es un proyecto de software libre que permite automatizar el despliegue de aplicaciones dentro de contenedores.

Docker usa recursos del sistemas totalmente aislados, es decir, permite asignar recursos (tiempo de CPU, la memoria del sistema, el ancho de banda de la red, etc...) o combinaciones de estos recursos entre los procesos que se ejecuta en un sistema.

Para ello, Docker desarrolló la librería libcontainer, que es una impleementación que aprovecha las características de los Linux Containers (LXC) y la librería libvirt.

Por tanto, con libcontainer podemos tener una distro Linux dentro de otra distro Linux, que utilizará el kernel del anfitrión y la tarjeta de red, pero trabajará de manera encapsulada a todos los efectos, con su propia IP de red, su propia interfaz de red y sus propios procesos.

Imágenes en Docker vs. Máquinas Virtuales

Docker vs Máqunas Virtuales

Cuando usamos máquinas virtuales (sobre VirtualBox, VMWare, etc...), cada una de ellas necesita tener el sistema operativo virtualizado. Esto hace que se consumen más recursos hardware minimizando la memoria ram, procesador, etc... que puede utilizar la aplicación.

En una infraestructura sobre Docker, tenemos el motor de Docker (Docker Engine), la cantidad de recursos para cada aplicación es mayor al usar directamente los binarios y librerías para ejecutar la aplicación dentro de una imagen.

¿Para qué sirve Docker?

Su principal objetivo es simplificar la infraestructura de las aplicaciones para su despliegue y distribución.

Si implementamos Docker en una aplicación, podemos distribuir ese contenedor entre nuestro equipo de desarrollo (o quien quieras) independientemente del sistema operativo que utilicen. De esta forma, reducimos el tiempo de despliegue (o puesta en marcha) de un proyecto tanto en desarrollo como en producción.

Por tanto, lo que estamos consiguiendo es reducir la brecha entre los desarrolladores y los administradores de sistemas.

Ventajas

  • Consumen menos recursos hardware que las máquinas virtuales y éstos van exclusivamente a la aplicación.

  • Las instancias se arrancan en pocos segundos.

  • Es facil de automatizar e implantar en entornos de integración continua.

  • Existen muchas imagenes que pueden descargarse y modificarse libremente.

Desventajas

  • Sólo puede usarse de forma nativa en entornos Unix aunque se puede virtualizar gracias a boot2docker tanto en OSX como en Windows.

  • Las imágenes sólo pueden estar basadas en versiones de Linux modernas (kernel 3.8 mínimo).

  • Como es relativamente nuevo, puede haber errores de código entre versiones.

Cuando utilizarlo

Algunos de los casos de uso más normales pueden ser:

  • En ambientes de integración continua.

  • Para garantizar la integridad de la aplicación en diferentes ambientes.

  • Cuando necesitamos manejar versiones de entornos junto con el código de las aplicaciones.

  • Cuando queramos tener entornos colaborativos y/o desechables.

Repositorio de imágenes

Además de todo esto, el proyecto nos ofrece es un repositorio de imágenes al estilo Github.

Este servicio se llama Registry Docker Hub y permite crear, compartir y utilizar imágenes creadas por nosotros o por terceros.

Al igual que Github, Registry es un servicio gratuito que te permite tener un único repositorio privado y el resto serán públicos.

Pero, ¿si mi imagen cotiene una código propietario o información sensible? No importa, puedes utilizar tu propio repositorio de imágenes Docker.

Cómo probarlo sin instalar nada

Para poder entender un poco mejor de qué va todo esto, existe un tutorial online donde probar Docker sin tener que instalar nada en ninguna máquina.

https://www.docker.com/tryit/

Con este tutorial aprenderemos a:

  1. Buscar una imagen construida por un tercero en el Docker Hub Registry.

  2. Descargar la imagen, arrancarla (una imagen corriendo se llama contenedor) y echar el clásico "Hello Worl!".

  3. Instalar la utiliad ping en el contenedor, hacer commit de los cambios y ejeutar una prueba de la imagen modificada.

  4. Subir la imagen al repositorio Docker Hub Registry para que pueda ser usada por otros desarrolladores tanto en una maquina local, en un entorno de Virtualización o en cualquier servicio cloud.


En próximos post iré profundizando en el uso de esta herramienta y explicaré cómo la utilizamos en nuestra empresa.