Page d'accueil Mes articles

Docker-compose pour faire communiquer nos conteneurs ( 2 / 2 )

Ajoutons un peu de complexité en rajoutant une base de données MariaDB à notre projet. Le container MariaDB devra être capable de communiquer avec le conteneur app contenant php-fpm.

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

Erreur driver mysql

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 ! 🎉

Base de donnée non connu

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 🎉🎉

It works

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 😄

Cet article vous a été utile ? Faites le connaître sur les réseaux sociaux Twitter twitter LinkedIn linkedin

Un commentaire ?

codeur
Ou connectez-vous avec GitHub