Análisis en profundidad

Docker: qué es y cómo funciona

Lo primero para destacar es que Docker es una plataforma de software. Dentro de sus principales funcionalidades se encuentran las de crear, probar e implementar aplicaciones de una manera veloz y eficiente.

25 Ago 2022

Redacción Innovación Digital 360

Docker

El desarrollo de aplicaciones es una de las industrias con mayor potencial. De hecho, un estudio de la consultora Grand View Research estima que este sector generó a nivel global casi 190 mil millones de dólares durante el 2021. Sin embargo, crear una app puede ser un proceso lento y dificultoso. Por ese motivo, durante la última década también se idearon plataformas para facilitar ese proceso. Y Docker es una de las más populares. 

Para aquellas personas o empresas que llevan a cabo aplicaciones, utilizar herramientas como Docker resulta una gran ventaja. No solo porque disminuye los tiempos de producción sino también porque los vuelve mucho más económicos. Por ese motivo, no conocer esta plataforma y evitar su uso puede ser un grave error. 

Qué es Docker y cómo funciona

Lo primero para destacar es que Docker es una plataforma de software. Dentro de sus principales funcionalidades se encuentran las de crear, probar e implementar aplicaciones de una manera veloz y eficiente. 

“Docker empaqueta software en unidades estandarizadas llamadas contenedores que incluyen todo lo necesario para que el software se ejecute, incluidas bibliotecas, herramientas de sistema, código y tiempo de ejecución”, explican desde Amazon Web Services (AWS), quienes colaboran con Docker para ayudar a los desarrolladores a acelerar la entrega de aplicaciones modernas en la nube. Y agregan: “De esta forma, se puede implementar y ajustar la escala de aplicaciones rápidamente en cualquier entorno con la certeza de saber que el código se ejecutará”.

Para lograr esto, se utiliza una interfaz de programación de aplicaciones (API) que proporciona los contenedores livianos. A su vez, estos son los que ejecutan los procesos de manera aislada. Esto resulta una ventaja porque se puede crear y gestionar la creación de sistemas distribuidos, lo que habilita que varias aplicaciones al mismo tiempo realicen tareas y otros procesos de una manera autónoma. 

Por otro lado, al implementar Docker también se genera una forma de producción estandarizada para ejecutar el código. Al instalar esta herramienta en cada servidor, se proporciona una serie de comandos fáciles de usar e iguales para todos los desarrolladores, lo que facilita y ordena los procesos de creación. 

Cuándo nace Docker 

El lanzamiento de Docker se llevó a cabo de manera oficial en marzo de 2013. Sin embargo, su desarrollo comenzó varios años antes de la mano de Solomon Hykes, quien es considerado el creador de esta herramienta. 

Hykes ideó Docker a partir de un proyecto interno dentro de lo que se conoce como dotCloud. El objetivo era construir una plataforma como un servicio, lo que también se describe como PaaS. Más allá de que él fue el líder del proceso, el experto en informática y en nuevas tecnologías destaca que contó con el apoyo de reconocidos ingenieros como Andrea Luzzardi y Francois-Xavier Bourlet y Jeff Lindsay. 

Desde su lanzamiento en 2013, Docker fue pensada como una herramienta de código abierto. Esto significa que el software es libre y se basa en un desarrollo de colaboración entre las personas que lo utilizan. No solo por una filosofía relacionada al avance tecnológico social sino también por el abaratamiento de costos que implica esta forma de creación.  

En un principio, Docker utilizaba LXC, la tecnología de Linux para crear contenedores. Sin embargo, al año de su lanzamiento dejó de basarse en esta herramienta para ejecutar las aplicaciones y lo sustituyó por una biblioteca propia. Esto generó una adopción aún más elevada y para el 2015 ya era una de las plataformas más utilizadas a nivel global. Una característica que se mantiene hasta la actualidad. 

¿Quién usa Docker?

Docker fue pensado para ayudar a DevOps y desarrolladores. “Con Docker, estos profesionales pueden crear, empaquetar, enviar y ejecutar aplicaciones fácilmente en forma de contenedores ligeros, portátiles y autosuficientes que pueden utilizarse en prácticamente cualquier lugar”, destacan desde la empresa tecnológica Oracle. Y suman: “Los desarrolladores pueden aprovechar miles de aplicaciones de contenedor de código abierto ya diseñadas, que se pueden ejecutar dentro de un contenedor Docker”. 

Por otro lado, para aquellas personas que trabajan como DevOps, Docker les permite una integración continua y el desarrollo de cadenas de herramientas. “Al mismo tiempo, se  reducen las limitaciones y la complejidad necesarias dentro de la arquitectura de su sistema para implementar y administrar las aplicaciones”, indican en Oracle. 

