Pour rappel, Un « stack » (ou « pile » en français) est une application qui se compose de plusieurs conteneurs qui proposent chacun d’entre eux ce qu’on appelle un « micro-service ». Cette application est déployée à l’aide d’un fichier « compose ».
C’est-à-dire qu’à l’aide de ce fichier et depuis un « Swarm Manager », nous allons pouvoir déployer plusieurs conteneurs ensemble permettant d’avoir des « micro-services » qui fonctionnent ensemble.
Le principe est donc identique à « docker compose » mais l’utilisation se fait depuis un cluster docker.
Pour commencer avec les « stacks » nous allons devoir créer un fichier « docker compose ».
Pour cela, je vais créer un nouveau répertoire appelé « stack » et y créer un fichier « docker compose » totalement vierge.
Une fois le fichier créé, nous allons l’éditer avec notre éditeur de texte préféré.
Attention, il sera impératif d’utiliser la version 3 ou supérieur de « docker compose » pour créer un « stack ».
Comme nous pouvons le remarquer, il ressemble énormément à un fichier « docker compose » classique tel que nous l’avons vu précédemment.
Cependant, parmi les différents informations que nous avons inscrites nous pouvons retrouver le « deploy », avec son mode, ses réplicas et son emplacement (sur un worker ou manager par exemple).
Cette ligne « deploy » fait partie de la configuration d’un « stack ». Sans elle, le fichier correspondrai tout simplement à un fichier « docker compose » classique.
Attention : il est possible d’ajouter encore bien des options dans le fichier compose.
Comme nous l’avons déjà fait, nous pouvons vérifier la configuration
Une fois notre fichier « compose » terminé, nous allons utiliser la commande :
docker stack "option"
Les différentes options sont disponibles en tapant « docker stack --help »
L’option qui nous intéresse ici est « deploy ». Nous l’utiliserons comme ceci
docker stack deploy
Cependant « deploy » possède également des options que nous pouvons retrouver avec la commande « docker stack deploy --help »
L’option qui nous intéresse ici va nous permettre de faire un « deploy » depuis un fichier « compose ».
Il faudra spécifier le nom du fichier « compose » que l’on souhaite utiliser ainsi que le nom du « stack » que l’on souhaite ajouter.
docker stack deploy --compose-file "nom_du_fichier" "nom_du_stack"
Notre « stack » vient d’être créée et nous pouvons comme pour chacune des commandes docker utiliser « ls » afin de lister les « stacks » de notre cluster
docker stack ls
Nous pouvons voir que nous avons deux services à l’intérieur de notre « stack ».
Pour afficher plus de détails, nous pouvons utiliser « ps » sur notre stack
docker stack ps "nom_du_stack"
Nous pouvons voir que chacun des deux services tournent sur chacun des « Workers » du cluster.
Lors des exemples précédents, nous avions positionnés nos « Manager » au statut « drain » les empêchant d’être utilisés pour héberger des services.
Nous allons modifier leur disponibilité pour les positionner sur « active »
Normalement tous nos nœuds sont donc compatible avec l’hébergement de services.
A présent, nous allons donc revenir dans notre fichier « compose » et l’éditer afin de commenter la partie « placement » qui permet de spécifier quel type de nœuds va pouvoir effectuer l’hébergement du service. Les ports 8080 et 3306 étant déjà utilisés nous allons également les modifier.
Le fichier étant prêt, nous allons de nouveau lancer notre commande « deploy » créer à nouveau un « stack ».
Attention : ne pas oublier de changer le nom du « stack »
On peut à nouveau effectuer un « ls » sur les « stacks » pour avoir la liste puis faire un « ps » sur ce nouveau « stack pour avoir plus d’informations
Cette fois-ci lorsque le stack a été déployé, les différents services ont été créés sur des « workers » mais également sur des « managers ». Toujours un service web et un service db sur 3 nœuds, ce qui correspond aux 3 réplicas que l’on a configuré dans notre fichier « compose ».
Attention : Par défaut, les « stacks » vont donc créer les services sur les nœuds disponibles y compris les « managers » si ceux-ci sont disponible pour en héberger.
Dans cette partie de la documentation nous allons voir les différentes options que nous offre la commande « docker stack ».
Au moment où j’écris cette documentation, les « stacks » étant assez récent, les options ne sont pas très nombreuses.
Pour lister les différentes options qui s’offrent à nous, nous allons faire la commande
docker stack --help
Pour rappel, la commande permet de déployer des « stacks » y compris depuis un fichier « compose » et possède de nombreuses options.
Comme nous avons déjà vu l’option « deploy », nous ne reviendrons pas dessus dans cette partie.
docker stack deploy --compose-file "nom_du_fichier" "nom_du_stack"
La commande « ls » permet de lister les différents stacks en cours d’exécution mais également d’indiquer le nombre de services qui les composent
docker stack ls
La commande « ps » permet d’obtenir des informations sur les « stacks ».
On y retrouve par exemple le nom des conteneurs, l’image utilisée, le nom de l’hôte qui héberge le conteneur, son état, depuis combien de temps le conteneur est « up », les éventuelles erreurs et les ports utilisés
docker stack ps "nom_du_stack"
La commande « rm » va nous permettre de supprimer des « stacks » et tout ce qui le compose.
Pour cela il faudra l’utiliser de cette manière :
docker stack rm "nom_du_stack"
La commande « services » va nous permettre d’obtenir des information sur les services qui composent les « stacks ».
On y retrouve le nom du service, son image, le nombre de réplicas, son ID et les ports utilisés.
docker stack service "nom_du_stack"