2017-09-01 1 views
0

J'essaye de mettre en place un projet constitué de plusieurs microservices orchestrés avec Docker. Voici le schéma simplifié de mon projet:Microservices autonomes avec Docker

- Main-project 
    - Dockerfile 
    - docker-compose.yml (bundles Microservice1 and Microservice2) 

- Microservice1 
    - Dockerfile 

- Microservice2 
    - Dockerfile 

Maintenant, chaque composant a de nombreuses dépendances telles que RabbitMQ gérées par le fichier docker-compose.yml. Je parviens à faire fonctionner l'ensemble du projet sur Docker en utilisant le fichier de composition.

Cependant, je rencontre des problèmes lors de l'exécution des composants individuels. Le problème est que Microservice1 dépend de rabbitMQ mais il n'a pas de fichier de composition pour gérer cette dépendance, et il en va de même pour tous les autres composants. Ainsi, lorsque j'essaie d'exécuter un composant individuel par lui-même (pour les tests unitaires, par exemple), j'ai un problème de dépendances manquantes.

Devrais-je ajouter toutes les dépendances également sur le Dockerfile de chaque composant? Dois-je avoir un fichier Docker-Composer par composant? Quelles sont les meilleures pratiques pour configurer un système comme celui-ci?

Merci beaucoup!

Mise à jour:

Comme une note importante, j'oublié de mentionner que chaque Microservice a sa propre prise en pension.

+0

Comment les exécutez-vous individuellement? en utilisant docker exécuter? – sergiu

+0

Jusqu'à présent, je n'ai pas été en mesure de les exécuter individuellement. C'est exactement mon problème. Je ne sais pas si ajouter toutes les dépendances au Dockerfile ou avoir un fichier de composition pour chacun. –

+0

quel est le cas d'utilisation? Je veux dire ... les deux services sont dans le conteneur docker? Est-ce que ça vous dérange d'être tous les deux commencés? – sergiu

Répondre

2

Il est vrai qu'un microservice doit être autonome, ce qui signifie qu'il peut être déployé et mis à l'échelle sans d'autres microservices. Mais généralement, un dbms ou un courtier de messages ou un système de cache sont nécessaires pour que le service puisse démarrer. C'est pourquoi la plupart des systèmes CI tels que Gitlab CI ou Drone ou Jenkins ont la possibilité de démarrer d'autres services avant d'exécuter le test unitaire. Si vous n'utilisez aucun CI, il serait judicieux d'avoir un fichier de composition par composant.