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?

19
demandé sur Golo Roden 2014-02-15 19:13:33

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

  1. comment configurer vos conteneurs docker.
  2. Ce que vous utilisez dans vos contenants.
  3. 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 et sysctl kernel.pid_max)
  • Docker API / daemon données internes pour gérer le conteneur. (~400k par conteneur)
  • crée le noyau cgroups et des espaces de noms
  • ouvre les descripteurs de fichier (~15 + 1 par conteneur courant au démarrage. ulimit -n et sysctl 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 aussi sysctl 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

27
répondu Matt 2017-01-16 21:29:48

à 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.

13
répondu darron 2014-02-19 00:42:44