Nu we de standaard PHP container hebben draaien en de phpinfo
zichtbaar hebben op de website kunnen we een 2de image gaan maken en deze met een PDO verbinding de database ophalen uit de vorige les.
Zorg er dus voor dat de MariaDB container draait met daarin een test_db
, ga na of deze draait en of er een database aanwezig is.
Met docker ps draaien er nu 2 containers:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
d77d71d759e1 my-php "docker-php-entrypoi…" 46 minutes ago Up 46 minutes 0.0.0.0:80->80/tcp my-php-app
2e11bc5dcba4 mariadb "docker-entrypoint.s…" 5 hours ago Up 43 minutes 3306/tcp mariadbdemo
Het is dus zaak dat er een interne MariaDB draait, met geen poorten open op de host server.
We gaan een nieuwe image maken voor de php met pdo verbinding. Maak hiervoor in je home-directory een nieuwe directory:
mkdir php-pdo && cd php-pdo
maak hierin een directory voor de website:
mkdir web-pdo && cd web-pdo
Maak hierin een index.php
:
nano index.php
Plaats daarin je php met daarin de PDO verbinding:
<?php $user = "root"; $password = "password"; $database = "db_noorderpoort"; $table = "Teachers"; try { $db = new PDO("mysql:host=172.17.0.2;dbname=$database", $user, $password); echo "<h2>Print Teachers Noorderpoort</h2><ol>"; foreach($db->query("SELECT FirstName FROM $table") as $row) { echo "<li>" . $row['FirstName'] . "</li>"; } echo "</ol>"; } catch (PDOException $e) { print "Error!: " . $e->getMessage() . "<br/>"; die(); } ?>
Zorg ervoor dat de namen/IP-adres/Wachtwoorden/databases/tabellen overeenkomen met jouw omgeving!
Het (interne-docker)ip-adres van je MariaDB haal je op met:
docker inspect mariadbdemo | grep IPAddress
Als dit gereed staat ga je 1 directory terug naar:
cd ~/php-pdo
Hier maak je de Dockerfile
met de volgende inhoud:
FROM php:8.0-apache COPY ./web-pdo/ /var/www/html/ RUN docker-php-ext-install pdo pdo_mysql
Zie dat er een php installatie plaats vindt om pdo verbindingen mogelijk te maken.
Maak nu van je Dockerfile een image:
docker build -t my-php-pdo .
En run daarna de image op een andere poort dan poort 80:
docker run --name my-php-pdo -p 8080:80 -d my-php-pdo
met docker ps
controleren of de container draait:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
85dff9d35bfe my-php-pdo "docker-php-entrypoi…" 23 minutes ago Up 23 minutes 0.0.0.0:8080->80/tcp my-php-pdo
d77d71d759e1 my-php "docker-php-entrypoi…" 46 minutes ago Up 46 minutes 0.0.0.0:80->80/tcp my-php-app
2e11bc5dcba4 mariadb "docker-entrypoint.s…" 5 hours ago Up 43 minutes 3306/tcp mariadbdemo
Daarna ga je naar de website met een browser om te zien of je database nu beschikbaar is op de website.