Comment accéder à une application installée dans un conteneur Docker à partir d'un autre conteneur Docker?

RC1

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.

ErikMD

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

RESTful WS

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

Un outil d'aide

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.

Remarques finales

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:

  • Pro (maintenabilité): chaque image / conteneur (version et configuration) peut être mis à jour indépendamment des autres images / conteneurs;
  • Contre (maintenabilité): cela induit plus de comptabilité pour ancrer et maintenir chaque image;
  • Pro (disponibilité): si les calculs effectués par un service sont coûteux, ils peuvent être répartis entre plusieurs exemplaires d'un même service;
  • Contre (disponibilité): une requête HTTP vers un autre conteneur est plus lente et moins «robuste» qu'un simple appel système CLI dans un seul conteneur;
  • etc.

Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.

En cas d'infraction, veuillez [email protected] Supprimer.

modifier le
0

laisse moi dire quelques mots

0commentaires
connexionAprès avoir participé à la revue

Articles connexes

TOP liste

  1. 1

    Redirection HTTP vers HTTPS dans Java à l'aide de HTTPURLConnection

  2. 2

    Uncaught TypeError: map n'est pas une fonction dans Reactjs avec Firebase

  3. 3

    Laravel SQLSTATE [HY000] [1049] Base de données inconnue 'previous_db_name'

  4. 4

    Comment envoyer plusieurs variables de la lame au contrôleur

  5. 5

    Microsoft.WebApplication.targets

  6. 6

    Comment analyser un fichier avec un tableau d'objets JSON en utilisant Node.js?

  7. 7

    Comment définir du texte dans un QLabel et afficher les caractères '<>'?

  8. 8

    Concaténer des variables dans ansible

  9. 9

    Filtrer les données en fonction des conditions d'une trame de données

  10. 10

    Échec de l'exécution de 'insertBefore' sur 'Node': le paramètre 1 n'est pas de type 'Node'

  11. 11

    ESP8266 HADRWARE MINUTERIE, USA pour cocher une macro étrange

  12. 12

    Comment changer le navigateur par défaut en Microsoft Edge pour Jupyter Notebook sous Windows 10 ?

  13. 13

    Comment centrer un div tout en utilisant la transition et transformer avec l'échelle

  14. 14

    Stop jQuery execution after one time execution

  15. 15

    obtenir le nombre de marqueur affiché sur la carte

  16. 16

    System.Data.SqlClient.SqlException: 'Nom de colonne non valide' ApplicationRoleId '.'

  17. 17

    Générer une variable binaire avec une corrélation prédéfinie avec une variable déjà existante

  18. 18

    comment afficher un bouton au-dessus d'un autre élément ?

  19. 19

    Enregistrer le chemin de l'image de la galerie vers la base de données de la salle et l'afficher dans la liste des recycleurs

  20. 20

    php ajouter et fusionner des données de deux tables

  21. 21

    Comment utiliser le stockage local et le supprimer lorsqu'il n'est pas nécessaire

chaudétiquette

Archive