Contenedores 101: Introducción a Docker.

¿Qué es Docker?

Docker es un proyecto de código abierto que automatiza el despliegue de aplicaciones dentro de contenedores de software, proporcionando una capa adicional de abstracción y automatización de Virtualización a nivel de sistema operativo en Linux. Docker utiliza características de aislamiento de recursos del kernel de Linux, tales como cgroups y espacios de nombres (namespaces) para permitir que "contenedores" independientes se ejecuten dentro de una sola instancia de Linux, evitando la sobrecarga de iniciar y mantener máquinas virtuales.

Historia

Salomón Hykes comenzó Docker como un proyecto interno dentro dotCloud, empresa enfocada en plataforma como un servicio (PaaS), con las contribuciones iniciales de otros ingenieros de dotCloud, incluyendo Andrea Luzzardi y Francois-Xavier Bourlet. Jeff Lindsay también participó como colaborador independiente. Docker representa una evolución de la tecnología patentada de dotCloud, que es a su vez construida sobre proyectos de código abierto anteriores como Cloudlets.

Docker fue liberado como código abierto en marzo de 2013. El 13 de marzo de 2014, con el lanzamiento de la versión 0.9, Docker dejó de utilizar LXC (Linux Containers) como el entorno de ejecución por defecto y lo reemplazó con su propia librería, libcontainer, escrita en Go (lenguaje de programación). El 13 de abril de 2015, el proyecto tenía más de 20.700 estrellas de GitHub (haciéndolo uno de los proyectos con más estrellas de GitHub), más de 4.700 bifurcaciones ("forks"), y casi 900 colaboradores.

Un análisis en mayo de 2015 mostró las siguientes organizaciones como las principales contribuyentes de Docker: Red Hat (mayores contribuyentes, aún más que el equipo de Docker en sí), el equipo de Docker, IBM, Google, Cisco Systems y Amadeus IT Group.

Contenedores vs Maquinas virtuales: Cuál es la diferencia ?

Los contenedores tienen aislamiento y asignación de recursos similares a las de las máquinas virtuales , pero un enfoque arquitectónico diferente que les permite ser mucho más portátil y eficiente.

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.

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 fácil de automatizar e implantar en entornos de integración continua.

  • Existen muchas imágenes que pueden descargarse y modificarse libremente.

  • Ambientes Replicables.

  • Exactitud de las Pruebas.

  • Escalabilidad.

  • Alta Disponibilidad.

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.

  • En aplicaciones que requieran Escalabilidad o Alta Disponibilidad.

  • En el despliegue de microservicios.

Repositorio de imágenes

Además de todo esto, el proyecto nos ofrece 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 contiene 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:

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

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

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

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.

Fuentes: Docker, Wikipedia