Cuáles son las ventajas de Docker

El lanzamiento de Docker generó grandes beneficios para los desarrolladores. Y entre ellos se destacan los siguientes. 

Modularidad

Con los contenedores de Docker es posible separar una parte de una determinada aplicación sin tener que deshabilitarla por completo. De esta manera, se puede actualizar o reparar una determinada parte del proyecto mientras éste continúa funcionando sin inconvenientes. 

Restauración:

Por otro lado, la restauración es posible en Docker. Esto quiere decir que si se lleva a cabo una modificación pero finalmente se opta por no utilizarla, se puede retornar a la versión anterior. Esto agiliza el desarrollo y permite lograr una integración e implementación contínua. 

Implementación rápida

Antes de la existencia de los contenedores, ejecutar un hardware podía tardar días. Por lo tanto, implementarlo y que esté a disposición de un usuario era dificultoso y costoso de hacer. Esto cambió con plataformas como Docker ya que se tarda solo segundos en llevar a cabo el mismo proceso. 

Docker vs Contenedores de Linux 

Cuando se transporta mercadería entre países, las empresas utilizan contenedores físicos para diferenciar e identificar las cargas. Lo mismo, pero de forma virtual, se realiza cuando se desarrolla un software. Tal es el parecido que a este proceso se lo conoce como contenerización. 

“Un paquete de software estándar (conocido como “contenedor”) agrupa el código de una aplicación con las bibliotecas y los archivos de configuración asociados, junto con las dependencias necesarias para que la aplicación se ejecute”, indican los expertos de Microsoft.“Esto permite a los desarrolladores y profesionales de TI implementar aplicaciones sin problemas en todos los entornos”, continúan. 

Actualmente existen distintas empresas que proveen servicios de contenedores. Docker es una de ellas y, como se mencionó, en su primera etapa se basaba en las prestaciones de Linux. Conocido como LXC, esta tecnología permite crear y ejecutar varios sistemas operativos de forma simultánea. Por un lado, tiene el beneficio de ofrecer un conjunto de herramientas para administrar los contenedores. Sin embargo, para poder realizar estas tareas es necesario que todo el entorno sea de Linux, desde el host hasta los sistemas operativos. 

A diferencia de LXC, como Docker se estableció desde su génesis como una plataforma de código abierto, se puede compartir aplicaciones y colaborar con otros desarrolladores gracias a un espacio llamado Docker Hub. Aunque también es necesario destacar que esta herramienta se enfoca en ejecutar una sola aplicación en un entorno aislado. 

De esta forma, se observa que LXC y Docker comparten muchas características, sobre todo en relación a su arquitectura y uso. Sin embargo, también presentan diferencias que son importantes de tener en cuenta antes de utilizar una de estas plataformas para desarrollar una aplicación. 

Docker o LCX: cuál utilizar

Antes de la creación de plataformas como Docker y LCX se utilizaban con regularidad las máquinas virtuales. Estas son softwares que simulan un sistema computacional y posibilitan la ejecución de un programa de la misma forma que lo haría una computadora real. En resumen, son un duplicado eficiente y aislado de una máquina física.

En esa línea, LCX es bastante similar a una máquina virtual ya que puede instalar y configurar cualquier programa. Esto se debe a su diseño flexible que ayuda a controlar el uso de recursos y la visibilidad que tienen los procesos en el resto del sistema. Esta es una gran diferencia con Docker, que se aleja de las máquinas virtuales ya que fue diseñado con el foco puesto en aplicaciones de microservicios. Para los desarrolladores esto es un beneficio ya que es más fácil de usar y no requiere conocimiento previo en Linux para utilizarlo. 

En cuanto a la velocidad de ejecución, no hay una notoria diferencia entre estas plataformas. LXC, en comparación a las máquinas virtuales, tiene tiempos de arranque mucho más rápidos. Y como los contenedores de Docker son livianos también son rápidos a la hora de ejecutarse. De hecho solo toma segundos crearlos. 

La seguridad es quizás uno de los aspectos donde más difieren LXC y Docker. Las configuraciones de seguridad del producto desarrollado por Linux están a la vanguardia del sector. Las políticas de grupo y un perfil predeterminado de AppAmor protegen al host y dificultan al extremo el uso indebido o no permitido de los desarrollos que existen dentro de los contenedores. 

Mientras tanto, Docker busca garantizar la seguridad de las cargas de trabajo al separar el sistema operativo de los servicios que se ejecutan en él. Sin embargo, por la forma en la que esto se lleva a cabo, la plataforma queda más expuesta a los malwares. Un ejemplo de esto se reveló públicamente en 2020. Ese año se dio a conocer la existencia de Doki, un malware que corre en el sistema operativo Linux y que tiene por finalidad infectar la API de los contenedores Docker mal configurados. 

