Docker

¿Qué es Docker?

La plataforma Docker, basada en tecnología de código abierto, permite a los desarrolladores compilar aplicaciones en contenedores. Lo que facilita el modificarlas y actualizarlas durante su desarrollo.

¿Por qué emplean Docker los desarrolladores?

Docker permite a los desarrolladores empaquetar y ejecutar aplicaciones en un entorno virtualizado, que se conoce como contenedor. Su aislamiento y seguridad inherentes permiten ejecutar varios contenedores de forma independiente y simultánea en un mismo sistema host. Docker proporciona las herramientas y la plataforma para gestionar el ciclo de vida de los contenedores.

¿Cuáles son los beneficios de Docker?

Lanzado en 2013, Docker ayudó a popularizar el uso de la contenedorización en el desarrollo de software. Con Docker, desarrollar, compartir y ejecutar aplicaciones contenedorizadas resulta más sencillo. Se puede configurar un nuevo contenedor en minutos, incluidas todas las dependencias de la aplicación. A continuación, las aplicaciones contenedorizadas pueden ejecutarse en cualquier lugar e infraestructura. Esto las hace enormemente portables.

¿Por qué resultan útiles los contenedores?

Los contenedores son ligeros, contienen todo lo que necesitan para ejecutar la aplicación y abstraen el software de la infraestructura host. Además, los contenedores se encuentran aislados unos de otros, lo que proporciona mayor estabilidad al sistema global. Permiten dividir grandes proyectos entre varios equipos de desarrollo, gracias a lo cual se reparte la carga de trabajo y acelera el desarrollo.

¿Cómo funciona Docker?

Docker aprovecha varias características del kernel de Linux para proporcionar su funcionalidad. Emplea espacios de nombres para proporcionar contenedores. Cuando ejecutas un contenedor, Docker crea un conjunto de espacios de nombres para él. Estos espacios de nombres proporcionan una capa de aislamiento para los contenedores. Cada aspecto de un contenedor se ejecuta en un espacio de nombres independiente y su acceso se encuentra limitado a ese espacio de nombres.

A diferencia de las máquinas virtuales, que abstraen los recursos del sistema host a nivel de hardware, Docker lo hace a nivel del sistema operativo. Al virtualizar a este nivel, las instancias de contenedores resultan más ligeras y rápidas que las máquinas virtuales.

¿Por qué Docker?

Docker simplifica y acelera los flujos de trabajo de desarrollo de software. Otorga a los desarrolladores la libertad de innovar con las herramientas, pilas de aplicación y entornos de implementación de su elección, en función de las necesidades específicas de cada proyecto.

Puesto que Docker constituye una solución ligera y rápida, pueden ejecutarse más cargas de trabajo en el mismo sistema host que las que admiten las máquinas virtuales basadas en un hipervisor. Resulta adecuado tanto para entornos de alta densidad como para implementaciones pequeñas y medianas que exigen hacer más con menos recursos.

La plataforma basada en contenedores de Docker permite un amplio grado de portabilidad de las cargas de trabajo. Los contenedores de Docker pueden ejecutarse en el dispositivo local de un desarrollador, en hardware de un centro de datos físico local o coubicado, en instancias de máquinas virtuales, en una plataforma de nube pública o en un entorno híbrido. Asimismo, esta portabilidad facilita la gestión dinámica de cargas de trabajo, escalando verticalmente o eliminando aplicaciones y servicios en función de las necesidades empresariales, prácticamente en tiempo real.

Con Docker, los desarrolladores pueden configurar entornos locales para coincidir con los que se encuentran en servidores activos y ejecutar varios entornos de desarrollo con configuraciones diferentes. Pueden realizarse pruebas de software con rapidez para comprobar si los nuevos cambios funcionarán correctamente a través de diversos entornos y condiciones, y respaldar así los objetivos de mejora/desarrollo continuos (CI/CD).

Docker también permite dividir grandes proyectos de desarrollo entre varios equipos Agile, gracias a lo cual se reparte la carga de trabajo y acelera el desarrollo. Este tipo de flujos de trabajo de DevOps eficientes pueden ayudar a las empresas a implementar software con mucha más frecuencia, recuperarse de errores con mayor rapidez y observar tasas de fallos de cambios muy inferiores.

¿Cómo se implementa y organiza Docker?

Los usuarios interactúan con Docker a través de un cliente. El cliente se comunica con un proceso en segundo plano que gestiona los contenedores en el host, conocido como el daemon de Docker. El daemon realiza el seguimiento de todo lo relacionado con el entorno Docker. 

