2017-03-05 6 views
0

Docker dans sa forme actuelle place les commandes de docker dans une file d'attente de travail et les exécute une à la fois et de manière séquentielle (synchrone). Cela signifie que si vous créez une API unique (node.js) incorporant des commandes docker telles que la mise en place de conteneurs ou le téléchargement d'images, elle sera sauvegardée très rapidement et surchargera la file d'attente du docker. Je suis allé aussi loin. La question est comment puis-je re-modéliser docker pour gérer les commandes de manière asynchrone?Comment faire pour exécuter les commandes Docker de manière asynchrone?

Je me soucie moins d'obtenir des mises à jour sur l'état des commandes ou même de pouvoir fournir une fonction de rappel pour quand c'est fait. Mon objectif principal est d'être en mesure d'appeler rapidement docker pour se lever ou exécuter des commandes dans des volumes élevés sans affecter les temps de réponse pour l'API.

Quelques réflexions -

  1. échelle horizontalement avec plus VM

n'utilise pas efficacement chaque machine virtuelle. Cher. Solution inélégante.

  1. Initialisez plus de démons docker et répartissez les tâches entre les démons disponibles.

Toujours pas vraiment asynchrone. De plus, les divers démons docker sont incapables de partager des ressources telles que des images. Donc, si vous avez 10 démons docker qui veulent exécuter un conteneur Ubuntu, vous aurez besoin de 10 images ubuntu distinctes qui prendront 10 fois l'espace de la taille de l'image d'origine ubuntu.

  1. Async Docker client - https://github.com/tulayang/asyncdocker Je suis incapable d'obtenir cette place et fonctionne même sur le conteneur docker NIM. De plus, il est écrit en NIM. Aussi pas tout à fait clair que c'est ce que je cherche ou si c'est juste référençant les requêtes http async dans docker.
+0

Quelles commandes docker avez-vous trouvé synchrone? Je n'ai jamais rencontré ce problème auparavant. – Matt

+0

@Matt Il est plus prononcé avec les conteneurs debout. 'docker run -it -d ubuntu' Vous pouvez voir l'effet si vous créez la chaîne de commandes suivante dans votre script. 1. Contenir les conteneurs 2. Exécuter la commande dans ce conteneur 3.Arrêtez et supprimez ce conteneur Ensuite, exécutez une boucle pour exécuter ce script à volumes élevés et il sera rapidement sauvegardé, les temps de réponse s'allongent considérablement très rapidement. –

Répondre

0

Vous devez regarder ce qui suit:

  • Registre: Registre de l'image Docker peut être configuré comme proxy de mise en cache. Vos démons docker seront configurés pour utiliser ce registre proxy de mise en cache pour les tirages d'image. Seul le premier tirage d'image sera téléchargé depuis dockerhub et les images seront mises en cache localement, donc le deuxième démon docker qui demande les mêmes images l'aura presque instantanément. Vous pouvez utiliser docker pull registry pour obtenir les images de la bibliothèque (officielle). Docker Swarm: Vous parlez d'initialiser plus de démons docker et d'équilibrer les tâches, ce qui est déjà fait en utilisant Docker Swarm et le réseau overlay intégré qu'il fournit.

  • Kubernetes: Une alternative à Docker Swarm avec beaucoup plus de fonctionnalités et flexability (aussi) la complexité

+0

Le téléchargement à partir d'un registre est une chose que le démon peut faire de manière asynchrone. – Matt