¿Qué es Linux Docker?

Esta semana hemos tratado de profundizar y conocer más sobre una tecnología que cada vez tiene más notoriedad entre la comunidad de Software Libre: Linux Docker; un ejemplo de ello es que se utiliza para proyectos tan grandes como eBay, Mailgun o Spotify. Del mismo modo Google ha afirmado que dará soporte a este software.

La definición oficial traducida textualmente es algo así:
Linux Docker es una plataforma Open Source para que desarrolladores y Sysadmins puedan construir, cargar, y ejecutar aplicaciones. Consiste en un entorno de ejecución ligero, portable y herramientas de empaquetado […] como resultado se puede implementar más rápido y ejecutar la misma aplicación sin cambios tanto en portátiles, Centros de Datos o máquinas virtuales de cualquier Cloud

Lo que nos interesa saber a modo de resumen es:
Docker es una tecnología de contenedores que nos permite una virtualización ligera para empaquetar entornos, la configuración del sistema y aplicaciones, que posteriormente podremos desplegar en cualquier otro sistema compatible con este tipo de tecnología.

Máquina Virtual vs Docker

Máquina Virtual
La diferencia sin duda es tanto conceptual como de peso, sobretodo de peso… los sistemas más extendidos de virtualización -aunque con numerosas virtudes- tienen un problema en cuanto a la portabilidad, puesto que un snapshot incluye tanto el Sistema Operativo (guest/invitado) como las librerías y aplicaciones. Esto en algunas ocasiones puede representar una ventaja, pero cuando se trata de replicar entornos que debemos transmitir por red, por ejemplo, desde un entorno local a un CPD, resulta tedioso y más si tenemos que repetirlo con frecuencia.

Docker
El notable éxito de esta tecnología tiene como característica principal la ligereza, y por extensión la portabilidad. Los contenedores (dockers) consisten en una copia de las configuraciones, las librerías/binarios y la aplicación o aplicaciones. Evitamos todo el peso del sistema. Sólo nos tenemos que asegurar que el Sistema de destino es compatible con Docker, se puede considerar los dockers como máquinas virtuales ligeras.

Linux Docker más a fondo

Entrando un poquito más en materia y estudiando la tecnología vemos que en realidad Docker no es un sistema de virtualización al uso, está basado en LXC(LinuX Containers) que a su vez es un método para ejecutar entornos y asignación de recursos (cpu, memoria, i/o) mediante una característica del kernel llamada cgroups.

Básicamente los Dockers son contenedores donde se encuentra todo lo que una aplicación necesita para funcionar sin necesidad de acceder a recursos externos, con lo cuál controlamos mucho mejor las configuraciones y evitamos que algún otro programa actualice o elimine una librería que inconscientemente afecte en la ejecución y estabilidad de nuestro programa, así mismo la portabilidad se facilita porque el engine de Dockers se encarga de su integridad y gestión de recursos.

Componentes de Docker.

  • El Demonio es el proceso principal de gestión del engine que corre en la máquina anfitriona. El usuario nunca interactiva con el dominio directamente, lo hace por medio del Cliente.
  • El Cliente es el binario que constituye la interface de usuario entre el Cliente y el Demonio del servicio. Acepta y procesa las acciones del cliente por una serie de comandos
  • Una Imagen de Docker es análogamente como un template de Máquinas Virtuales, las imágenes son utilizadas para crear contenedores. Las imágenes se pueden actualizar fácilmente, y se pueden compartir con públicamente, por ejemplo podemos descargar una imagen con WordPress e instalarlo en nuestro Docker, como haríamos con las appliances de VM.
  • Los Registros de Docker son almacenes de imágenes tanto para acceso privado como público. Si se comparten públicamente la colección de imágenes se denomina Docker Hub.
  • Un Contenedor de Docker es -para entendernos- similar a una carpeta/directorio de un filesystem, el contenedor alberga todo lo necesario para que una aplicación pueda ejecutarse de forma aislada. Un contenedor lo podemos iniciar, parar, mover o borrar.

Desde su sitio oficial podemos ver que está disponible para Ubuntu, ArchLinux, Gentoo, Fedora, OpenSUSE y FrugalWare, así como desde el propio código binario de la aplicación. Además también tenemos indicaciones para poder desplegar contenedores bajo entornos Windows, Mac, Amazon EC2, Rackspace o Google Cloud.

Sin duda una tecnología a la que nos tendremos que familiarizar puesto que va a ser cada vez más utilizada, sobretodo para replicar entornos de producción a desarrollo o viceversa.

¿Quieres conocer más? Instalación y primeros pasos.