Hablando de Docker en puro castellano

Siguiendo la lista oficial de anuncios de Red Hat Enterprise Linux acabo de enterarme que las aplicaciones que han sido instaladas en Red Hat Enterprise Linux 6.6 (Santiago) se pueden desplegar ahora en Red Hat Enterprise Linux 7, el último release oficial de la compañía, y esto puede ser gracias a Docker, el proyecto que ha causado revuelo en el mundo Open Source por su potencial.

Aquí les dejo el anuncio oficial de la lista de Red Hat:

Greetings Red Hat Partners,

On the heels of the release of Red Hat Enterprise Linux 6.6, Red Hat has also announced the immediate availability of the Red Hat Enterprise Linux 6 platform image for containerizing Red Hat Enterprise Linux 6 applications. The Red Hat Enterprise Linux 6 platform image provides the necessary runtime elements needed to run a Red Hat Enterprise Linux 6 application inside a Docker-formatted container on a Red Hat Enterprise Linux 7 host.

The Red Hat Enterprise Linux 6 platform image allows for:

  • Red Hat Enterprise Linux subscribers to create and deliver secure container images of existing Red Hat Enterprise Linux 6 applications
  • Deployment of those applications to Red Hat Enterprise Linux 7 without porting or changing source code.
    Red Hat ISV partners and customers to rely on Red Hat Enterprise Linux 7 as a leading enterprise-grade container host for existing or new applications developed on Red Hat Enterprise Linux 6
  • Customers to gain additional deployment flexibility for applications developed on Red Hat Enterprise Linux
  • Customers to more quickly take advantage of Red Hat Enterprise Linux 7 and containerization without compromising on the reliability and security they have gained by standardizing on Red Hat Enterprise Linux 6

RED HAT ENTERPRISE LINUX PLATFORM IMAGE AVAILABILITY

Red Hat Enterprise Linux 6 platform image is now available in the Red Hat Customer Portal to all customers with active Standard and Premium Red Hat Enterprise Linux subscriptions. To access and download Red Hat Enterprise Linux 6 platform image, please visit: https://access.redhat.com/search/browse/docker-images#?

Learn more at http://rhelblog.redhat.com/2014/10/14/run-red-hat-enterprise-linux-6-applications-on-red-hat-enterprise-linux-7/.

Sincerely,

The Red Hat Enterprise Linux Team

Docker

Bueno, y qué es Docker?

Docker es una plataforma abierta de computación en la nube para el hosting de aplicaciones de forma distribuida. Dicha plataforma está basada en una tecnología conocida como “Linux Containers”, la cual es conocida como “Virtualización Ligera”.

Para que se entienda mejor vamos a explicar las diferencias que existen entre una Máquina Virtual y un Contenedor. En una Máquina Virtual tienes las librerías y dependencias para ejecutar tu aplicación, los servicios que deben estar presentes, y además el código de tu aplicación que a lo mejor es sólo unas decenas de MB; y todo ello lo tienes ejecutándose en un sistema operativo tipo Guest, lo cual se puede traducir en varios GB de almacenamiento. Además en tu sistema operativo original, necesitas tener el Hypervisor, que es el proceso que al final se encarga de la gestión de los recursos de las Máquinas Virtuales (principalmente memoria RAM, conectividad y almacenamiento). Ya los Hypervisor ustedes los conocen de sobra: Vmware, Xen, Virtualbox y algunos otros.
Máquina Virtual

Ahora, un Contenedor en Docker es algo distinto: sólo contiene el código de la aplicación y sus dependencias para su ejecución y es manejado por lo que se llama Docker Engine. El Contenedor es ejecutado como un proceso aislado en espacio de usuario en el sistema operativo, compartiendo el kernel con otros Contenedores. Por tanto, cada Contenedor puede gozar del aislamiento de recursos igual que las Máquinas Virtuales, pero a un nivel más eficiente y portable, por el hecho de que un Contenedor puede bootear casi 1000 veces más rápido que una Máquina Virtual, y al usar mucho menos espacio y menos RAM; los administradores de sistemas pueden usar un mejor uso de los recursos de cómputo.
Container
Entonces, en esencia, Docker provee un modo de ejecutar casi cualquier aplicación seguramente aislada en un contenedor. El aislamiento y la seguridad te permite entonces ejecutar múltiples contenedores en tu host. La naturaleza ligera de los contenedores, los cuales se ejecutan sin la penalización extra de un Hypervisor, significa entonces una mejor utilización del hardware disponible.

