====== Activité : créer un environnement LAMP avec Docker-Compose ====== ===== Présentation ===== Docker permet la création de conteneurs en proposant les fonctionnalités suivantes : * création de **conteneur personnalisé** en utilisant un fichier **Dockerfile** ; * **exposition** d'un service en choisisant le **port local** de l'ordinateur ; * gestion de la **persistance des données** en gérant des **volumes** ; * **liaison** des conteneurs entre eux quand une **architecture en microservices**, utilise un conteneur spécifique par service (service Web, service de base de donés, etc.) Cependant : * La création d'un conteneur nécessite alors **plusieurs paramèters** lors de son **lancement**. * Il faut **lancer manuellement** les conteneurs et les **uns après les autres**. **Docker-compose** est donc un outil permettant de créer et de lancer des architectures avec plusieurs conteneurs en une seule commande. L'architecture à lancer est décrite au préalable dans un seul fichier au format YAML qui contient toute la configuration nécessaire pour chacun des conteneurs (port exposé, volume à gérer, etc.) ===== Objectif ===== Réaliser le même environnement LAMP avec 3 conteneurs en utilisant Docker-compose : * Conteneur Docker **php** (serveur Web) personnalisé pour gérer les accès en **php** à la base de données MariaDB ; * Conteneur Docker **mariadb** (base de données) ; * Conteneur Docker **phpmyadmin** (site Web d'administration de la base de données). Les fichiers du site Web et de la base de données sont enregistrés en local en utilisant le principe des volumes de Docker. ===== Syntaxe du fichier docker-compose.yml ===== Un fichier docker-compose.yml doit être créé avec les instructions nécessaires dont voici celles qui sont à utiliser : * Le mot-clé **service** : permet de définir les différents conteneurs qui seront activés. * L'instruction **image** : permet de préciser l'imagfe à utiliser pour créer le conteneur * L'instruction **depends_on** : permet de définir le lien avec un autre conteneur * L'instruction **volume** : met en œuvre le mécanisme de persistance des données * L'instruction **ports** : met de préciser le port local d'écoute du service * L'instruction **environment** : permet de définir des variables d'environnement dans le conteneur ===== Commandes Docker et Docker-compose de création des trois conteneurs ===== ====Création du serveur de base de données MariaDB==== * nom du conteneur : **servbdd** * base de données en écoute sur le port par défaut : **3306** ; * mot de passe du compte root de MariaDB précisé dans une variable d’environnement MARIADB_ROOT_PASSWORD : **MARIADB_ROOT_PASSWORD: passwordmariadb** ; * dossier local pour la persistance des bases de données du conteneur : **c:\www\html\siteweb-bdd** Voici les paramètres de la commande Docker et les équivalents à écrire dans le fichier Docker-compose.yml ^ Docker ^ Docker-compose.yml ^ |docker run -d --name servbdd -v c:\www\html\siteweb-bdd:/var/lib/mysql -e MARIADB_ROOT_PASSWORD=passwordmariadb mariadb | services: servbdd: image: mariadb volumes: - c:\www\html\siteweb-bdd:/var/lib/mysql environment: MARIADB_ROOT_PASSWORD: passwordmariadb| ====Création du conteneur phpmyadmin :==== * nom du conteneur : **phpmyadmin** * port local d'écoute pour accéder au site Web phpmyadmin : **8080** ; * liaison avec le conteneur **servbdd** en renseignant le **nom du serveur MariaDB** dans la variable d'environnement **PMA_HOST** : **PMA_HOST: servbdd**. Voici les paramètres de la commande Docker et les équivalents à écrire dans le fichier Docker-compose.yml ^ Docker ^ Docker-compose.yml ^ |docker run -d --name phpmyadmin --link servbdd:servbdd -p 8080:80 -e PMA_HOST=servbdd phpmyadmin| services: phpmyadmin: image: phpmyadmin depends_on: - servbdd ports: - 8080:80 environment: PMA_HOST=servbdd | ====Création du serveur Web avec les paramètres suivants :==== * nom du conteneur : **servweb** * image Docker personnalisée (basé sur l'image php:8.1-apache) : **ctecher/php-mariadb**. * mappage du site Web sur le port local : **8001** ; * dossier local contenant les fichiers du site Web : **c:\www\html\siteweb**; * dossier local pour la persistance des logs du serveur Apache : **c:\www\log** ; Voici les paramètres de la commande Docker et les équivalents à écrire dans le fichier Docker-compose.yml ^ Docker ^ Docker-compose.yml ^ |docker run -d --name servweb --link servbdd:servbdd -p 8001:80 -v c:\www\html\siteweb:/var/www/html -v c:\www\log:/var/log/apache2 charles/php| services: servweb: image: ctecher/php-mariadb depends_on: - servbdd ports: - 8001:80 volumes: - c:\www\html\siteweb:/var/www/html - c:\www\log:/var/log/apache2 | ===== Le fichier docker-compose.yml complet de l'architecture LAMP===== version: '3' services: # base de données MariaDB servbdd: image: mariadb volumes: - c:\www\html\nolark-bdd:/var/lib/mysql environment: MARIADB_ROOT_PASSWORD: passwordmariadb # site Web phpmyadmin phpmyadmin: image: phpmyadmin depends_on: - servbdd ports: - 8080:80 environment: PMA_HOST: servbdd # site Web servweb: image: ctecher/php-mariadb depends_on: - servbdd ports: - 8001:80 volumes: - c:\www\html\nolark:/var/www/html - c:\www\html\nolark_logs:/var/log/apache2 @startyaml services: # base de données MariaDB servbdd: image: mariadb volumes: - c:\www\html\nolark-bdd:/var/lib/mysql environment: MARIADB_ROOT_PASSWORD: passwordmariadb # site Web phpmyadmin phpmyadmin: image: phpmyadmin depends_on: - servbdd ports: - 8080:80 environment: PMA_HOST: servbdd # site Web servweb: image: charles/php depends_on: - servbdd ports: - 8001:80 volumes: - c:\www\html\nolark:/var/www/html - c:\www\html\nolark_logs:/var/log/apache2 @endyaml ===== Exécution des commandes du fichier docker-compose.yml===== La **commande docker-compose** doit être lancée dans le dossier où se trouve le fichier docker-compose.yml. ==== Lancement de tous les conteneurs avec Docker-compose==== docker-compose up -d Résultat de la commande : PS C:\www\html> docker-compose up -d [+] Running 4/4 - Network html_default Created 0.1s - Container html-servbdd-1 Started 1.0s - Container html-phpmyadmin-1 Started 1.8s - Container html-servweb-1 Started 1.9s ==== Arrêt de tous les conteneurs avec Docker-compose==== docker-compose down ===== Activité à faire ===== **Mission :** * Créer un fichier docker-compose.yml qui permet de créer un site Wordpress avec la base de données **MariaDB**. Voici les variables d'environnement nécessaires pour le **conteneur MariaDB** : * MARIADB_ROOT_PASSWORD: passwordmariadb * MARIADB_DATABASE: wordpress * MARIADB_USER: wordpress * MARIADB_PASSWORD: wordpress Voici les variables d'environnement nécessaires pour le **conteneur Wordpress** : * WORDPRESS_DB_HOST: servbdd * WORDPRESS_DB_NAME: wordpress * WORDPRESS_DB_USER: wordpress * WORDPRESS_DB_PASSWORD: wordpress ====== Retour Accueil Docker ====== * [[reseau:docker:accueil|Docker]]