Skip to main content

Labo 10 - Docker compose

Docker compose est un chef de cuisine qui permet de créer une recette en y mettant dedans tous le conteneurs nécessaires à la fabrication du plat final

Nous allons monter un serveur Wordpress (serveur Web + base de données)

Tout d'abord il faut créer le fichier docker-compose.yml

Pour plus d'infos sur le format .yaml, il suffit d'aller sur le sur leur site https://yaml.org/

La première ligne correspond à la dernière version de docker compose qui est rétro-compatible avec les anciennes versions

sudo vi docker-compose.yml

On peut retrouver plusieurs sections dans ce fichier :

version: "3.8" -> obligatoire (version actuelle de docker-compose)
services: -> obligatoire (les conteneurs dont nous aurons besoin)
volumes: -> dépend de vos besoins
networks: -> dépend de vos besoins

Voici donc le texte à copier-coller dans votre fichier docker-compose.yml

Attention : pensez à respecter les indentations !!!!

version: "3.8"
services: #nom du conteneur
  wordpress:
    image: wordpress:4.9 #image à téléchager sur le docker hub avec le tag
    ports:
      - 80:80 #ports à ouvrir entre l'hôte et le conteneur
    environment: #variables d'environnements nécessaires pour la création du conteneur prises sur le docker hub www.hub.docker.com
      - WORDPRESS_DB_HOST=db #nom du conteneur de la base de données
      - WORDPRESS_DB_USER=tata #utilisateur qui aura été créé plus bas
      - WORDPRESS_DB_PASSWORD=yoyo #mot de passe de l'utilisateur de la base de données
      - WORDPRESS_DB_NAME=wordp #nom de la basse de données
    networks:
      - galaxie #nom du réseau auquel sera connecté le conteneur
  db:
    image: mysql:5.7
    environment:
      - MYSQL_ROOT_PASSWORD=tata_yoyo #mot de passe root de la base de données
      - MYSQL_DATABASE=wordp #nom de la base de données
      - MYSQL_USER=tata #utilisateur de la base de données
      - MYSQL_PASSWORD=yoyo #mot de passe de l'utilisateur de la base de données
    networks:
      - galaxie
#volumes: #à ce stade la section volume sera utilisée plus tard
networks:
  galaxie: #création réseau bridgé cloné

image-1605617617291.png

Pour lancer la création de mon environnement

docker-compose up

60.png

S'il n'y a pas d'erreur, rendez-vous sur votre navigateur web en tapant l'ip de votre host

61.png

En suivant les étapes d'installation, on a bien un wordpress fonctionnel

62.png

Si nous quittons l'environnement, les conteneurs vont s'arrêter. Pour que les conteneurs soit lancés en tâche de fond

docker-compose up -d

63.png

Pour arrêter les conteneurs sans les supprimer

docker-compose stop

Pour les démarrer

docker compose start

Pour supprimer tout un environnement

docker-compose down

64.png

Cette commande supprime tout sauf les volumes

Voyons justement comment personnaliser wordpress avec les volumes
Le chemin de base de wordpress se trouve dans /var/www/html
Et celui de mysql dans /var/lib/mysql

Nous allons commencer par la création de volumes mappés

Editons le fichier docker-compose.yml

