Les images Docker disponibles sur Docker Hub, sont construites à partir d'une image de base dans laquelle est ajouté des paquets logiciels et des éléments de configuration et de personnalisation.
Pour cela, ces nouvelles images sont construites à partir d'un fichier appelé Dockerfile décrivant toutes les opérations à effectuer.
L'image php:8.1-apache contient le serveur web Apache2 et une configuration de php avec uniquement les pilotes pour gérer les accès à la base de données sqlite.
Pour pouvoir disposer d'une image contenant le serveur Web Apache mais aussi php configuré pour communiquer avec la base de données MariaDB, vous allez créer une nouvelle image à partir de l'image php:8.1-apache qui contiendra les pilotes nécessaires.
FROM php:8.1-apache RUN apt-get update && apt-get upgrade -y RUN docker-php-ext-install mysqli && docker-php-ext-enable mysqli RUN docker-php-ext-install pdo pdo_mysql
docker build -t ctecher/php-mariadb .
Pour pouvoir tester votre nouvelle image php-mariadb, vous devez mettre en œuvre :
CREATE DATABASE phptest;
USE phptest;
CREATE TABLE produits (
nom VARCHAR(50)
);
INSERT INTO produits (nom) VALUES ('fraises');
INSERT INTO produits (nom) VALUES ('melons');
<?php
$host = 'srvbdd'; // nom du conteneur MariaDB (base de données)
$db = 'phptest';
$user = 'root';
$pass = 'Sio1234*';
try {
$pdo = new PDO("mysql:host=$host;dbname=$db;charset=utf8", $user, $pass);
} catch (Exception $e) {
die("Erreur connexion : " . $e->getMessage());
}
$stmt = $pdo->query("SELECT nom FROM produits");
echo "<h1>Contenu de la base de test</h1>";
echo "<table border='1'>";
echo "<tr><th>Nom</th></tr>";
while ($row = $stmt->fetch()) {
echo "<tr><td>" . htmlspecialchars($row['nom']) . "</td></tr>";
}
echo "</table>";
?>
mkdir init cd init
docker run -d \ --name srvbdd \ -e MARIADB_ROOT_PASSWORD=Sio1234* \ -e MARIADB_DATABASE=phptest \ -p 3306:3306 \ -v ./init:/docker-entrypoint-initdb.d \ mariadb
Explications :
Important :
mkdir www cd www
docker run -d \ --name testphp \ -p 8080:80 \ --link srvbdd:srvbdd -v ./www:/var/www/html \ ctecher/php-mariadb
L'utilisation du fichier Docker-compose.yml sera explicité dans une prochaine activité.
services:
# base de données MariaDB
srvbdd:
image: mariadb
volumes:
- ./init:/docker-entrypoint-initdb.d/
environment:
MARIADB_ROOT_PASSWORD: Sio1234*
# site Web php
testphp:
image: ctecher/php-mariadb
depends_on:
- srvbdd
ports:
- 8080:80
volumes:
- ./www:/var/www/html
docker compose up -d
docker compose down