Comparte:
Aplicaciones
17 de enero de 2014

Docker: una solución al transporte de aplicaciones

Docker: una solución al transporte de aplicaciones

Docker: una solución al transporte de aplicaciones

Escrito por , 17/01/2014

Hasta principios del siglo XX, el transporte de mercancías por mar tenía algunos problemas de eficiencia: cada mercancía era embalada como interesaba al proveedor, en bultos de tamaños diferentes, lo que provocaba que los tiempos (y costes) de carga y descarga fueran elevados.

Hacia finales de la Segunda Guerra Mundial el ejército estadounidense usó contenedores para acelerar la carga y descarga de los barcos de transporte, lo que reducía además el riesgo de robo de la mercancía. Estos contenedores eran reutilizables, estaban fabricados de acero rígido y tenían un volumen y carga máxima fijos.

En 1955 el empresario Malcom McLean y el ingeniero Keith Tantlinger desarrollaron el contenedor moderno, diseñado para ser cargado eficientemente en los barcos mercantes y viajar con seguridad a través de los océanos. Fabricado de acero corrugado, tenía twistlocks (cierres de bayoneta) en las esquinas para ser levantado fácilmente por grúas. Tantlinger convenció a McLean para abrir las patentes industriales del contenedor, lo que llevó a su estandarización internacional durante los años 60.

Los efectos sobre el sector fueron brutales. Los costes del transporte marítimo cayeron en picado, y se acortaron además los tiempos de tránsito. Los puertos que supieron adaptar sus infraestructuras crecieron rápidamente, en detrimento de los que no. Miles de estibadores perdieron su empleo, al dejar de ser necesaria su actividad. La industria auxiliar floreció al necesitarse barcos, grúas, trenes y camiones específicos para el transporte de contenedores. De hecho, puede decirse que el contenedor fue uno de los motores clave de la globalización.

¿Y qué tiene que ver esto con la informática?

Hasta hace pocos años, el desarrollo de software no tenía serios problemas de “movilidad”. Los entornos de desarrollo, prueba, certificación y producción eran controlados la mayoría de las veces por un mismo responsable, que velaba por su consistencia. Los plazos de desarrollo eran relativamente largos, lo que permitía pasar a producción de forma procedimentada y ordenada. Los propios entornos (sistemas operativos, librerías, frameworks) eran bastante estables, lo que facilitaba los pasos de un entorno a otro de forma manual, casi artesanal.

Sin embargo, desde principios de siglo la situación ha cambiado radicalmente. Por un lado, la adopción de metodologías ágiles y la cada vez mayor implicación de los desarrolladores en la operación de las plataformas han hecho que los pases a producción sean muy frecuentes, a veces constantes, haciendo obligatoria su automatización. Por otro, la explosión del cloud computing y los dispositivos móviles han provocado que los entornos, especialmente los productivos, sean cualquier cosa menos estables: el proveedor de servicios controla en muchas ocasiones el entorno en el que correrán las aplicaciones (es costoso modificarlo, o a veces imposible por restricciones técnicas o de licencia) y la demanda de los usuarios finales es difícil de prever, y obliga a escalar dinámicamente la capacidad. Para más inri, el futuro es multi-cloud, de forma que muchos entornos productivos deberán correr sobre varias infraestructuras diferentes, bien por motivos legales, rendimiento o fiabilidad.

Las aplicaciones necesitan moverse de un lado a otro de forma rápida y segura. Necesitan su contenedor estándar.

El nombre no es casual

Docker (en inglés “estibador”) es un proyecto de código abierto para crear fácilmente contenedores ligeros, portables y autosuficientes. El objetivo es que el mismo contenedor que un desarrollador construye para escribir y probar una aplicación en su equipo pueda correr en producción a mayor escala, ya sea sobre máquinas virtuales, directamente sobre hardware, en clústeres OpenStack o clouds públicas.

Para lograrlo, Docker extiende LXC (LinuX Containers), un método de virtualización ligero disponible desde 2008 en este sistema operativo que permite crear múltiples sistemas aislados o contenedores que corren en paralelo sobre la misma máquina anfitriona. Esto permite mayor flexibilidad y rendimiento, al no emularse una máquina virtual completa ni correr un sistema operativo íntegro dentro de ella, a costa de quedar “atado” al sistema operativo anfitrión, que se expone a las aplicaciones. El concepto de contenedor como espacio de usuario virtualizado y con un límite de recursos asignado no es nueva, y ha estado disponible desde 1998 en FreeBSD o desde 2005 en Solaris. Ni siquiera lo es en el cloud computing, al ser la tecnología tras los Virtuozzo Containers de Parallels, los dynos de Heroku o el SmartOS de Joyent (este último comercializado actualmente en España por Acens bajo el nombre Instant Servers).

Docker empezó como un proyecto interno de Solomon Hykes en dotCloud, un proveedor PaaS (plataforma como servicio). Fue publicado bajo licencia abierta en marzo de 2013, y ganó mucha tracción en la comunidad. No sólo está integrado con la mayoría de herramientas de gestión y despliegue de infraestructura (como Chef o Puppet), sino con OpenStack (que incluye soporte nativo desde Havana) y con OpenShift, la iniciativa PaaS de Red Hat. Es decir, la industria auxiliar empieza a florecer: ya han aparecido incluso los primeros proveedores de “Docker as a Service”, como Stackdock, Orchard o Baremetal, mientras otros (como Rackspace o DigitalOcean) están adaptándose. Cabe preguntarse cuál será esta vez el gremio de estibadores si, como parece, Docker termina imponiéndose.

Imagen: MorBCN

Sobre el autor

Antonio José Sánchez

Antonio José Sánchez

Ingeniero informático, aunque también he trabajado de financiero y auditor. Actualmente, responsable de Desarrollo de Negocio en Industrial IoT. Me gustan las piedras, preferiblemente griegas o romanas.
Ver todos sus artículos »