Écrire la partition : trois services dans un fichier
PartitionCréer le répertoire du projet, y déballer la sauvegarde de Cornucopia, puis décrire l'application entière : le service wordpress, le service db et le service phpmyadmin, reliés par un réseau et nourris par les fichiers et la base de données de la sauvegarde, montés depuis la machine hôte.
Pour mieux comprendre
Un service de la partition correspond à un conteneur. Les services se trouvent entre eux par leur nom : WordPress joint sa base à l'adresse db:3306 parce que le service s'appelle db. C'est le DNS interne de Docker qui fait la traduction : aucun numéro IP dans la partition.
Comme au laboratoire Docker, on ne réinstalle pas WordPress : on transplante la sauvegarde. L'image officielle wordpress:7.1 fournit le serveur (PHP, Apache, WordPress 7.1); nous y apportons notre site : notre thème, nos téléversements, notre module d'abonnement, notre wp-config.php et notre base de données. Et cette fois, pas de Dockerfile ni de COPY : les fichiers du site sont montés depuis l'hôte dans le service wordpress, et l'export de la base est déposé dans le service db, qui l'importe tout seul à son premier démarrage.
Démarche - récupérer la sauvegarde
C'est ici que le zip du matériel entre en scène : il se déballe dans le répertoire du projet, à côté de la partition que vous écrirez ensuite.
$ mkdir ~/my_wordpress $ cd ~/my_wordpress $ wget https://evolutif.projet.autos/laboratoire/conteneurs/compose/guide/sauvegarde-cornucopia-abonnement.zip $ unzip sauvegarde-cornucopia-abonnement.zip $ ls base-de-donnees.sql fichiers-wordpress README.md sauvegarde-cornucopia-abonnement.zip $ sudo chown -R www-data:www-data fichiers-wordpress # Apache, dans le conteneur, doit pouvoir ecrire (televersements, mises a jour)
Deux ajustements avant de lever quoi que ce soit. D'abord wp-config.php : la base ne vit plus sur localhost mais dans le service db (les autres valeurs, base cornucopia, compte flora, mot de passe potager-2026, restent telles quelles, le README.md les récapitule) :
$ sudo nano fichiers-wordpress/wp-config.php define( 'DB_HOST', 'db:3306' );
Ensuite l'adresse : la sauvegarde croit que le site vit à https://cornucopia.projet.autos. On ajoute à la fin de l'export les trois requêtes de repointage vues au laboratoire Docker; elles s'exécuteront toutes seules lors de l'import, au premier démarrage du service db :
# ADRESSE-DE-VOTRE-INSTANCE = ce que vous taperez dans le navigateur, sans le port : # localhost (Docker sur votre poste) # 192.168.56.2 (machine virtuelle VirtualBox, son adresse IP vue de votre poste) # 203.0.113.10 (VPS : son adresse IP publique, ou son nom de domaine) $ tee -a base-de-donnees.sql <<'FIN' UPDATE wp_options SET option_value='http://ADRESSE-DE-VOTRE-INSTANCE:8082' WHERE option_name IN ('siteurl','home'); UPDATE wp_posts SET post_content = REPLACE(post_content, 'https://cornucopia.projet.autos', 'http://ADRESSE-DE-VOTRE-INSTANCE:8082'); UPDATE wp_posts SET guid = REPLACE(guid, 'https://cornucopia.projet.autos', 'http://ADRESSE-DE-VOTRE-INSTANCE:8082'); FIN
localhost sur votre poste, l'adresse IP de la machine virtuelle avec VirtualBox, l'adresse publique sur un VPS. Et il faut la faire AVANT le premier up : l'import ne se rejoue pas tant que ./database existe.Démarche - écrire la partition
$ nano docker-compose.yml
La partition à compléter (le mot de passe root de MySQL est racine-potager-2026 pour ce laboratoire, il revient à l'étape 03; la base, le compte et le mot de passe de Flora sont imposés par le wp-config.php de la sauvegarde) :
services: wordpress: depends_on: - db image: wordpress:7.1 restart: always volumes: - ./fichiers-wordpress:/var/www/html ports: - 8082:80 networks: - myNetwork db: image: mysql:8.0 restart: always volumes: - ./database:/var/lib/mysql - ./base-de-donnees.sql:/docker-entrypoint-initdb.d/base-de-donnees.sql environment: MYSQL_ROOT_PASSWORD: racine-potager-2026 MYSQL_DATABASE: cornucopia MYSQL_USER: flora MYSQL_PASSWORD: potager-2026 networks: - myNetwork phpmyadmin: depends_on: - db image: phpmyadmin restart: always ports: - 8083:80 environment: PMA_HOST: db MYSQL_ROOT_PASSWORD: racine-potager-2026 networks: - myNetwork networks: myNetwork:
L'image wordpress est figée à la version 7.1 : le thème et la base de données de la sauvegarde sont calibrés sur elle, alors que latest bougera pendant la session. Ne changez pas cette version. Même prudence pour mysql:8.0, la version avec laquelle l'import de la sauvegarde a été validé.
Pas de variables WORDPRESS_DB_* dans le service wordpress : le wp-config.php de la sauvegarde raconte déjà la connexion à la base, et l'image ne le remplace jamais quand il est présent. C'est le service db qui doit offrir exactement la base et le compte qu'il attend. Le fichier base-de-donnees.sql, déposé dans /docker-entrypoint-initdb.d/, est importé automatiquement par l'image mysql au premier démarrage, quand ./database est encore vide.
image: et Compose refuse tout le fichier. La moitié des bogues de la semaine seront des problèmes d'indentation.docker compose config relit votre partition et l'affiche sans message d'erreur : la grammaire est bonne.