remove - docker store
¿Cuál es el impacto de usar varias imágenes base en Docker? (3)
Entiendo que los contenedores de la ventana acoplable son portátiles entre los hosts de la ventana acoplable, pero estoy confundido acerca de la relación con la imagen base y el host.
De la documentación en Imágenes , parece que tendría una huella mucho más pesada (similar a varias máquinas virtuales) en la máquina host si tuviera una variedad de imágenes base en ejecución. ¿Es esta suposición correcta?
- BUENO : Muchos contenedores compartiendo una sola imagen base.
- MALO : Muchos contenedores ejecutan imágenes de base separadas / únicas.
Estoy seguro de que gran parte de esta confusión proviene de mi falta de conocimiento de LXC.
Estoy confundido acerca de la relación con la imagen base y el anfitrión.
La única relación entre el contenedor y el host es que usan el mismo kernel. Los programas que se ejecutan en Docker no pueden ver el sistema de archivos del host, solo su propio sistema de archivos.
parece que usted tendría una huella mucho más pesada (similar a varias máquinas virtuales) en la máquina host si tuviera una variedad de imágenes base en ejecución. ¿Es esta suposición correcta?
No. La imagen base de Ubuntu es de unos 150MB. Pero sería muy difícil utilizar todos esos programas y bibliotecas. Solo necesita un pequeño subconjunto para un propósito particular. De hecho, si su contenedor está ejecutando memcache, podría simplemente copiar las 3 o 4 bibliotecas que necesita, y sería de aproximadamente 1 MB. No hay necesidad de un shell, etc. Los archivos no utilizados simplemente se colocarán pacientemente en el disco, completamente ignorados. No se cargan en la memoria, ni se copian en el disco.
BUENO: Muchos contenedores compartiendo una sola imagen base. MALO: Muchos contenedores ejecutan imágenes de base separadas / únicas.
No. Usar múltiples imágenes solo usará un poco de RAM. (Obviamente, los contenedores múltiples necesitarán más espacio en el disco, pero el disco es barato, así que lo ignoraremos). Así que diría que es "OK" en lugar de "BAD".
Ejemplo: inicio un contenedor de Ubuntu con Memcached y otro contenedor de Centos con Tomcat. Si estuvieran TANTO ejecutando Ubuntu, podrían compartir la RAM para cosas como libc
. Pero como no comparten los archivos, cada imagen base debe cargar su propia copia de libc
. Pero como hemos visto, solo estamos hablando de 150 MB de archivos, y probablemente solo estés usando un poco de eso. Así que cada imagen solo desperdicia unos pocos MB de RAM.
(Sugerencia: mire su proceso en ps
. Esa es la cantidad de RAM que usa, incluidos los archivos de su imagen).
Creo que las múltiples imágenes de base tienen un impacto menor en la memoria utilizada.
Explicación:
Creo que su comparación con VM es un poco engañosa. Claro, en el caso de que se ejecuten las imágenes base fe 3, tendrá mayores requisitos de memoria que en el caso de solo 1 imagen base, pero las máquinas virtuales tendrán incluso mayores requisitos de memoria:
Cálculo aproximado - Docker, para imágenes M, contenedores N:
- 1 x imagen base + N x contenedor (sistema de archivos + memoria de trabajo)
- M x tamaño de la imagen base + N x contenedor (sistema de archivos + memoria de trabajo)
Cálculo - VMs:
- N x imagen de VM = al menos N x tamaño de la imagen base para VM específica + N x tamaño del contenedor (tamaño del sistema de archivos + memoria de trabajo)
Para que la ventana acoplable obtenga una ventaja, debe tener M << N. Para una pequeña M y una gran diferencia de N entre la ventana acoplable y varias máquinas virtuales es importante.
Por el momento, Docker está utilizando AUFS, que es un sistema de archivos de Union que utiliza la copia en escritura.
Cuando tiene varias imágenes base, esas imágenes ocupan espacio en el disco, pero cuando ejecuta N contenedores desde esas imágenes, no se utiliza ningún disco real. Como se trata de una copia en escritura, solo los archivos modificados ocuparán espacio en el host.
Entonces, realmente, si tiene una imagen base 1 o N, no cambia nada, sin importar cuántos contenedores tenga.
Una imagen no es más que un sistema de archivos en el que se podría chrootear, no hay absolutamente ninguna relación entre una imagen y el host, además del hecho de que debe ser linux binario para formar la misma arquitectura.