Docker y Herramientas de Orquestación
Ricardo Antonio Cutz Hernández
Estudiante de Ingeniería en Ciencias y Sistemas - USAC
Palabras Clave:
Docker, Devops, Cloud, Microservicios, Desarrollo, Programación, Orquestadores.
En la actualidad en el contexto de desarrollo de aplicaciones, Docker es una herramienta que se utiliza por las ventajas que ofrece y la variedad de herramientas que se pueden utilizar para el despliegue y orquestación de contenedores. El uso de contenedores se ha convertido en una práctica común en los equipos de trabajo porque permiten un ambiente uniforme en las diferentes etapas de desarrollo, pruebas y despliegue de servicios. Uno de los problemas frecuentes a los que un desarrollador se enfrenta son las dependencias y librerías utilizadas para el despliegue de una aplicación, esto incluyendo el sistema operativo y el ambiente de desarrollo que se ha preparado para un proyecto en curso, aquí es donde Docker entra en contexto como una solución viable. Para poder entender la importancia que Docker tiene se debe de responder a la pregunta: ¿Qué es Docker?
Docker es una plataforma de contenerización que permite empaquetar una aplicación junto con sus dependencias que asegura que la aplicación funcione en cualquier ambiente. En el contexto de transporte de mercancías en barcos, un contenedor es una unidad estándar para realizar esta tarea, esta misma idea aplica para los contenedores de Docker convirtiéndose en una medida estándar para empaquetar una aplicación
La utilización de Docker ha crecido durante los últimos años y el manejo de contenedores se ha popularizado, la necesidad de poder administrar estos mismos ha incrementado, por ello existen diferentes herramientas llamadas “orquestadores de contenedores” que han surgido para suplir esta necesidad. Una herramienta de orquestación de contenedores tiene como propósito el manejo del ciclo de vida de los contenedores, principalmente en ambientes de producción dinámicos, son utilizados para el manejo de diferentes tareas.
Por ejemplo:
Monitorear la salud de los contenedores activos
Provisionar redundancia
Provisionar alta disponibilidad
Balanceo de carga y descubrimiento de servicios
Repartición de recursos y otras tareas
El utilizar una herramienta de orquestación implica que la configuración del ambiente de despliegue se describe en uno o varios archivos de configuración, estas configuraciones incluyen las imágenes de los contenedores a utilizar, volúmenes de almacenamiento, conexión de red entre los diferentes servicios entre otras configuraciones. El poder utilizar este tipo de archivos (YML o JSON) permite que se pueda llevar un control de las versiones de las configuraciones y controlar el despliegue en diferentes ambientes, puede ser un ambiente de pruebas o un ambiente de producción, esto debido a que todo se maneja como código. La herramienta permite desplegar los contenedores en clústers, manejar los recursos necesarios para cada uno de los servicios y agregar o quitar contenedores de ser necesario. Actualmente existen diferentes herramientas disponibles para lograr todo lo anteriormente mencionado, a continuación, se mencionan algunas de ellas.
Kubernetes
Es una herramienta de código abierto bastante popular para la orquestación de contenedores, permite desplegar y manejar aplicaciones que están conformadas por múltiples contenedores, ayuda a administrar la aplicación contenerizada de diferentes tipos, física, virtual y ambientes de nube [1]. Kubernetes es usualmente utilizada con Docker, pero puede trabajar con cualquier sistema de contenedores que se apegue a los estándares de imágenes de contenedores. Sus beneficios son los siguientes:
Correr en nubes privadas y públicas (Google Cloud, Azure, AWS, etc.)
Asegurar que los contenedores corren en todo momento y ayuda a administrar los recursos.
Permitir que las aplicaciones contenerizadas puedan ser liberadas y actualizadas sin tiempo de caída.
Docker Swarm
Es la herramienta de orquestación de contenedores en clústeres que proporciona Docker, permite desplegar y orquestar contenedores en número grande de anfitriones que corren el motor de Docker. Se hace referencia a esta herramienta que proporciona Docker como el modo Swarm. Esta herramienta es importante mencionarla por la relevancia que tiene Docker, aunque cabe mencionar que no es muy utilizada, ya que existen otros tipos de orquestadores que permiten mayor funcionalidad y compatibilidad con contenedores que no son de Docker. Docker Swarm permite:
Escalar, declarando tareas que pueden correr para cada servicio a desplegar
Manejar la red de los servicios que se despliegan.
Descubrimiento de servicios
Balanceo de carga.
AWS ECS
Llamada “Amazon Elastic Container Service”[3], una herramienta para el manejo de contenedores alta mente escalable y rápida, es provista por Amazon para correr contenedores en clúster de máquinas virtuales (Amazon EC2) que tienen el motor de Docker preinstalado. ECS maneja la instalación, monitoreo y el control de las instancias del clúster por medio de la API de AWS o de la consola de manejo. La idea de esta herramienta es ver el clúster de EC2 como una fuente de recursos de CPU y memoria, permite también que se interactúe con los demás servicios de AWS como Coudwatch configurando alarmas, permitiendo así escalar cuando sea necesario. Dentro de los conceptos que se manejan en el servicio de ECS podemos mencionar:
Task: es una definición de las propiedades de un contenedor, como por ejemplo la imagen a utilizar, la cantidad de CPU y memoria que puede utilizar, el ambiente y los puertos.
Service: Es la definición del máximo o mínimo de “tasks” que pueden correr.
Es importante para mencionar es que ECS puede trabajar con EC2 (Servicio de instancias de AWS) o con Fargate, siendo esta última un motor que permite que se ejecuten contenedores sin servidores, lo cual elimina le necesidad de velar por la plataforma en donde se ejecutan los contenedores, prácticamente permite enfocarse directa y solamente en el manejo de contenedores.
Conclusiones
Docker es una herramienta de contenedores que se ha vuelto tendencia en el medio de desarrollo de aplicaciones
Las herramientas de orquestación permiten manejar y gestionar los contenedores y recursos en aplicaciones y servicios
Dependiendo de la plataforma de contenedores que se utiliza existen herramientas de orquestación que ofrecen o no compatibilidad.
Las herramientas de orquestación están enfocados a manejar escalabilidad y monitoreo de los contenedores que conforman una aplicación.
Referencias
[1] Yegulalp, S. (03 de abril 2019). InfoWorld: What is Kubernetes? Your next application platform. Recuperado de: https://bit.ly/2WwHPqt. [Último acceso: : 3 de septiembre de 2019].
[2] Campus MVP. (07 de agosto 2018). Campus MVP: Las 10 herramientas más importantes para la orquestación de Contenedores en Docker. Recuperado de: https://bit.ly/2J5vBgM. [Último acceso: 3 de septiembre de 2019].
[3] Amazon Web Services. (03 de diciembre 2019). AWS Amazon: AmazDocker Docs: Swarm mode overview. Recuperado de: https://dockr.ly/2wrG9E3. [Último acceso: 03 julio 2019].
[4] Docker. (20 de junio 2016). on Elastic Container Service:. Recuperado de: https://aws.amazon.com/ecs/. [Último acceso: 03 julio 2019].
[5] Kubernetes. (10 de octubre 2019). Kubernetes: ¿Qué es Kubernetes?. Recuperado de: https://bit.ly/2QAax63. [Último acceso: 03 julio 2019].