Y a-t-il un nombre maximum de conteneurs sur un docker?
fondamentalement, le titre dit tout: est-ce qu'il y a une limite dans le nombre de conteneurs qui fonctionnent en même temps sur un seul hôte Docker?
2 réponses
il y a un certain nombre de limites du système que vous pouvez rencontrer (et contourner), mais il y a beaucoup de zones d'Ombre selon
- comment configurer vos conteneurs docker.
- Ce que vous utilisez dans vos contenants.
- quelle version du noyau, de la distribution et du docker vous utilisez.
les figures ci-dessous sont tirées de l'image vm de boot2docker 1.11.1 qui est basée sur Tiny Core Linux 7. Le le noyau est 4.4.8
Panneau
Docker crée ou utilise un certain nombre de ressources pour exécuter un conteneur, en plus de ce que vous exécutez à l'intérieur du conteneur.
- attache un adaptateur ethernet virtuel à la
docker0
pont (1023 max par pont) - monte une AUFS et
shm
système de fichiers (1048576 montures max par type fs) - Create est un calque AUFS au-dessus de l'image (127 calques max)
- Fourches 1 extra
docker-containerd-shim
processus de gestion (~3MB par conteneur sur avg etsysctl kernel.pid_max
) - Docker API / daemon données internes pour gérer le conteneur. (~400k par conteneur)
- crée le noyau
cgroup
s et des espaces de noms - ouvre les descripteurs de fichier (~15 + 1 par conteneur courant au démarrage.
ulimit -n
etsysctl fs.file-max
)
options Docker
- cartographie des ports
-p
lancera un processus supplémentaire par numéro de port sur l'hôte (~4.5 MB par port sur avg pre 1.12, ~300k par port > 1.12 et aussisysctl kernel.pid_max
) --net=none
et--net=host
supprimerait les frais généraux de réseau.
services de conteneurs
les limites générales seront normalement déterminées par ce que vous faites à l'intérieur des conteneurs plutôt que par les dockers (à moins que vous ne fassiez quelque chose d'ésotérique, comme tester combien de conteneurs vous pouvez faire :)
Si vous exécutez des applications dans une machine virtuelle (nœud,ruby,python,java) utilisation de la mémoire est susceptible de devenir votre principal problème.
IO à travers un 1000 processus causerait beaucoup de conflits D'IO.
1000 processus essayer d'exécuter en même temps causerait beaucoup de changement de contexte (voir applications vm ci-dessus pour la collecte des ordures)
si vous créez des connexions réseau à partir de 1000 conteneurs, la couche réseau des hôtes aura une séance d'entraînement.
ce n'est pas très différent de mettre au point un hôte linux pour exécuter un 1000 processus, juste quelques processus supplémentaires Frais généraux des dockers à inclure.
Exemple
1023 Docker busybox images running nc -l -p 80 -e echo host
utilise environ 1 Go de mémoire du noyau et 3,5 Go de mémoire du système.
1023 brut nc -l -p 80 -e echo host
les processus tournant sur un hôte utilisent environ 75 Mo de mémoire du noyau et 125 Mo de mémoire du système
le démarrage de 1023 conteneurs a pris en série ~8 minutes.
Tuer 1023 conteneurs en série a pris ~6 minutes
à partir d'un message sur la liste de diffusion, à environ 1000 conteneurs vous commencez à courir dans les problèmes de réseau Linux.
La raison est la suivante:
c'est le noyau, spécifiquement net/bridge/br_private.h BR_PORT_BITS ne peut pas être étendu en raison des exigences de couverture de l'arbre.