Performance de Contenedores.
Docker usa contenedores, los servidores virtuales usan virtualización. Dos conceptos distintos que no debemos confundir.
Un servidor virtual, correrá sobre un producto emulador de un hardware, con un sistema operativo completo que reconocerá el hard emulado como real, correrán todos los ervicios/demonios que vengan definidos en ese S.O.
Un contenedor, correrá unicamente los programas que indiquemos y la capa de virtualización es muy fina/liviana, pasando las peticiones al kernel de mi equipo real.
En números podemos decir que un servidor virtualizado con Debian ocupa unos 4 gb y que un contenedor con un Debian unos 80 megas.
En el equipo real correrán drivers de red, reconocimiento de hardware, servicios/demonios y un largo etcétera de app corriendo, en algunos casos simplemente al arrancarlo unos 90 procesos.
En un contenedor ese número tiende a ser 1 (uno).
Un contenedor necesita un cpu donde correr un programa y unos pocos megas de ram. Todos estos recursos son de mi equipo real.
El acceso al disco será compartido por todos los contenedores, ya que estarán creados en un mismo lugar/disco (/var/lib/docker/).
Y el acceso a la red aunque creamos que es una interfaz virtual, estará conectada a una placa real de mi equipo real.
(si queremos dar acceso a otros equipos de nuestra red)
Para certificar el consumo de recursos y el tiempo de respuesta de los APPs de nuestros contenedores existen varias herramientas de monitorización, que deberemos correr en nuestro equipo real y desde un equipo cliente conectado a nuestra red.
Existen opciones de docker para limitar el consumo de recursos de un contenedor. CPU o MEMORIA.
# docker run --cpu-quota=80000 --name conte1
# docker run -m 512m --name conte2
En estos sitios (bastante técnico sobre Kernel Linux) habla de los problemas del poco aislamiento entre contenedores.
https://sysdig.com/blog/container-isolation-gone-wrong/
https://hackernoon.com/another-reason-why-your-docker-containers-may-be-slow-d37207dec27f
El punto central es que todos los contenedores correrán sobre mi Kernel real, y que las configuraciones del Kernel, su forma de funcionar tratando de aprovechar los recursos físicos con los que cuenta, no es perfecto y puede generar una degradación en los contenedores.
Recomendamos revisar el servicio brindado por contenedores, tiempos, consumo de recursos e implementar la monitorización de los mismos y alertas.
Al final, me quedo con la frase “un contenedor no es mejor o peor solución que un equipo virtual”.