2017-01-25 2 views
0

J'ai une application Java (Jboss version 6.1 Community) avec un trafic important. Maintenant, je veux migrer ces déploiements d'applications en utilisant docker et docker-swarm pour le clustering.Comment faire évoluer l'application avec plusieurs ports exposés et plusieurs volumes montés en utilisant l'essaim de docker?

Scénario

Mon application a besoin de deux ports exposés du contenant docker un est le port Web (ie9080) et l'autre est le port de connexion de bases de données (ie1521) et il y a peu de choses comme répertoire des journaux pour chaque conteneur monté sur le système hôte.

Exemple simple Docker

docker run -it -d --name web1 -h "My Hostname" -p 9080:9080 -p 1521:1521 -v /home/web1/log:/opt/web1/jboss/server/log/ -v /home/web1/license:/opt/web1/jboss/server/license/ MYIMAGE 

Docker par exemple Swarm

docker service create --name jboss_service --mount type=bind,source=/home/web1/license,destination=/opt/web1/jboss/server/license/ --mount type=bind,source=/home/web1/log,destination=/opt/web1/jboss/server/log/ MYIMAGE 

Maintenant, si j'ÉCHELLE/répliquer service au-dessus de 2 ou 3, le port hôte, il se lie et qui répertoire mount va-t-il lier pour les conteneurs nouvellement créés ??

Quelqu'un peut-il m'aider à comprendre comment le service de réplication et d'échelle fonctionnera dans ce type de scénario?

J'ai également traversé --publish et --name global mais rien ne m'aide dans mon cas.

Merci!

Répondre

1

Les conteneurs avec état soutenus sont encore immatures dans l'univers Docker. Je ne suis pas sûr que ce soit possible avec Docker Swarm (si c'est ce que j'aimerais savoir) et ce n'est pas un problème simple à résoudre.

Je vous suggère de revoir la fonction Statefulset qui vient dans la dernière version de Kubernetes:

Il prend en charge la création d'un volume unique pour chaque conteneur un événement de mise à l'échelle. En ce qui concerne la gestion des ports qui fait partie de la fonctionnalité Kubernetes nornal Service qui implémente l'équilibrage de la charge du conteneur.

1

Je suggère de construire votre pile dans un fichier docker-composer v3, qui pourrait être exécuté sur un cluster swarn. Au lieu de publier ces ports, vous devez les exposer. Cela signifie que les ports ne sont pas disponibles directement sur le système hôte, mais dans le réseau docker. Chaque Composefile a son propre réseau par défaut, par exemple: 172.18.0.0/24. Chaque conteneur a sa propre adresse IP et rend ce service disponible sur le port spécifié. Si vous redimensionnez jusqu'à 3 conteneurs vous obtenu: 172.18.0.1:9080,1521 172.18.0.2:9080,1521 172.18.0.3:9080,1521

Vous auriez besoin d'un Loadbalancer pour accéder à ces services. J'utilise Jwilder/Nginx si vous préférez une approche de conteneur. Je peux également recommander Rancher qui vient avec un Loadbalancer interne.En mode Nuée, vous devez utiliser le pilote de réseau de recouvrement et créer le réseau, sinon il serait simplement accessible depuis l'hôte local lui-même.

liés à l'exploitation forestière, vous devez rediriger votre fichier journal stdout et les attraper avec un pilote d'enregistrement (fluentd, syslog, graylog2)

Pour stockage durable, vous devriez jeter un oeil à Flocker! Toutefois, les bases de données risquent de ne pas prendre en charge ces implémentations de stockage. EG: MYsql ne les supporte pas, mongodb fonctionne avec un volume de flocker.

Il semble que vous devez lire beaucoup .. :) https://docs.docker.com/