memory - imagenes - Contenedor Docker y consumo de memoria
imagenes docker (1)
Docker comparte recursos a nivel del kernel. Esto significa que la lógica de la aplicación nunca se replica cuando se ejecuta. Si inicia el Bloc de notas 1000 veces, todavía se almacena solo una vez en su disco duro, lo mismo cuenta para las instancias del acoplador.
Si ejecuta 100 instancias de la misma imagen del acoplador, todo lo que realmente hace es mantener el estado del mismo software en su RAM en 100 líneas de tiempo separadas. Los procesadores host cambian el estado en memoria de cada una de estas instancias de contenedor al software que lo controla, por lo que usted consume 100 veces la memoria RAM requerida para ejecutar la aplicación. No tiene sentido almacenar físicamente exactamente el mismo código de bytes para el software 100 veces porque esta parte de la aplicación siempre es estática y nunca cambiará. (A menos que escriba alguna pieza loca de software que se altere a sí mismo, o elija reconstruir y volver a implementar la imagen de su contenedor)
Esta es la razón por la cual los contenedores no permiten la persistencia desde el primer momento, y cómo el docker difiere de las máquinas virtuales comunes que usan discos duros virtuales. Sin embargo, esto solo es cierto para la persistencia dentro del contenedor. Los archivos que el software Docker está cambiando en el disco duro se "montan" en contenedores utilizando los volúmenes del acoplador y, por lo tanto, no son realmente parte de los entornos del acoplador, sino que simplemente se montan en ellos. (Lea más sobre esto en: https://docs.docker.com/userguide/dockervolumes/ )
Otra pregunta que puede hacer al pensar en esto es cómo hace Docker almacena los cambios que hace en su disco en tiempo de ejecución. Lo que es realmente dulce de revisar, es cómo Docker realmente logra hacer que esto funcione. El estado original del disco duro del contenedor es el que se le asigna a partir de la imagen. NO puede escribir en esta imagen. En lugar de escribir en la imagen, se hace una diferencia de lo que se cambia en el estado interno de los contenedores en comparación con lo que está en la imagen del acoplador. Docker usa una tecnología llamada " Union Filesystem ", que crea una capa de diferenciación sobre el estado inicial de la imagen del acoplador.
Este "diff" (al que se hace referencia como el contenedor modificable en la imagen a continuación) se almacena en la memoria y desaparece cuando elimina su contenedor. (A menos que use el comando "docker commit", sin embargo: no lo recomiendo. El estado de su nueva imagen de acoplador no está representado en un archivo docker y no puede regenerarse fácilmente a partir de una reconstrucción)
Supongamos que estoy comenzando una gran cantidad de contenedores Docker que se basan en la misma imagen del acoplador. Significa que cada contenedor de acoplador ejecuta la misma aplicación. Podría ser el caso de que la aplicación sea lo suficientemente grande y requiera mucha memoria de disco duro.
¿Cómo está lidiando Docker con esto?
¿Todos los contenedores acoplables que comparten la parte estática están definidos en la imagen del acoplador?
Si no, ¿tiene sentido copiar la aplicación en algún directorio de la máquina que se utiliza para ejecutar los contenedores acoplables y para montar este directorio de aplicaciones para cada contenedor acoplable?