Container Docker et consommation de mémoire

supposons que je lance un grand nombre de conteneurs docker qui sont basés sur la même image docker. Cela signifie que chaque conteneur docker fonctionne avec la même application. Ce pourrait être le cas que la demande est assez importante et nécessite beaucoup de mémoire du disque dur.

Comment est le panneau de traiter avec elle?

est-ce que tous les conteneurs docker partageant la partie statique sont définis dans l'image docker?

Si non est-il judicieux de copier l'application dans certains répertoire sur la machine qui est utilisée pour exécuter des conteneurs docker et de monter ce répertoire app pour chaque conteneur docker?

45
demandé sur fiatjaf 2014-07-11 20:18:19

1 réponses

Docker partage les ressources au niveau du noyau. Cela signifie que la logique d'application n'est jamais répliquée lorsqu'elle est exécutée. Si vous démarrez notepad 1000 fois, il n'est encore stocké qu'une seule fois sur votre disque dur, les mêmes comptes pour les instances docker.

si vous exécutez 100 instances de la même image de docker, tout ce que vous faites vraiment est de garder l'état du même logiciel dans votre RAM dans 100 lignes de temps séparées. Les hôtes ou les processeur(s) changement de l'état en mémoire de chacun de ces conteneurs instances contre le logiciel qui le contrôle, donc vous consommez 100 fois la mémoire RAM nécessaire pour exécuter l'application. Il n'y a aucun intérêt à stocker physiquement le même code octet pour le logiciel 100 fois parce que cette partie de l'application est toujours statique et ne changera jamais. (Sauf si vous écrivez un morceau de logiciel Auto-altérant fou, ou vous choisissez de reconstruire et redéployer l'image de votre conteneur)

C'est pourquoi les conteneurs ne pas permettre la persistance de la box, et comment docker diffère des VM qui utilisent des disques durs virtuels. Cependant, cela n'est vrai que pour la persistance à l'intérieur du conteneur. Les fichiers qui sont modifiés par le logiciel docker sur le disque dur sont "montés" dans des conteneurs en utilisant les volumes docker et ne font donc pas vraiment partie des environnements docker, mais juste montés dans eux. (Pour en savoir plus:https://docs.docker.com/userguide/dockervolumes/)

une Autre question que vous pourriez vouloir demander quand vous pensez à cela, c'est comment docker stocke les changements qu'il fait à son disque sur runtime. Ce qui est vraiment mignon à vérifier, c'est comment docker parvient réellement à obtenir ce travail. L'état initial de l'conteneur disque dur est ce qui est donné à partir de l'image. Il peut écrivez à cette image. Au lieu d'écrire à l'image, une diff est faite de ce qui est changé dans l'état interne des conteneurs par rapport à ce qui est dans l'image docker. Docker utilise une technologie appelé "Système De Fichiers Union", qui crée une couche diff au-dessus de l'état initial de l'image docker.

cette "diff" (référencée comme le écriture conteneur dans l'image ci-dessous) est stocké dans la mémoire et disparaît lorsque vous supprimez votre conteneur. (Sauf si vous utilisez la commande "docker commit", cependant: je ne recommande pas cela. L'état de votre nouvelle image docker n'est pas représenté dans un fichier docker et ne peut pas être facilement régénéré à partir d'un reconstruire)

Union Filesystem

84
répondu RoyB 2014-12-04 08:19:26