Haciendo un cálculo rápido: imáginense que en un sistema que tiene 128 GB de RAM, tienes tu sistema con 30 Máquinas Virtuales donde tienes toda tu infraestructura, y descubriste que con Docker puedes tener alrededor de casi 4 contenedores donde dispones de los recursos para una Máquina Virtual, con los cuales puedes atender más peticiones de balanceo de carga, puedes tener más bases de datos replicadas, y puedes almacenar más archivos u objetos.

Por estas simples pero poderosas razones es que Docker ha causado tanto revuelo en el mundo del Cloud Computing; y el equipo de la compañía detrás del proyecto ha sido lo suficientemente inteligente en crear servicios a partir de Docker y ha creado alianzas estratégicas con grandes organizaciones como Red Hat, Canonical, OpenStack, Rackspace; porque saben el potencial que tiene el proyecto.

Una de las últimas alianzas anunciadas es la creada entre Docker y Microsoft para llevar Docker Engine a Windows Server. Aquí les dejo algunas de las palabras de Ben Golup, Chief Executive Officer de Docker acerca de esta alianza:

At the heart of the Microsoft and Docker partnership is a shared view that there is great leverage when you provide developers a common approach to build their applications. Microsoft viewed Docker for what it is at its core; an open-platform for distributed applications that can provide a uniform user interface to a modular set of tools for containerizing and then orchestrating these applications.

Unifying Windows Server and Linux through the Docker platform aligns with Microsoft CEO Satya Nadella’s strategy to be the “productivity and platform company for the mobile-first and cloud-first world.” There is no greater productivity gain that I can think of than integrating two great development ecosystems and providing the means to collaborate by leveraging the best application “content” from each.

Componentes de Docker

Los principales componentes de Docker son 2 básicamente:

  • Docker: que es la platalforma libre de virtualización de contenedores, el cual fue liberado bajo la licencia de Apache 2.0
  • Docker Hub: es la plataforma SaaS de la compañía para la gestión y compartimiento de contenedores

Conceptos de Docker

Para entender un poco más de Docker, deben saber que son las Docker images, Docker registries y los Docker containers. Una imagen de Docker no es más que una plantilla de sólo lectura, la cual puede contener por ejemplo Ubuntu Linux con Apache y tu aplicación web instalada. Las imágenes son usadas para crear contenedores de Docker. Ahora los registros de Docker, son los que tienen las imágenes, y no son más que una forma de almacenamiento, ya sea pública o privada de dichas imágenes, a donde tu puedes subir o descargar estas imágenes. Constituyen la forma de distribución de imágenes usando Docker Hub. Entonces los contenedores de Docker son algo parecido a directorios, que mantienen todo lo necesario para ejecutar tu aplicación. Cada contenedor puede ser iniciado, parado, movido y borrado. Todo y mucho más puede ser consultado en la documentación oficial de Docker. Les recomiendo la sección Understanding Docker que explica todo estos conceptos brillantemente.

Arquitectura de Docker

Docker usa una arquitectura cliente-servidor. El cliente de Docker le hace peticiones al demonio de Docker, el cual hace todo el trabajo de la construcción, ejecución y distribución de tus contendedores de Docker. Ambos procesos pueden correr en el mismo sistema, o también un cliente de Docker puede interactuar a un demonio remoto de Docker. La comunicación entre ambos procesos puede ser a través de sockets o a través de una API tipo RESTful.
Arquitectura de Docker

Docker está escrito en Go y usa varias características del kernel de Linux para su funcionamiento.

Namespaces

Cuando uno ejecuta un contenedor, Docker crea una serie de namespaces para ese contenedor. Esto provee una capa de aislamiento: cada aspecto del contenedor se ejecuta en su propio namespace y no tiene acceso fuera de su contexto. Algunos de los namespaces que Docker usa son:

  • el namespace pid: Usado para el aislamiento de procesos (PID: id de proceso)
  • el namespace net: Usado para la gestión de interfaces de red (NET: networking)
  • el namespace ipc: Usado para la gestión de acceso a recursos IPC (IPC: Inter Process Communication)
  • el namespace mnt: Usado para puntos de montaje
  • el namespace uts: Usado para el aislamiento del kernel e identificadores de versiones (UTS: Unix Timesharing System)

Control groups

