Docker-compose et réseaux

Que ce que Docker-compose

Il s’agit d’un outil d’orchestration pratique et efficace pour gérer plusieurs conteneurs docker ayant des dépendances entre eux ; On parle donc d’une certaine manière automatique d’ordonnancement et de lancement des conteneurs. L’outil docker-compose est l’outil officiel proposé par Docker. Cet outil va lancer vos conteneurs et leurs éventuels liens à partir d’un fichier de configuration écrit en yaml.

Comment ça marche

Dans le fichier (docker-compose.yml) qui va contenir la configuration de votre stack, vous pouvez décrire explicitement dedans la façon dont vous souhaitez déployer votre application à plusieurs conteneurs. Éventuellement, vous pouvez également décrire la façon dont vous allez générer vos images Docker personnalisées.
Pour l’essentiel, ce fichier contient la définition de chacun des conteneurs à déployer, ainsi que certaines caractéristiques relatives à chaque déploiement de conteneur. Une fois que vous disposez d’un fichier de description de déploiement à plusieurs conteneurs, vous pouvez déployer l’ensemble de la solution en une seule action orchestrée par la commande:

docker-compose up

Docker-compose va créer, lancer, ouvrir les ports, créer les volumes et lier vos conteneurs tout seul.

Let’s Go! Pratique

Jetons un coup d’oeil sur l’un des exemples des fichiers docker-compose.yml

version: '3.1'

services:
  tomcat1:
    image: tomcat:latest
    ports:
      - '1002:80'
      - '1003:8080'
      - '1013:8080'
  tomcat2:
    image: tomcat:latest
    ports:
      - '1004:80'
      - '1005:8080'

Chaque docker-compose.yml suit la structure suivante :
– la partie ‘version’ ;
– la partie ‘services’ qui contient elle même un ensemble de conteneurs ;
– chaque conteneur contient l’image qu’il utilise et d’autres configurations.
Dans notre exemple nous utilisons la version ‘3.1’; et nous avons deux conteneurs ‘tomcat1’ et ‘tomcat2’ qui utilisent la même image (la dernière version tomcat). la configuration ports du conteneur est très importante si on veut exposer notre application à l’extérieur de notre docker cluster.

Exécutons ce fichier docker compose avec la commande indiqué ci-dessus.

docker-compose -f [path_to_docker-compose.yml] run

Si vous utilisez pas le flag (-f) cette commande va chercher le fichier dans le répertoire actuel.
Nous pouvons remarquer les deux instances tomcat1_1 et tomcat1_2 lancées après avoir exécuté le fichier yml.

cette commande ne permet pas de retourner la main sur la ligne des commandes. Pour cette raison nous pouvons lancer cette application comme un démon en utilisant le flag (-d)

docker-compose up -d

Vous pouvez vérifier les instances docker en cours d’exécution en utilisant la commande docker ps.

Mettez en tête que ces deux instances de conteneurs peuvent communiquer entre elles. Voici une petite démonstration en utilisant la commande shell ‘ping’ ; pour ce faire nous allons exécuter la commande suivante:

docker exec -it [container_name] /bin/bash

Docker et les réseaux

Enfaite, le fait de pouvoir exécuter la commande ping, c’est que les deux conteneurs créent un réseau entre eux; un réseau virtuel simple. Ce type de réseau va permettre à tout les conteneurs de communiquer les uns avec les autres par les alias.
Si on spécifie pas le réseau, docker utilise le pont réseau par défaut ‘link’.

Ce que nous allons apprendre maintenant est la vision et la création des réseaux. Pour regarder la liste des réseaux dans notre moteur docker nous exécutons la commande suivante:

docker network ls
NETWORK ID          NAME                DRIVER              SCOPE
26d098857d2e        bridge              bridge              local
b5fedd9ebf11        desktop_default     bridge              local
53578a9403b3        host                host                local
403297b3f90a        none                null                local

Après avoir vu la liste des réseaux existant, nous pouvons bien sûr créer nos propre réseaux, pour se faire il suffit d’utiliser la commande suivante :

docker network create [nom_du_réseau]

docker network create myNetwork
79bfdc122532d0e1cf70e4b749c829521639cdf33b7f5f80154e3a0286c38cea

docker network ls

NETWORK ID          NAME                DRIVER              SCOPE
26d098857d2e        bridge              bridge              local
b5fedd9ebf11        desktop_default     bridge              local
53578a9403b3        host                host                local
79bfdc122532        myNetwork           bridge              local
403297b3f90a        none                null                local

Pour supprimer les réseaux non utilisés est très simple, il suffit d’exécuter la commande suivante:

docker network prune

Cela bien sûr va garder toujours les réseaux par défaut du moteur docker.

Nous pouvons bien sûr utiliser notre réseau pré-existé à partir du fichier docker-compose.yml de la manière suivante.

version: '3.1'

services:
  db:
    image: mysql:latest
    restart:always
    environment:
       MYSQL_ROOT_PASSWORD: mypassword
  adminer:
    image: adminer:latest
    restart:always
    ports:
      - '8080:8080'
networks:
  default:
    external:
      name: myExistingNetwork

Nous pouvons même créer plusieurs réseaux au sein de ce fichier, par exemple si on veut associer un réseau backend au service db et le network frontend au service adminer.

services:
  db:
    image: mysql:latest
    restart:always
    environment:
       MYSQL_ROOT_PASSWORD: mypassword
    networks
      - frontend
  adminer:
    image: adminer:latest
    restart:always
    ports:
      - '8080:8080'
    networks:
      - backend
networks:
  frontend:
     driver:bridge
  backend:
     driver:bridge

Pour lancer ces services, vous vous rappelez de quelle commande on va utiliser; oui sans doute la commande docker-compose up -d.
Mais avant de lancer cela; nous devons arrêter tous les services exécuter précédemment par la commande suivante:

docker-compose down
docker-compose up
Exécuter la commande docker-compose up

Nous pouvons connecter le conteneur nginx avec le réseau frontend en utilisant la commande suivante:

docker network connect dockercompnetworks_frontend frosty_hypatia
Commande docker network connect

A la fin nous pouvons inspecter le réseau en utilisant la commande suivante:

docker network inspect [nom_du_résea]
docker network inspect dockcompnetworks_frontend
Commande docker network inspect

Nous pouvons voir que le réseau frontend qu’on vient d’inspecter est relier exactement aux conteneurs nginx et adminer.

Pour déconnecter un conteneur à un réseau on ajoute seulement ‘dis’ avant le mot clé connect à la commande précédente de connexion :

docker network disconnect dockercompnetworks_frontend frosty_hypatia

Vous pouvez re-exécuter la commande inspect pour voir que notre réseau est relier seulement au conteneur adminer.

J’espère que vous tutoriel vous sera utile! 😉 à très bientôt dans un autre tutoriel.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.