Para evitar inconvenientes, los desarrolladores auditan de forma cotidiana las instalaciones en Docker con la finalidad de encontrar vulnerabilidades. Esto representa una desventaja ya que es una acción extra que debe llevarse a cabo periódicamente y ralentiza el proceso de producción y mantenimiento. 

Finalmente, otro punto a tener en cuenta, y que es de gran importancia para los desarrolladores, es la escalabilidad que permite cada plataforma. LXC es menos escalable que Docker ya que sus imágenes no son tan livianas. Además, con Docker se pueden vincular distintos contenedores y crear una aplicación, lo que habilita el escalado independiente de los componentes dentro de los contenedores. 

Estos son solo algunos de los puntos a tener en cuenta a la hora de elegir LXC o Docker. Según los expertos, ambas tecnologías son efectivas para la ejecución de una aplicación. Por lo tanto, su elección recae en las necesidades que tenga cada desarrollador. Es recomendable que antes de automatizar y simplificar los procesos de producción de una app con una de estas plataformas se investigue sobre ambas y se elija la que más se adapte a los objetivos del proyecto. 

En qué se diferencian Docker y Kubernetes

Un error común es comparar e igualar a Docker y Kubernetes. Sin bien algunas funciones que llevan a cabo son similares, estas herramientas no se oponen sino que se complementan. Una situación que los desarrolladores suelen aprovechar. 

Mientras Docker es una plataforma que empaqueta datos en contenedores y los ejecuta, Kubernetes sirve tanto para ejecutar como para gestionar dichos contenedores. Además, tiene la ventaja de que todos estos procesos se pueden realizar a partir de numerosos tiempos de ejecución. Y uno de ellos es justamente Docker. 

Al igual que Docker, Kubernetes es una plataforma de código abierto. En su caso, fue desarrollada por Google y publicada por la empresa en 2014. “El principal objetivo de Kubernetes es facilitar la implementación y la gestión de sistemas distribuidos complejos, además de seguir beneficiándose del uso mejorado que permiten los contenedores”, aseguran en la compañía. 

Entre las principales ventajas de Kubernetes que destacan los expertos se encuentran la automatización de las operaciones, la abstracción de la infraestructura y la supervisión del estado de servicio. 

Con esto en mente, se entiende que Docker es un tiempo de ejecución de los contenedores mientras que Kubernetes los ejecuta, gestiona y supervisa. Por lo tanto, estas herramientas no compiten entre sí. Aunque otro desarrollo dentro de Docker sí lo hace: Swarm. 

Qué es Docker Swarm

Dentro del ecosistema de Docker existe una herramienta denominada Swarm. La misma permite a los desarrolladores implementar los procesos en múltiples nodos. Estos son los que llevan a cabo la orquestación y la administración de un determinado contenedor. Es decir, acciones que también son posibles de realizar con Kubernetes. 

Para utilizar Swarm, el host donde están implementados los contenedores debe poder ejecutar el servidor de Docker. Además, por predeterminación, está deshabilitado y es necesario un equipo de DevOps para instalarlo y configurarlo. 

En general, hay un consenso de que Docker Swarm es más fácil de instalar. Además, requiere de menos orquestaciones y las ventajas que ofrece no son tan distintas. Sin embargo, Kubernetes es más flexible y la comunidad que se ha generado en torno a la plataforma es mucho más grande. 

La recomendación principal para elegir uno u otro es la cantidad de cargas que se vayan a ejecutar. Si son pocas y la gestión de la infraestructura no es primordial, entonces se recomienda usar Docker Swarm. Mientras que si las cargas son altas y la interoperabilidad dentro de la nube beneficiará al proyecto, entonces Kubernetes se posiciona como la mejor opción. 

Otras herramientas de Docker 

Al igual que existe Swarm, también hay otras funciones que se pueden desarrollar gracias a varios desarrollos que se realizaron luego de la creación de la plataforma. “Docker es esencialmente un kit de herramientas”, afirman desde el equipo de IBM que trabaja con esta tecnología. Algunas de las herramientas disponibles son las siguientes:

Dockerfile

Para iniciar un contenedor dentro de Docker se requiere un archivo de texto. El mismo es simple y contiene las instrucciones para llevar a cabo la acción que da comienzo a las operaciones. A esto se lo conoce como Dockerfile y es, en esencia, una lista de instrucciones de interfaz de línea de comando. Además, es el encargado de automatizar el proceso de creación de imágenes. 

Imágenes Docker 

Al contener el código de origen de aplicación ejecutable, esta es una de las herramientas más importantes. También lleva dentro de sí todas las herramientas, bibliotecas y dependencias que serán ejecutadas por el código como contenedor. Si bien es posible crear una imagen de Docker desde cero, es más común sacarlas de los repositorios existentes donde ya están armadas. 