sudo vi docker-compose.yml
version: "3.8"
services: #nom du conteneur
  wordpress:
    image: wordpress:4.9 #image à téléchager sur le docker hub avec le tag
    ports:
      - 80:80 #ports à ouvrir entre l'hôte et le conteneur
    environment: #variables d'environnements nécessaires pour la création du conteneur prises sur le docker hub www.hub.docker.com
      - WORDPRESS_DB_HOST=db #nom du conteneur de la base de données
      - WORDPRESS_DB_USER=tata #utilisateur qui aura été créé plus bas
      - WORDPRESS_DB_PASSWORD=yoyo #mot de passe de l'utilisateur de la base de données
      - WORDPRESS_DB_NAME=wordp #nom de la basse de données
    networks:
      - galaxie #nom du réseau auquel sera connecté le conteneur
    volumes:
      - ./data/wp:/var/www/html #volume pour préserver les données de wordpress 
 db:
    image: mysql:5.7
    environment:
      - MYSQL_ROOT_PASSWORD=tata_yoyo #mot de passe root de la base de données
      - MYSQL_DATABASE=wordp #nom de la base de données
      - MYSQL_USER=tata #utilisateur de la base de données
      - MYSQL_PASSWORD=yoyo #mot de passe de l'utilisateur de la base de données
    networks:
      - galaxie
    volumes: 
      - ./data/db:/var/lib/mysql
#volumes: #à ce stade la section volume sera utilisée plus tard
networks:
  galaxie: #création réseau bridgé cloné

image-1605621642580.png65.png

Tapez la commande pour recréer l'environnement et la nouvelle installation de wordpress

docker-compose up -d

Donc en tapant la commande docker-compose down, les conteneurs seront arrêtés et supprimés mais les données conservées dans le volume spécifié (ici le /data)

Voyons maintenant le comportement avec les volumes managés

Editons de nouveau le fichier docker-compose.yml

version: "3.8"
services: #nom du conteneur
  wordpress:
    image: wordpress:4.9 #image à téléchager sur le docker hub avec le tag
    ports:
      - 80:80 #ports à ouvrir entre l'hôte et le conteneur
    environment: #variables d'environnements nécessaires pour la création du conteneur prises sur le docker hub www.hub.docker.com
      - WORDPRESS_DB_HOST=db #nom du conteneur de la base de données
      - WORDPRESS_DB_USER=tata #utilisateur qui aura été créé plus bas
      - WORDPRESS_DB_PASSWORD=yoyo #mot de passe de l'utilisateur de la base de données
      - WORDPRESS_DB_NAME=wordp #nom de la basse de données
    networks:
      - galaxie #nom du réseau auquel sera connecté le conteneur
    volumes:
      - wp:/var/www/html #volume pour préserver les données de wordpress 
 db:
    image: mysql:5.7
    environment:
      - MYSQL_ROOT_PASSWORD=tata_yoyo #mot de passe root de la base de données
      - MYSQL_DATABASE=wordp #nom de la base de données
      - MYSQL_USER=tata #utilisateur de la base de données
      - MYSQL_PASSWORD=yoyo #mot de passe de l'utilisateur de la base de données
    networks:
      - galaxie
    volumes: 
      - db:/var/lib/mysql
volumes: #ici ce sont des volumes managés que vous modifierez plus haut
  wp:
  db:
networks:
  galaxie: #création réseau bridgé cloné

66.png

Et nous relançons la commande suivant pour recréer les conteneurs avec les volumes managés

docker-compose up

67.png

Pas de surprise tout fonctionne et on repart sur une nouvelle installation de wordpress
Arrêtons le tout et voyons si les volumes ont bien été créés

sudo docker volume ls

68.png

En faisant un docker-compose down, les conteneurs seront supprimés mais pas les volumes

69.png

Cependant il est possible de forcer la suppression de ces volumes

docker-compose down -v

70.png

Cela supprime les volumes managés créés à partir du docker-compose.yml mais pas les autres volumes managés créés avec docker

Pour finir, il est possible de modifier un paramètre dans le fichier docker-compose.yml en cas d'arrêt ou redémarrage de docker.

Il s'agit de restart:

restart: always #permet de redémarrer automatiquement le conteneur quel que soit l'état dans lequel il était avant l'arrêt ou le redémarrage de docker
restart: no #empêche de redémarrer automatiquement le conteneur quel que soit l'état dans lequel il était avant l'arrêt ou le redémarrage de docker
restart: unless-stopped #permet de redémarrer automatiquement le conteneur s'il était démarré avant l'arrêt ou le redémarrage de docker