El motor de Docker, que representa el núcleo del sistema, es una aplicación que emplea una arquitectura cliente/servidor y se encuentra instalada en una máquina host. El host proporciona el entorno para ejecutar las aplicaciones. Alberga el daemon, además de los siguientes objetos de Docker:

  • Imágenes: plantillas binarias de solo lectura que se emplean para desarrollar contenedores. Sus metadatos describen las capacidades y necesidades del contenedor. Puede emplearse una imagen por sí misma para desarrollar un contenedor o personalizarlo para añadir elementos y ampliar la configuración existente. Las imágenes de los contenedores se pueden compartir en una organización o con el público para facilitar la colaboración entre desarrolladores.
  • Contenedores: se definen por su imagen y cualquier opción de configuración adicional proporcionada inicialmente (por ejemplo, conexiones de red y opciones de almacenamiento). Los contenedores únicamente cuentan con acceso a recursos que se hayan definido en la imagen, salvo que se defina un acceso adicional al desarrollar la imagen en un contenedor.
  • Redes: permiten que los contenedores aislados en un sistema se comuniquen entre sí.
  • Almacenamiento: de forma predeterminada, el almacenamiento de datos en un contenedor es no persistente y perece una vez que el contenedor deja de ejecutarse. No obstante, Docker brinda opciones, como volúmenes de datos y plugins de almacenamiento, que permiten transferir o almacenar datos de forma persistente.

El cliente y el daemon de Docker pueden ejecutarse en el mismo sistema. También se puede conectar un cliente de Docker a un daemon de Docker remoto. Un cliente de Docker también puede comunicarse con más de un daemon de Docker. El cliente y el daemon de Docker se comunican mediante una API REST sobre zócalos UNIX o una interfaz de red.

¿Cómo se emplea Docker?

Dado que Docker simplifica y acelera los flujos de trabajo, ofrece numerosas ventajas para los equipos de desarrollo de software; no obstante, existen determinados escenarios en los que resulta especialmente beneficioso.

Adopción de una arquitectura de microservicios

Numerosas organizaciones desean sustituir sus aplicaciones monolíticas heredadas como parte de sus esfuerzos de transformación digital. Mientras una aplicación monolítica opera como una sola unidad, una arquitectura de microservicios se divide en una serie de unidades independientes de menor tamaño. Docker habilita la contenedorización de estos microservicios y simplifica su entrega y gestión. La contenedorización proporciona microservicios individuales con sus propios entornos aislados de cargas de trabajo, lo que permite implementar y escalarlos de forma independiente.

Desplazar aplicaciones antiguas a contenedores

Para aquellas aplicaciones que no pueden ser rediseñadas para microservicios, existe la opción de trasladarlas sin modificaciones a contenedores. El empleo de Docker para contenedorizar estas aplicaciones mejora la eficiencia del desarrollo y las pruebas, simplifica la implementación y recuperación ante desastres, y permite ejecutar varias instancias de la aplicación antigua sin que entre en conflicto con aplicaciones más recientes.

Implementar el aprendizaje automático

La implementación de modelos entrenados en producción y a escala representa uno de los mayores desafíos del desarrollo del aprendizaje automático. Docker simplifica tanto el desarrollo como la implementación de aplicaciones de aprendizaje automático al aprovechar plataformas como TensorFlow para habilitar la compatibilidad con GPU. La distribución de aplicaciones de aprendizaje automático también se optimiza activando contenedores a través de varias máquinas o en la nube y realizando su gestión mediante tecnología de organización.

Consolidación de servidores

De forma parecida a las máquinas virtuales, las capacidades de aislamiento de las aplicaciones de Docker permiten a las organizaciones ahorrar costes consolidando varios servidores. Sin la carga adicional que supone ejecutar varios sistemas operativos (como ocurre en un entorno de máquinas virtuales), Docker puede proporcionar una consolidación de servidores más densa que la que permiten las máquinas virtuales.

Soluciones HPE con Docker

Docker Enterprise Edition de HPE constituye un paquete de suscripción con respaldo comercial que incluye los componentes necesarios para implementar contenedores en cualquier entorno. La edición básica de Docker incluye el motor y la organización de contenedores. La edición estándar añade varias capas de gestión de imágenes y acceso. Además, puedes añadir escaneado de seguridad y supervisión de vulnerabilidades con la edición avanzada.

Aprovecha la sencillez y la resiliencia del almacenamiento HPE a medida que empiezas a aprovisionar volúmenes persistentes con unos pocos comandos. Las cabinas flash secundarias, híbridas y all-flash de HPE Nimble Storage y HPE 3PAR ofrecen rendimiento y escalabilidad para los entornos de contenedores.

La plataforma de contenedores HPE Ezmeral Runtime es una plataforma unificada basada en Kubernetes de código abierto, diseñada para aplicaciones nativas y no nativas de la nube que se ejecutan en cualquier infraestructura, ya sea local, en varias nubes públicas, en un modelo híbrido o en el extremo.

Esta plataforma se puede entregar como servicio con HPE GreenLake en un modelo de pago por consumo. Los ingenieros de HPE realizan la instalación y configuración, y HPE proporciona una gestión completa de tu solución, un punto de contacto único para soporte y un equipo técnico que conoce tu entorno y tu negocio. Además, con una compilación estandarizada de hardware y software, evitas una costosa implementación manual, y podemos entregártela en tu centro de datos en tan solo 14 días.