Estibador

Escala de Docker-Compose

Escala de Docker-Compose
Los contenedores Docker deben tratarse como ganado, no como mascotas. Esto significa que su creación, configuración, gestión y eliminación deben automatizarse de arriba a abajo. No creamos ni configuramos contenedores individuales. Más bien escalamos horizontalmente girando más contenedores.

La escala horizontal se refiere a hacer girar más computadoras, i.e, máquinas virtuales, contenedores o servidores físicos para adaptarse a cualquier aumento de la demanda. Esto contrasta con el escalado 'verticalmente ', que generalmente se refiere a reemplazar una máquina más lenta (con menor memoria y almacenamiento) por una más rápida 'más grande ' uno.

Con los contenedores, el escalado de ambos tipos se ha vuelto muy dinámico. Puede establecer cuotas para aplicaciones específicas estableciendo la cantidad de CPU, memoria o almacenamiento al que pueden tener acceso. Esta cuota se puede cambiar para escalar hacia arriba o hacia abajo según sea necesario. De manera similar, puede escalar horizontalmente girando más contenedores que se adapten a un aumento en la demanda y luego escalarlo destruyendo el exceso de contenedores que creó. Si está utilizando servicios alojados en la nube que le facturan por hora (o minuto), esto puede reducir sustancialmente sus facturas de alojamiento.

En este artículo nos centraremos solo en el escalado horizontal, que no es tan dinámico como la descripción anterior, pero es un buen punto de partida para alguien que está aprendiendo los conceptos básicos. Así que comencemos.

Escale a través de la CLI de docker-compose

Cuando inicia su pila de aplicaciones pasando su archivo de redacción a la CLI docker-compose puedes usar la bandera -escala para especificar la escalabilidad de cualquier servicio en particular especificado allí.

Por ejemplo, para mi archivo docker-compose:

versión: "3"
servicios:
web:
imagen: "nginx: último"
puertos:
- "80-85: 80"
 
$ docker-compose up -d --scale web = 5

Aquí, el servicio se llama web en la declaración de yml pero puede ser cualquier componente individual de su implementación, yo.e, front-end web, base de datos, demonio de monitoreo, etc. La sintaxis general requiere que elija uno de los elementos en la sección de servicios de nivel superior. Además, dependiendo de su servicio, es posible que deba modificar otras partes del script. Por ejemplo, el rango 80-85 de puertos de host se proporciona para acomodar 5 instancias de contenedores Nginx, todos escuchando en su puerto interno 80, pero el host escucha en puertos que van desde 80-85 y redirige el tráfico de cada puerto único a uno de los Instancias de Nginx.

Para ver qué contenedor obtiene qué número de puerto, puede usar el comando:

$ docker ps -a
COMANDO DE IMAGEN DE ID DE CONTENEDOR CREADO             
d02e19d1b688 nginx: latest "nginx -g 'daemon of…" Hace aproximadamente un minuto  
34b4dd74352d nginx: latest "nginx -g 'daemon of…" Hace aproximadamente un minuto  
98549c0f3dcf nginx: latest "nginx -g 'daemon of…" Hace aproximadamente un minuto  
ESTADO DE LOS NOMBRES DE LOS PUERTOS
Arriba Aproximadamente un minuto 0.0.0.0: 83-> 80 / tcp project_web_1
Arriba Aproximadamente un minuto 0.0.0.0: 82-> 80 / tcp project_web_3
Arriba Aproximadamente un minuto 0.0.0.0: 81-> 80 / tcp project_web_2
..

Para escalar más de un servicio, debe mencionarlos individualmente con el indicador de escala y el parámetro de número para asegurarse de que se cree la cantidad deseada de instancias. Por ejemplo, si tiene dos servicios diferentes, debe hacer algo como esto:

$ docker-compose up -d --scale service1 = 5 --scale service2 = 6

Esta es la única forma de hacer esto, ya que no puede ejecutar el comando docker-compose up -scale dos veces una para cada servicio. Si lo hace, el servicio anterior volvería a escalar a un solo contenedor.

Más adelante veremos cómo puede establecer el valor de escala para una imagen dada, desde dentro de la ventana acoplable-compose.yml. En caso de que haya una opción de escala establecida en el archivo, el CLI equivalente para la opción de escala anulará el valor en el archivo.

Escala

Esta opción se agregó en la versión 2 del archivo docker-compose.2 y técnicamente se puede usar, aunque no recomiendo usarlo. Se menciona aquí en aras de la integridad.

Para mi ventana acoplable-componer.archivo yml:

versión 2.2 "
servicios:
web:
imagen: "nginx: último"
puertos:
- "80-85: 80"
escala: 3

Esta es una opción perfectamente válida. Aunque funciona para Docker Engine 1.13.0 y superior.

Usar réplicas en producción

En lugar de usar el comando de escala o el valor de escala desactualizado en su archivo de redacción, debe usar la variable de réplica. Este es un número entero simple asociado con un servicio dado y funciona de la misma manera que lo hace la variable de escala. La diferencia crucial es que Docker Swarm está diseñado explícitamente para sistemas distribuidos.

Esto significa que puede implementar su aplicación en múltiples máquinas virtuales de nodos o servidores físicos que se ejecutan en múltiples regiones diferentes y múltiples centros de datos diferentes. Esto le permite beneficiarse verdaderamente de la multitud de instancias de servicio que se están ejecutando.

Le permite escalar su aplicación hacia arriba y hacia abajo modificando una sola variable, además ofrece una mayor resistencia contra el tiempo de inactividad. Si un centro de datos está inactivo o falla un enlace de red, los usuarios aún pueden acceder a la aplicación porque otra instancia se está ejecutando en otro lugar. Si distribuye la implementación de su aplicación en varias regiones geográficas, e.g, UE, EE. UU. y Asia Pacífico, reducirá la latencia para los usuarios que intentan acceder a su aplicación desde dicha región.

Conclusión

Si bien la escala de composición de Docker es útil para entornos pequeños como un solo host de Docker que se ejecuta en producción. También es muy útil para los desarrolladores que ejecutan Docker en su estación de trabajo. Puede ayudarlos a probar cómo escalará la aplicación en producción y en diferentes circunstancias. El uso del comando de escala evita la molestia de configurar un nuevo Docker Swarm.

Si tiene una instancia de Docker Swarm en ejecución, no dude en jugar con las réplicas. Aquí está la documentación al respecto,

Tutorial de Battle for Wesnoth
The Battle for Wesnoth es uno de los juegos de estrategia de código abierto más populares que puedes jugar en este momento. Este juego no solo ha esta...
0 A.D. Tutorial
De los muchos juegos de estrategia que existen, 0 A.D. logra destacarse como un título completo y un juego táctico muy profundo a pesar de ser de códi...
Tutorial de Unity3D
Introducción a Unity 3D Unity 3D es un potente motor de desarrollo de juegos. Es multiplataforma, es decir, te permite crear juegos para dispositivos ...