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é Pour lancer la création de mon environnement docker-compose up S'il n'y a pas d'erreur, rendez-vous sur votre navigateur web en tapant l'ip de votre host En suivant les étapes d'installation, on a bien un wordpress fonctionnel 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 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 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é 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é Et nous relançons la commande suivant pour recréer les conteneurs avec les volumes managés docker-compose up 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 En faisant un docker-compose down, les conteneurs seront supprimés mais pas les volumes Cependant il est possible de forcer la suppression de ces volumes docker-compose down -v 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