Llegamos a ustedes gracias a:



Reportajes y análisis

¿Qué es Docker? La chispa de la revolución de los contenedores

[19/08 (2021] Docker es una plataforma de software para crear aplicaciones basadas en contenedores -ambientes de ejecución pequeños y livianos que realizan un uso compartido del kernel del sistema operativo pero que, por lo demás, se ejecutan de forma aislada entre sí. Aunque los contenedores ya se han utilizado en Linux y Unix por algún tiempo, Docker, un proyecto de código abierto lanzado en el 2013, ayudó a popularizar esta tecnología, facilitando el empaquetado de software más que nunca a los desarrolladores, permitiéndoles "compilar una vez y ejecutarlo en cualquier lugar.

[Reciba lo último de CIO Perú suscribiéndose a nuestro newsletter semanal]

Una breve historia de Docker

Fundada como DotCloud en el 2008 por Solomon Hykes en París, lo que ahora denominamos Docker comenzó como una plataforma como servicio (PaaS, por sus siglas en inglés) antes de dar un giro en el 2013 para centrarse en democratizar los contenedores de software subyacentes en los que se ejecutaba su plataforma.

En marzo del 2013, Hykes primero hizo una demostración de Docker en PyCon, donde explicó que Docker se creó porque los desarrolladores seguían preguntando por la tecnología subyacente que impulsa la plataforma DotCloud. "Siempre pensamos que sería genial poder decir: 'Sí, aquí está nuestra pieza de bajo nivel. Ahora puede hacer contenedores de Linux con nosotros e ir a hacer lo que quiera, ir a construir su plataforma'. Así que eso es lo que estamos haciendo.

Y así nació Docker, mientras el proyecto de código abierto ganaba terreno rápidamente entre los desarrolladores, y atraía la atención de proveedores de tecnología de alto perfil como Microsoft, IBM y Red Hat, así como de capitalistas de riesgo dispuestos a inyectar millones de dólares en proyectos innovadores de la nueva compañía. La revolución de los contenedores había comenzado.

¿Qué son los contenedores?

Como Hykes lo describió en su charla PyCon, los contenedores son "unidades autónomas de software que puede entregar desde un servidor a otro, desde su computadora portátil a EC2 o a un servidor gigante de un solo tenant, y se ejecutará de la misma manera porque está aislado a nivel de proceso y tiene su propio sistema de archivos.

Al simplificar este proceso, Docker se acercó rápidamente a un estándar industrial de facto para contenedores. Docker permite a los desarrolladores implementar, replicar, mover y realizar backups de una carga de trabajo de una manera optimizada, utilizando un conjunto de imágenes reutilizables para hacer que las cargas de trabajo sean más portátiles y flexibles de lo que permitían los métodos anteriores.

En el mundo de las máquinas virtuales (VM, por sus siglas en inglés), esto podría hacerse manteniendo las aplicaciones separadas mientras se ejecutan en el mismo hardware, pero en ese mundo, cada VM requiere su propio sistema operativo, lo que significa que suelen ser grandes, lentas para iniciar y difíciles de mover, así como engorrosas de mantener y actualizar. Los contenedores marcaron un cambio en la era de las máquinas virtuales al aislar los ambientes de ejecución a la vez que compartían el kernel del sistema operativo subyacente, proporcionando una opción ligera y rápida para los desarrolladores.

Cómo se comparan la virtualización y la infraestructura de contenedores.
Docker, contenedores

Docker: los componentes

Docker despegó con los desarrolladores de software porque encontró una forma novedosa de empaquetar las herramientas necesarias para construir y lanzar un contenedor de una manera más ágil y simplificada de lo que era posible anteriormente. Al desglosar sus partes vemos que, Docker comprende Dockerfile, imágenes del contenedor, la utilidad para correr Docker, Docker Hub, Docker Engine, Docker Compose y Docker Desktop.

  • Dockerfile. Cada contenedor de Docker comienza con un Dockerfile. Este archivo de texto proporciona un conjunto de instrucciones para crear una imagen de Docker, que incluye el sistema operativo, los lenguajes, las variables ambientales, las ubicaciones de los archivos, los puertos de red y cualquier otro componente que necesite para ejecutarse.
  • Imágenes de Docker. Similar a una foto instantánea en el mundo de las VM, una imagen de Docker es un archivo ejecutable portátil, de solo lectura, que contiene las instrucciones para crear un contenedor y las especificaciones para qué componentes de software se ejecutará el contenedor y cómo.
  • La utilidad para correr Docker. La utilidad para correr Docker es el comando que lanza un contenedor. Cada contenedor es una instancia de una imagen y se pueden ejecutar varias instancias de la misma imagen simultáneamente.
  • Docker Hub. Docker Hub es un repositorio donde las imágenes de contenedores se pueden almacenar, compartir y administrar. Es como la propia versión de GitHub de Docker, pero específicamente para contenedores.
  • Docker Engine. Docker Engine es el núcleo de Docker. Es la tecnología cliente-servidor subyacente que crea y ejecuta los contenedores. El Docker Engine incluye un proceso de servicio de ejecución prolongada, llamado dockerd, para administrar los contenedores, las API que permiten que los programas se comuniquen con el servicio de Docker y una interfaz de línea de comandos.
  • Docker Compose. Docker Compose es una herramienta de línea de comandos que usa archivos YAML para definir y ejecutar aplicaciones Docker de múltiples contenedores. Le permite crear, iniciar, detener y reconstruir todos los servicios desde su configuración y ver el estado y la salida del registro de todos los servicios en ejecución.
  • Docker Desktop. Todos estos componentes están incluidos en la aplicación Desktop de Docker, lo que proporciona una forma fácil de crear y compartir aplicaciones y microservicios en contenedores.

Ventajas de Docker

Los contenedores de Docker proporcionan una forma de crear aplicaciones que son más fáciles de ensamblar, mantener y mover que los métodos anteriores permitidos. Eso proporciona varias ventajas para los desarrolladores de software.

  • Los contenedores de Docker son minimalistas y permiten la portabilidad. Docker permite que las aplicaciones y a sus ambientes se mantengan limpios y mínimos aislándolos, lo que permite un control más detallado y una mayor portabilidad.
  • Los contenedores Docker permiten la composición. Los contenedores facilitan a los desarrolladores componer los elementos básicos de una aplicación en una unidad modular con partes fácilmente intercambiables, lo que puede acelerar los ciclos de desarrollo, la publicación de funciones y la corrección de errores.
  • Los contenedores de Docker facilitan la orquestación y el escalado. Debido a que los contenedores son livianos, los desarrolladores pueden lanzar muchos de ellos para mejorar la escala de los servicios. Estos grupos de contenedores deben ser orquestados, que es donde normalmente entra Kubernetes.

Inconvenientes de Docker

Los contenedores resuelven una gran cantidad de problemas, pero no resuelven todos los problemas de los desarrolladores.

  • Los contenedores de Docker no son máquinas virtuales. A diferencia de las máquinas virtuales, los contenedores utilizan partes controladas de los recursos del sistema operativo host, lo que significa que los elementos no están tan estrictamente aislados como lo estarían en una máquina virtual.
  • Los contenedores Docker no proporcionan una velocidad completa. Los contenedores son significativamente más livianos y cercanos al metal que las máquinas virtuales, pero incurren en algunos gastos generales de rendimiento. Si su carga de trabajo requiere una velocidad máxima, un contenedor lo acercará, pero no completamente.
  • Los contenedores Docker son de naturaleza 'sin estado' e inmutables. Los contenedores se inician y se ejecutan desde una imagen que describe su contenido. Esa imagen es inmutable de forma predeterminada; una vez creada, no cambia. Pero una instancia de contenedor es transitoria. Cuando se elimina de la memoria del sistema, desaparece para siempre. Si desea que el estado de sus contenedores persista en todas las sesiones, como una máquina virtual, debe diseñar para esa persistencia.

¿Qué es Docker hoy?

El uso de contenedores continúa creciendo a medida que las técnicas de desarrollo nativas de la nube se convierten en el modelo principal para construir y ejecutar software, pero Docker ahora es solo una parte de ese rompecabezas.

Docker se hizo popular al facilitar el traslado del código de una aplicación y todas sus dependencias desde la laptop del desarrollador a un servidor. Pero el auge de los contenedores provocó un cambio en la forma en que se construyen las aplicaciones, desde stacks monolíticos hasta redes de microservicios. Pronto, muchos usuarios necesitaron una forma de organizar y administrar grupos de contenedores a escala.

Nacido de Google, el proyecto de código abierto de Kubernetes surgió rápidamente como la mejor manera de hacer esto, reemplazando los propios intentos de Docker de resolver este problema con su orquestador Swarm (QEPD). En el 2019, en medio de los crecientes problemas de financiación, Docker finalmente vendió su negocio empresarial a Mirantis, que desde entonces ha absorbido a Docker Enterprise en Mirantis Kubernetes Engine.

Los restos de Docker -que incluye el runtime para contenedores Docker Engine de código abierto original, el repositorio de imágenes de Docker Hub y la aplicación de Docker Desktop- viven bajo el liderazgo del veterano -con siete años en la compañía-, Scott Johnston, que busca reorientar el negocio en torno a su núcleo base de clientes de desarrolladores de software.