Docker también hace uso de otra tecnología llamada cgroups o grupos de control. La clave para la ejecución de una aplicación en total aislamiento es poder hace que usen sólo los recursos que tu dispongas. Esta tecnología se asegura de que los contenedores son ciudadanos aislados en tu sistema operativo. Los gropos de control permiten a Docker compatir los recursos de hardware disponibles entre los contenedores, y si lo requieren, establecer límites y restricciones. Por ejemplo, usted podría limitar el uso de memoria RAM para un determinado contenedor.

Union file systems

Union file systems o UnionFS, son sistemas de archivos que operan creando capas, haciéndolas ligeras y ràpidas. Docker usa UnionFS para proveer el fundamento para la construcción de contenedores. Docker puede hacer uso de varias variantes de este tipo de sistemas de archivos: AUFS, btrfs, vfs y DeviceMapper.

Esto en concreto hace que cada imagen que se crea con Docker, es al final una serie de capas combinadas, y esto precisamente hace que Docker sea tan ligero: Cuando tú cambias la imagen, por ejemplo para actualizar tu aplicación a una nueva versión, una nueva capa es construída. Y entonces, en vez de reemplazar la imagen completa o volverla a construir (como se hace con una Máquina Vitual), sólo la capa que tiene que ver con la aplicación es actualizada o agregada. Por tanto, a la hora de la distribución de la imagen, tú no necesitas hacerlo de forma completa, tú sólo distribuyes la actualización por todos tus contenedores de tu aplicación, haciendo la distribución más simple y más rápida. Y todo esto es gracias a UnionFS.

Container format

Docker combina todos estos componentes en un wrapper que llaman formato de contenedor. El formato por defecto de contenedores es libcontainer. Docker también soporta el formato tradicional de contenedores de Linux usando LXC. En el futuro, Docker podría soportar otros formatos de contenedores como las llamadas jails o jaulas en sistemas BSD, o las llamadas zonas en Solaris.

Algunas empresas que usan Docker

Hay muchas ya que han apostado por Docker para sus ambientes de desarrollo y han llevado su infraestructura a otro nivel. Precisamente ahora acabó el DockerCon2014 en San Francisco donde hubo varias empresas que expusieron sus casos de estudio, y ahora viene el DockerCon Europe en Amsterdam, donde estarán personas de Spotify, Shopify, ModCloth, Rackspace, Hortonworks y más. Aquí pueden encontrar algunos de los presentadores que estarán
DockCon Europe

Conclusiones

Bueno, concluyendo ya, sólo he dado una pequeña pincelada de las bondades y beneficios que puede brindar Docker y su ecosistema. En próximos posts, hablaré más de cómo se instala y cómo se usa para que a lo mejor, quien sabe, podamos adentrarnos también en el mundo de Docker y podamos contribuir también al proyecto.