Otro punto importante es que las imágenes se componen por capas. Y cada una de ellas se corresponde con una versión determinada de la imagen. Por lo tanto, se creará una capa superior cada vez que se le realice una modificación a la imagen. Pero esa capa superior sustituye a su predecesora y se convierte en la actual. Las capas anteriores “se reciclan” para ser utilizadas en otros proyectos o también se pueden almacenar. 

Docker Hub

Como se mencionó, existe un repositorio público donde se pueden encontrar imágenes ya utilizadas de Docker. Su tamaño es tan grande que actualmente se lo conoce como “la biblioteca y comunidad más grande del mundo para imágenes de contenedor”. 

Se estima que este contenedor almacena más de cien mil imágenes procedentes de diversos sectores. Desde proveedores de software hasta desarrolladores individuales que utilizaron la plataforma para un proyecto. Estas imágenes tienen la característica de poder ser compartidas a voluntad. 

Deamon Docker

En este caso, es un servicio que se ejecuta en el sistema operativo. Para llegar a la mayor cantidad de personas posibles, se estableció que funcione con Microsoft Windows o Apple MacOS o iOS. Lo que posibilita Deamon es desarrollar y gestionar las imágenes de Docker usando los comandos del cliente. Por lo tanto, pasa a actuar como el centro de control de la implementación de Docker. 

Registro Docker

Para finalizar, están los registros dentro de Docker. Este es un sistema de almacenamiento y distribución de código abierto. Una gran ventaja es su escalabilidad para las imágenes. Además, el registro que lleva de forma constante permite llevar a cabo un seguimiento de las versiones de imagen en los repositorios. Para lograrlo, se implementa el etiquetado para la identificación, lo que se logra utilizando otra herramienta de control llamada git. 

Cuáles son los límites de Docker 

Si bien Docker soporta una gran cantidad de contenedores individuales gestionándose al mismo tiempo, tiene un límite como plataforma. Al aumentar la cantidad de contenedores que se utilizan y las aplicaciones que se alojan en ellos, la gestión y la organización se vuelve cada vez más complejas. 

Si esto ocurre, lo que se recomienda es agrupar contenedores para que presenten servicios. Lo que se busca con esto es que las redes, la seguridad, la telemetría y otras herramientas se encuentren en los mismos contenedores. 

“Esta tecnología también implica otras limitaciones, por ejemplo, en cuanto a la eliminación de los procesos derivados de los secundarios después de borrar estos últimos, lo cual se realiza de manera natural en los contenedores tradicionales de Linux”, señalan desde Red Hat, empresa que tiene asociaciones con Linux. Y agregan: “A pesar de que no resulte evidente a simple vista, se pueden reducir estas complicaciones al modificar el archivo de configuración y establecer esas habilidades desde el comienzo”. 

Por otro lado, desde Red Hat destacan que “hay otros subsistemas y dispositivos de Linux que no cuentan con espacios de nombres, como SELinux, los grupos de control y los dispositivos /dev/sd”. “Esto implica que, si un atacante obtiene control de estos subsistemas, el host se ve comprometido. El hecho de compartir el kernel del host con los contenedores para mantener la agilidad podría poner en riesgo la seguridad. En cambio, las máquinas virtuales son diferentes, ya que están bien separadas del sistema host”, continúan.

El futuro de Docker 

Durante la última década, la tecnología relacionada a los contenedores avanzó con rapidez. Tanto, que se logró cambiar de forma radical la dinámica de la infraestructura IT moderna. Sin embargo, la evolución de plataformas como Docker está lejos de finalizar. 

Recientemente, se observó como grandes empresas dedicadas a los contenedores compraron o se fusionaron con otras más pequeñas para crear nuevas herramientas, mejorar las que ya existen y robustecer su cartera de productos. 

“Una encuesta a más de 500 organizaciones de TI reveló que la seguridad sigue siendo el principal desafío de los usuarios con la tecnología, seguido de la integración de la infraestructura”, señalan desde Diamanti, compañía que llevó a cabo el informe. Por otro lado, la compañía Sysdig notó un aumento del 100% en la densidad de contenedores en la encuesta de uso de contenedores que organiza anualmente. 

En esa línea, la firma de analistas Gartner había predicho en el 2017 que el uso de contenedores iba a aumentar un 50% en 2020. Esto no solo se cumplió sino que se superó ampliamente. Ahora, la empresa dice que para finales del 2022, más del 75% de las organizaciones ejecutarán contenedores en producción.

@RESERVADOS TODOS LOS DERECHOS
I
Redacción Innovación Digital 360

Nota 1 de 5