Docker Desktop Community

Docker Desktop: installation d’un environnement de développement PHP/MySQL

Nous allons décrire ici la première étape pour mettre en place un petit site personnel PHP/MySQL: la configuration du poste de développement.

Choix de Docker pour lancer le site en local

Le poste de développement (le PC ou le Mac) doit permettre de lancer le site, afin de rapidement voir et tester ce que l’on est en train de développer. Il faut également que l’environnement d’exécution sous Apache, PHP et MySQL soit aussi proche que possible que celui du serveur hébergeant le site, pour éviter les mauvaises surprises: une fonctionnalité qui marche bien sur le poste de développement mais qui plante une fois installé sur le serveur d’hébergement.

Une alternative à l’installation sur le poste de développement des applications nécessaires au lancement du site (Apache, PHP, Mysql) consiste à installer l’outil Docker sur le poste PC ou MAC: Docker permet de configurer et de lancer un environnement de type Linux exécutant les services applicatifs dans des « conteneurs », puis de faire tourner le site dans cet environnement.

C’est un outil qui existe depuis quelques années déjà et la mise en place d’un conteneur Docker est aujourd’hui assez simple et bien documentée. Le bénéfice apporté par l’utilisation de Docker: en configurant un conteneur disposant de tout le nécessaire pour faire tourner un site (Keleril dans le cas présent), on peut facilement partager la configuration et lancer le même conteneur sur un autre poste de développement, ce qui évite de refaire le travail d’installer un environnement de développement complet une seconde fois.

En outre, on dispose d’un environnement de développement très proche de l’environnement de production qui est en général hébergé sur une machine Linux. On peut même imaginer utiliser directement le conteneur installé sur le poste de développement pour déployer le site en production.

Par exemple on peut configurer un conteneur (ou une pile de conteneurs) Docker sur un PC sous Windows 10 professionnel, et réutiliser le même conteneur tel quel sur un Mac sous OS X.

Plutôt qu’un conteneur, on va configurer et lancer un une pile de conteneurs (ou « stack » Docker), chaque conteneur intégrant une application et communiquant avec les autres: Apache/PHP, Mysql, Phpmyadmin…

Installation de Docker Desktop sous Mac OS X (Sierra ou plus récent)