23 comentarios » Puedes dejar tu comentario también

  1. 00

    raven

    dijo:

    Google Chrome 38.0.2125.101 GNU/Linux x64

    Hace unos meses este era el proyecto más popular en github.

  2. 00

    Pochy

    dijo:

    Firefox 32.0 Ubuntu 14.04

    Muy interesante, esperando el próximo! 🙂

  3. 00

    Dariem

    dijo:

    Firefox 32.0 Nova x64

    Alguien una vez me preguntó en un curso que impartí de administración de servidores Linux sobre cómo podía hacer para actualizar PHP si la distro que usaba no venía con esa última versión de PHP e intentar hacerlo podría romper el sistema por inconsistencia de dependencias. Docker puede ser la respuesta. Manteniendo una imagen de Docker con todas las dependencias actualizadas y consistentes permite que se pueda desplegar en cualquier contenedor, garantizando que va a funcionar siempre de la misma forma dondequiera que se despliegue.

  4. 00

    marcos

    (autor) dijo:

    Firefox 32.0 Windows 7

    Exactamente @Dariem
    Precisamente es lo que hacen varias empresas hoy que usan PHP como su lenguaje de desarrollo. En el sitio de la empresa hay varios casos de usuarios expuestos aquí:
    https://www.docker.com/resources/usecases

    Y además hay varios ejemplos como “dockerizar” servicios y aplicaciones:
    https://docs.docker.com/examples/postgresql_service
    https://docs.docker.com/examples/nodejs_web_app
    https://docs.docker.com/examples/running_ssh_service

  5. 00

    raven

    dijo:

    Google Chrome 38.0.2125.101 GNU/Linux x64

    Creo que en determinado momento, ahora que la uci tiene dinero como para comprar i3 para que los muchachones de 1er año chateen, deberían montar un DaaS a-la heroku pa que la gente haga sus sitios web de P4 (o pa’ que aprendan tecnologías web sin que se lo evalúen en clases). Ya ha varias escritas usando Docker y las imágenes se pueden descargar o hacer internamente que manuales para eso hay en internet.

  6. 00

    Anielkis

    dijo:

    Firefox 33.0 GNU/Linux x64

    ýo llevo casi un año trabajando con docker en producción.. y se puede ver más su funcionamiento como algo “parecido” a los conceptos de “Programa” y “Proceso” en Sistemas Operativos: imagínense la imagen de docker como el Programa y los contenedores que se crean al ejecutar un programa en una imagen como un Proceso (cada uno).. como si ejecutaran el firefox varias veces, por ejemplo y con cada uno hicieran algo distinto
    además de las que comentó marcos, Docker tiene varias ventajas más que influyen en el ahorro de recursos, pues (según lo recomendado) se debe ejecutar un solo proceso dentro de un contenedor.. y los contenedores eliminan muchos procesos innecesarios, como un init, gestor de sesiones, servicios de red, etc..
    con docker se pueden lograr cosas como por ejemplo:
    – dos contenedores con un apache y otro con un nginx que sirve de proxy inverso, caché y hace balance de carga.. con esta arquitectura.. se pueden adicionar más contenedores con apache y adicionarlos al nginx, mejorando de forma “transparente al usuario” el rendimiento.. escalando el servicio en momentos de mucho tráfico
    – tener una contenedor creado a partir de una imagen que contiene la versión 1.0 de una aplicación que brinda un servicio en la red corriendo desde un contenedor e hizo falta aplicar un upgrade de la aplicación .. con lo que solo se necesita crear una nueva imagen con la versión 1.1 (que mantiene el mismo nombre de la 1.0 y un “tag”, que es como un puntero, a la versión nueva y se actualiza el tag “latest” que siempre apunta a la última versión) .. luego de esto.. se reinicia el contenedor o se adiciona uno nuevo detrás de un “balance de carga”(como el del apache anterior) y termina actualizándose el sistema sin haberse “caido” el sistema…

    otra ventaja es que cada una de las imágenes puede estar hecha a partir de una distribución distinta .. y así puedes tener un servicio corriendo en un CentOS, para más estabilidad .. otros en Ubuntu, porque se necesitó una versión más actualizada .. etc

    distribuciones como debian ya usan docker para la construcción de su repositorio y gnome lo usa para las pruebas de su software

  7. 00

    Allan Pierra

    dijo:

    Firefox 29.0 Nova

    Genial Marcos:
    El mejor post que he visto en lo que va de curso !!! Sería bueno luego de unas semanas nos regales uno de experiencias montando varios servicios paso a paso…

  8. 00

    Dariem

    dijo:

    Firefox 32.0 Nova x64

    @Anielkis
    Yo quiero empezar a usar docker en producción antes de que se acabe el año, vamos a ver si tengo suerte y no surgen “desviaciones” 🙂

  9. 00

    marcos

    (autor) dijo:

    Google Chrome 35.0.1916.153 GNU/Linux

    Gracias @Allan Pierra
    La idea era introducirlo ahora, para luego montar una pequeña infraestructura con Docker.

  10. 00

    marcos

    (autor) dijo:

    Google Chrome 35.0.1916.153 GNU/Linux

    Gracias @Anielkis por el comentario. Es bueno saber que lo estás usando en producción. Una de las empresas más grandes que he visto que usan Docker en producción es Spotify, el bien conocido servicio de streaming de música. Algunos números:

    24 millones de usuarios globalmente
    Presente en más de 60 países
    Más de 60 servicios de backend
    Más de 7000 servidores distribuídos en 4 centros de datos
    Más de 33 clusters de Cassandra, manteniendo más de 55 TB de datos

    Toda esta infraestructura está gestionada con Docker y Puppet actualmente. Rohan Singh (@rohansingh), uno de los System Engineers de Spotify estará en el próximo DockerCon Europa, precisamente a dar una charla sobre Docker en producción en Spotify.

  11. 00

    Dariem

    dijo:

    Firefox 32.0 Nova x64

  12. 00

    marcos

    (autor) dijo:

    Google Chrome 35.0.1916.153 Linux Mint 17

    @Dariem
    Jjajaja. me imagino.

  13. 00

    Allan Pierra

    dijo:

    Firefox 29.0 Nova

    @Marcos:
    Por acá tenemos la asignatura pendiente de darle un soporte especializado a las tecnologias cloud-like, si queremos verdaderamente ser una distro medianamente seria, mas allá de montarte una o 2 PC con algunos servicios.

    Estabamos evaluando PROMOX… seguimos por ahí?? o lo enterramos sin honores y saltamos directamente a docker ????
    S. Allan

  14. 00

    marcos

    (autor) dijo:

    Google Chrome 35.0.1916.153 Linux Mint 17

    Bueno @Allan Pierra
    Si de verdad quieren ponerse serios como dices en el tema del Cloud Computing, creo que deberían echarle un ojo serio a Docker y a OpenStack, que es la plataforma por excelencia para la construcción de plataformas en la nube, ya sean públicas o privadas. Para los que quiere saber un poco más sobre el proyecto, les recomiendo dos libros disponibles en Sunshine:
    OpenStack Cloud Computing CookBook
    Deploying OpenStack

    El código es hosteado en Launchpad.

  15. 00

    Dariem

    dijo:

    Firefox 32.0 Nova x64

    @marcos
    @Allan Pierra
    Yo particularmente sí he estado viendo cosas de OpenStack, de hecho tengo una presentación pendiente sobre el tema para el Grupo de Investigación de Software Libre que no he podido preparar por estar en el asunto de la plataforma de desarrollo de Nova. Y desde que @Anielkis me habló de Docker también he visto algunas cosas de este aunque no con la profundidad que quisiera. El asunto con Proxmox es que ha ganado mucha popularidad entre los administradores cubanos, entonces muchos están pidiendo soporte para este. Yo pienso que no hay que abandonar ni lo uno ni lo otro.

  16. 00

    marcos

    (autor) dijo:

    Google Chrome 35.0.1916.153 Linux Mint 17

    Entonces palante @Dariem
    Uno de los próximos posts que tengo planificado es precisamente sobre OpenStack, luego del que haga de la instalación y configuración de Docker. Bueno, cuando vayas a hacer esa presentación, es sólo para ese grupo o puede participar cualquiera?

  17. 00

    Dariem

    dijo:

    Firefox 32.0 Nova x64

    @marcos
    El grupo de investigación está abierto para todos los que quieran participar sin importar el área de la universidad a la que pertenezcan, de hecho deberías participar, ser miembro: estoy seguro de que tienes muchos conocimientos y cosas interesantes que aportar y puedes enriquecer mucho nuestros debates.

  18. 00

    Anielkis

    dijo:

    Firefox 33.0 GNU/Linux x64

    Otra sugerencia es que le den un vistazo a CoreOS (coreos.com) .. una distribución enfocada en clouds con docker, tienen algunos servicios que permiten un muy buen escalado del cloud como etcd .. una mase de datos distribuída que se puede usar para DNS, autodetección de contenedores, distribuir y cvoordinar otros servicios, etc.

  19. 00

    marcos

    (autor) dijo:

    Google Chrome 35.0.1916.153 GNU/Linux

    Ummm, gracias @Anielkis
    En el evento Microsoft Cloud que comentaba Dariemp el otro dia, salió uno de los principales desarrolladores de CoreOS hablando sobre la plataforma, asi que parece que CoreOS también estará disponible próximamente en Windows Azure, y además con la alianza entre Docker y Microsoft, parece que todo por buen camino.

  20. 00

    Allan Pierra

    dijo:

    Firefox 29.0 Nova

    @Marcos:
    Para ti el grupo no es abierto, jeje, recuerda donde que eres made in F10… si quieres participar entonces agendate junto Dariem una presentación de Docker y OpenStack!!! Tambien voy a invitar a un estudiante de 5to de CISED que esta escapao en PROMOX

    En serio hermano, encantados si te nos unieras.
    S.Allan

  21. 00

    marcos

    (autor) dijo:

    Google Chrome 35.0.1916.153 GNU/Linux

    No hay problema @Allan Pierra
    Voy a meterme un poco más en Docker, y cuando tenga un poco más de experiencia con la plataforma, voy a preparar una presentación para el grupo entonces.

  22. 00

    Eddy Ernesto del Valle Pino

    dijo:

    Chromium 37.0.2062.120 Ubuntu x64

    @raven, desde que estaba en la universidad soñaba con algo así. Pero…

  23. 00

    Anielkis

    dijo:

    Firefox 33.0 GNU/Linux x64

    @marcos .. lo que necesites, me dices

Deja un comentario

Tu dirección de correo electrónico nunca será compartida.