Maintenant, ma dernière étape consiste à mettre en place ma base de données. Pour commencer, j'ai modifié mon fichier index.php avec le code suivant :
<?php
try {
$dbh = new PDO('mysql:host=db;dbname=demo', 'root');
} catch (PDOException $e) {
print "Erreur !: " . $e->getMessage() . "<br/>";
die();
}
echo 'Hello World !!';
Sauf que lorsque j'exécute ce code... Boum 💥 ! C'est le drame
Effectivement, mon image PHP est très légère et n'a que le strict nécessaire ( donc pas le driver mysql ). Il va donc falloir que je fasse ma propre image basée sur php:7.4.12-fpm-alpine en y ajoutant les extensions nécessaires pour travailler avec MySQL ( en l’occurrence dans mon cas, avec MariaDB ).
Je vais donc créer un répertoire docker/php dans lequel je vais mettre un fichier Dockerfile qui décrira mon image app.
FROM php:7.4.12-fpm-alpine
RUN docker-php-ext-install mysqli pdo pdo_mysql
Mon image est extrêmement simple. Je me base sur php:7.4.12-fpm-alpine et grâce à docker-php-ext-install j'installe les extensions nécessaires pour communiquer avec ma base de données.
Maintenant il me reste à modifier le fichier docker-compose.yaml pour changer la description de mon conteneur app
...
app:
build:
context: ./docker/php/
depends_on:
- db
volumes:
- ./:/srv/app
Plus de clé image, mais une clé build pour créer mon conteneur en me basant sur le Dockerfile que j'ai mis dans le répertoire docker/php. Ensuite, il ne me reste plus qu'à recréer mes conteneurs avec la commande suivante
❯ docker-compose up --build -d
Et victoire ! 🎉
Créons maintenant la base de données
❯ docker-compose exec db mysql
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 6
Server version: 10.5.6-MariaDB-1:10.5.6+maria~focal mariadb.org binary distribution
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> CREATE DATABASE demo;
Query OK, 1 row affected (0.008 sec)
Vous pouvez rafraichir une nouvelle fois, et là, Victoire 🎉🎉
A partir de ce moment là, je suis parvenu à terminer ma stack de dev. L'avantage non négligeable, c'est que lorsqu'un nouveau développeur rejoindra l'équipe, il aura tout de suite la bonne version de PHP et de MariaDB et donc pas de temps à perdre à la configuration / installation de nouveaux outils.
Pour la suite, j'ai créé un dépôt sur gitlab dans lequel j'ai envoyé mon magnifique Hello World. L'avantage de Gitlab, c'est que j'ai accès à un container registry gratuit dans lequel je vais pouvoir mettre mes images de production.
Mais là il s'agit de production, donc on voit ça juste après 😄