3

Cómo crear múltiples contenedores con Docker

8374Puntos

hace 6 años

Cuando empiezas a usar Docker y mientras entiendes su funcionamiento, sueles crear un contenedor con todos los servicios que vas a utilizar, esto es el equivalente a tener todo tu código en un solo archivo (todos lo hicimos alguna vez).

No puedo decir que esta sea una buena o una mala práctica, pues muchas de las cosas que hacemos dependen de la infraestructura y del contexto en que se ejecute la aplicación.

No obstante, lo más recomendable es tener un contenedor por servicio, supongamos que queremos tener una aplicación como Twitter (no recuerdo si usa todo esto exactamente pero sirve para ejemplificar), para lograrlo necesitaríamos:

  • Un contenedor para la aplicación de Scala
  • Un contenedor para Cassandra
  • Un contenedor para Redis

Una vez que los creamos podemos ligarlos o usar Docker Composer y listo, ya tenemos nuestros contenedores unidos.

¿Nuestra plataforma está lista para poder recibir millones de usuarios? La respuesta es un rotundo “No”, un solo servidor no da para eso y menos una sola instancia de la plataforma.

En la mayoría de los casos las plataformas/aplicaciones siempre están disponibles, aunque se esté haciendo una actualización, así que debe tenerse más de una instancia del contenedor corriendo y tener un load balancer que se ocupe de re-dirigir el tráfico HTTP entre las distintas instancias que se están ejecutando.

Pero la pregunta del millón, ¿como hago eso?

Crear múltiples instancias de un contenedor es fácil si usamos el comando docker run, y hacer el balanceo de cargas también gracias a HAProxy.

HAProxy es una herramienta que actúa como intermediario entre las peticiones de los usuarios y los múltiples servidores que estén a la espera de contestar, esto con la finalidad distribuir la carga entre servidores para que no se saturen, lo que da como resultado una plataforma con alta disponibilidad.

Este tipo de infraestructuras son utilizadas por empresas grandes como Google y Facebook, quiénes tienen la tarea de recibir millones o quizás miles de millones de peticiones por segundo, de hecho si haces un ping a Google y esperas por un tiempo antes de volver a hacerlo, es posible que no te conteste el mismo servidor, lo cual indica que hay alguien que nos dice a dónde ir.

ping google

Hacer este tipo de configuraciones requiere tiempo y conocimiento (saber lo que estás haciendo), pero si quieres algo rápido para experimentar, te recomiendo el uso de una imagen de docker creada por Tutum, que implementa HAProxy en un contenedor y nos proporciona un tutorial muy sencillo de cómo implementar su contenedor para hacer el balanceo de cargas.

En la documentación nos encontramos con un ejemplo de cómo crear dos instancias de un contenedor para que se pueda acceder a ellas a través del puerto 80.

docker run -d --name web1 tutum/hello-world
docker run -d --name web2 tutum/hello-world

En donde web1 y web2 son los nombres de los contenedores, y tutum/hello-world es la imagen que se bajará del Registry de Docker o una imagen local, si así lo deseas.

Al final solo tenemos que hacer un enlace entre los contenedores hacia el contenedor con HAProxy.

docker run -d -p 80:80 --link web1:web1 --link web2:web2 tutum/haproxy

Listo, ya tenemos un contenedor que hace el balanceo de cargas a dos contenedores.

En conclusión, hay herramientas que pueden hacer el despliegue de una plataforma robusta con solo un click, existen otras herramientas que usan Docker y te facilitan el proceso de construcción o administración de la misma.

Al final esto debe ser transparente para el usuario, nuestra tarea es tener una plataforma sólida y escalable para entregar el mejor servicio posible. El desarrollo de plataformas como el desarrollo de aplicaciones está tomando un “nuevo rumbo”, muy parecido a las buenas prácticas de programación: crear clases/contenedores con tareas específicas, y comunicar a los objetos/componentes mediante mensajes, manteniendo a las partes aisladas en funcionamiento y entorno, pero colaborando para crear un todo.

Joel Humberto
Joel Humberto
dezkareid

8374Puntos

hace 6 años

Todas sus entradas
Escribe tu comentario
+ 2
1
5656Puntos

me parece genial! la información que has brindado, muchas gracias por el aporte, como pregunta, ¿es recomendable usar docker para inicar una aplicación pequeña y después empezar a usar servidores dedicados segun se empiece a crecer y escalar?