Il suffit d’installer Docker Desktop (plus besoin d’installer VirtualBox comme c’était le cas auparavant) (Installation de Docker Desktop sur le site Docker.com.

Installation de Docker Desktop sous PC Windows 10 Professionnel (ou Entreprise)

Il est aujourd’hui possible d’installer l’application Community Edition (=gratuit) de Docker Desktop pour Windows, disponible sur le site: https://hub.docker.com (créer un compte sur le site pour pouvoir télécharger).

Il y a toutefois 2 pré-requis à valider concernant un poste PC Windows:

  1. Docker Desktop pour Windows (dernière version) ne peut pas être installé sur la version familiale de Windows 10. Il faut impérativement disposer de Windows 10 Professional ou Enterprise 64-bit.
  2. Pour faire fonctionner l’application Docker sur un PC sous Windows 1, il faut impérativement que la » virtualisation » n’est pas activée sur le PC (sinon l’application refusera de se lancer).

Pré-requis n°1: passer un PC sous Windows 10 Famille sur PC Windows 10 Professionnel

Pour upgrader un Windows 10 édition familiale vers un Windows 10 édition pro, plusieurs solutions existent qui sont plus ou moins coûteuse et risquées. J’en présente deux:

Solution 1: acheter une clé d’activation Windows 10 professionnel chez Microsoft

Windows 10 - Informations système
Windows 10 – Informations système

Le lien « Mettre à niveau votre édition de Windows ou modifier la clé de produit » permet d’acheter un clé d’activation Windows 10 Professionnel chez Microsoft, à… 145€ quand même.

En principe l’installation de l’édition pro ne nécessite pas une réinstallation complète du poste et ne supprime aucun fichier. Mieux vaut bien entendu de toutes manières sauvegarder les fichiers importants avant de réaliser l’opération.

Solution 2: acheter une clé d’activation Windows 10 professionnel chez un vendeur tierce

Il en existe beaucoup, pour un prix habituellement compris entre 30€ et 40€ pour des licences originales. La procédure est plus délicate (sauvegarde indispensable car il n’est pas garanti que la mise à jour ne nécessite pas une réinstallation complète du système): il faut saisir plusieurs clé d’activations (celle obtenue auprès du vendeur tierce et une clé « par défaut »), couper le réseau à une certaine étape…

La procédure est bien décrite sur le blog « Daemonspace » (Matthieu Poignant).

Pré-requis n°2: vérifier l’activation de la virtualisation sur un PC sous Windows 10

Pour vérifier l’activation de la virtualisation, il faut consulter l’onglet « Performance » du gestionnaire de tâches:

Windows 10 - onglet Performance - gestionnaire de tâches
Windows 10: onglet « Performance » du gestionnaire de tâches

Si la virtualisation n’est pas activée, il faut alors aller l’activer sur le BIOS du PC.

Pour mon Lenovo j’ai pu lancer le BIOS en redémarrant la machine et en appuyant sur les touches du clavier [Fn+F2] dès l’affichage du logo « LENOVO ».

Il faut ensuite trouver et activer l’option de virtualisation (virtualisation INTEL) et redémarrer le PC.

Configuration de la pile de conteneurs Docker pour le site PHP « Keleril »

Plutôt qu’un conteneur, on va configurer et lancer un une pile de conteneurs (ou « stack » Docker), chaque conteneur intégrant une application et communiquant avec les autres:

  1. Conteneur « Serveur d’application »: Apache/PHP
  2. Conteneur « base de données »: Mysql
  3. Conteneur Phpmyadmin
  4. Conteneur Redis (système de cache clé/valeur)

Référence documentation sur le site docker.com.
Projet de stack Docker LAMP: https://github.com/sprintcube/docker-compose-lamp

Procédure pour utiliser la configuration du stack Docker du projet « sprintcube/docker-compose-lamp »:

Sur le dépôt GIT local, créer une nouvelle branche « docker-integration » et basculer dessus:

git branch docker-integration
huntz:warinkeleril jbhr$ git checkout docker-integration

Depuis la page Github du projet: https://github.com/sprintcube/docker-compose-lamp, récupérer le projet sous forme de zip: bouton vert « Clone or download » puis lien « Download zip »

Copier l’archive zip dans le répertoire du projet sur lequel l’on souhaite utiliser Docker (ici le dossier Keleril), puis extraire le contenu de l’archive.

Copier le contenu sur dossier « docker-compose-lamp-master » directement dans la racine du projet, sauf le fichier README.md pour ne pas écraser celui du projet

Dans le dossier « www », ne conserver pour le moment que le fichier test-db.php

Copier tous les fichiers *.php ainsi que les dossiers images et le fichier design.css dans le dossier www. Sous mac ou linux, ceci peut être réalisé à l’aide de la commande:

for FILE in ./*.php; do git mv $FILE www/; done
git mv images www
git mv design.css www

Ajouter « .env » dans le fichier .gitignore à la racine du projet pour éviter que le fichier propre à chaque environnement ne soit indexé dans le dépôt GIT. Ajouter également d’autres éléments:

#ENV file (Docker)
.env

# Other Docker elements
/config/*
/data/*
/logs/*

Créer le fichier .env à la racine du projet, sur le modèle du fichier sample.env, en renseignant les valeurs pour le poste de développement (les valeurs des clés contenues dans ce fichier seront utilisées dans le fichier docker-compose.yml). Si la procédure décrite à été suivie, il n’y a normalement pas de valeurs à modifier par rapport au modèle sample.env.

Par défaut PHP 7.1 (la version configurée) ajoute un en-tête avec comme charset par défaut: UTF-8. Or tous les fichiers php du projet Keleril sont pour le moment en ISO-8859-1. Idéalement il faudrait les convertir en UTF-8 (ce n’est pas trop compliqué car les éditeurs proposent des outils pour le faire, mais il y a beaucoup de fichiers php dans le projet donc c’est un peu long…). Dans l’attente, pour éviter d’avoir des gros carrés à la place de tous les caractères accentués sur les pages, il suffit de rajouter une option dans le fichier config/php/php.ini:

default_charset = "iso-8859-1"

Ajuster le fichier docker-compose.yml, en particulier la base de données à créer:

MYSQL_DATABASE: keleril
MYSQL_USER: wikuser
MYSQL_PASSWORD: wik-2019

Lancement du stack Docker

Aller à la racine du projet Keleril, ou se trouve le fichier docker-compose.yml, et lancer la commande suivante (option -d pour « detached mode »):

docker-compose up -d

Lors du premier lancement, beaucoup de choses doivent être chargées, et cela prend du temps. A l’issue du chargement on doit voir les lignes suivantes dans la console:

Creating png-redis ... done
Creating png-mysql ... done
Creating png-phpmyadmin ... done
Creating png-webserver ... done

Les conteneur sont lancés, ce qu’on peut vérifier à l’aide de la commande: docker -ps

Accès au site: http://localhost

Accès à phpMyAdmin: http://localhost:8080 (mot de passe du superuser root visible dans le fichier docker-compose.yml sur la rubrique environment du service mysql)

Après le premier lancement, il faut créer les tables de la base de données keleril à l’aide des scripts SQL disponibles dans le dossier sql du projet:

  1. Sous PhpMyAdmin (http://localhost:8080), cliquer sur la base de données keleril
  2. Cliquer sur l’onglet: Importer
  3. Glisser/déposer les 6 fichiers dumps directement sur la fenêtre PhpMyAdmin: armees.sql, batailles.sql, forum.sql, inscription.sql, marche.sql, regions.sql

Configurer la connexion à la base de données dans le fichier config.inc.php, en prenant soin d’utiliser « mysql » comme valeur poru le domaine de la base de données (host). Le fichier test_db.php issu du projet stack Docker peut servir de modèle

$db_host="mysql";
$db_port="3306";
$db_name="keleril";
$db_username="keleril";
$db_password="[mot de passe du user mysql keleril]";

Pour stopper la pile de conteneurs, passer la commande:

docker-compose down

Laisser un commentaire

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