J'ai une application serveur Python en cours d'exécution dans un conteneur Python: alpin. L'application serveur utilise différents pipelines biologiques tels que BLAST ou Bowtie et autres (toutes les applications seules sans fonctionnalité de réseau).
Serait-il préférable d'installer le logiciel tiers dans le Python: conteneur alpin de l'application serveur, ou d'avoir des conteneurs séparés pour chaque application? Je pense que la seconde aurait plus de sens.
Cependant, si j'ai maintenant plus de 3 conteneurs avec mon application serveur, BLAST, Bowtie, etc., comment puis-je accéder à ces applications tierces à partir de mon application serveur?
Un autre avantage d'avoir plusieurs conteneurs serait que des images existent sur le hub Docker pour toutes les applications requises par mon application serveur.
Pour être clair, il ne s'agit pas de partager des données entre des conteneurs (par exemple, des volumes, des liaisons), mais de faire des appels directs vers des applications dans d'autres conteneurs.
La réponse de @ DazWilkin s'est concentrée uniquement sur la dernière partie de la question de @ RC1 (comment rendre les services dockérisés disponibles à partir de l'hôte sur un port spécifique).
La première partie est liée à une hypothèse générale implicite lorsqu'il s'agit de «dockeriser» les applications: chaque «back-end» est censé fournir ses services via RESTful Web Services , aka Web APIs .
Pour résumer, le conteneur "front-end" s'appuiera sur les conteneurs "back-ends" en utilisant des requêtes HTTP dédiées (par exemple, HTTP GET ou HTTP POST… avec une charge utile spécifique si besoin).
Alors, comment rendre possible cette "dockerisation", si vous divisez votre application en plusieurs conteneurs?
Vous devez vous assurer que chacun de ces conteneurs «back-end» est compatible HTTP; Donc, soit vous pouvez trouver des images officielles Docker Hub qui fournissent cela prêt à l'emploi, soit vous voudrez peut-être effectuer cette tâche (dockerizing les dépendances CLI de votre application) vous-même, en vous appuyant par exemple sur ce projet:
https://github.com/proycon/clam
Transformez rapidement les applications de ligne de commande en services Web RESTful avec un frontal d'application Web. Vous fournissez une spécification de votre application de ligne de commande, son entrée, sa sortie et ses paramètres, et CLAM enveloppe votre application pour former un service Web RESTful à part entière.
Dans l'ensemble, cette stratégie (fractionner vos back-ends CLI en plusieurs conteneurs) est-elle vraiment nécessaire?
La réponse générale est: oui, cela peut être une très bonne stratégie en général, mais pas nécessairement dans votre situation particulière pour chaque back-end CLI que vous utilisez, vous devrez peut-être peser le pour et le contre, par exemple:
Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.
En cas d'infraction, veuillez [email protected] Supprimer.
laisse moi dire quelques mots