Heute basteln wir einen Web Application Stack mit Docker-Containern, bestehend aus Apache, PostgreSQL, PHP (inkl. Redis) und PhpPgAdmin. Der Container-Verbund ist modular aufgebaut und so jederzeit mit weiteren Diensten erweiterbar.

Mit geringem Aufwand  kann z.B. ein PostgreSQL Cluster mit Replikation simuliert, oder PostgreSQL 12 und PHP 7.4 gegen andere Versionen getauscht werden. SSL und XDdebug sind unter PHP vorkonfiguriert. Der Stack kann somit für Development oder App Deployment benutzt werden. Zum Einsatz kommen die  Docker Images von Bitnami.

Für unser Projekt benötigen wir die folgende Verzeichnisstruktur:

Da später alle Container mit Docker Compose gestartet werden, erstellen wir zuerst die docker-compose.yml-Datei im Ordner „appp“, neben dem Unterordner „docker“:

Außer PhpPgAdmin benutzen alle Dienste ihre Standard-Ports. Alle wichtigen Daten werden in persistenten Ordnern ausserhalb der Docker-Container gespeichert (Volumes).

Apache

Zuerst generieren wir ein selbst signiertes SSL-Zertifikat und speichern dessen Dateien  im Ordner ./docker/apache/certs:

Für die Apache-Konfiguration legen wir folgende Datei an: ./docker/apache/my_vhost.conf:

Für unsere Website-Daten legen wir noch den Ordner ./docker/www an. In unserem Beispiel liegt hier die Datei info.php mit folgendem Inhalt:

Damit ist Apache samt SSL fertig konfiguriert.

PostgeSQL Server

Für PostgreSQL benötigen wir einen leeren Ordner namens ./docker/postgresq. Nach dem Start des PostgrSQL-Containers, werden in diesem Ordner die Daten des PostgreSQL-Servers erzeugt.

Des weiteren benötigen wir einen Ordner ./docker/postgresql/certs in den wir ebenfalls die im Abschnitt „Apache“ erzeugten Zertifikatsdateien kopieren. PostgreSQL ist so konfiguriert, dass alle Datenbank-Verbindungen bei Bedarf verschlüsselt sind.

PHP

Für die PHP-Konfiguration erzeugen wir die Datei ./docker/php/php.ini:

Unter Anderem werden hier die ImageMagick und pdo_pgsql Extensions aktiviert sowie XDebug konfiguriert. PHP ist damit ebenfalls fertiggestellt.

PhpPgAdmin

PhpPgAdmin benötigt keine extra Konfiguration und ist später über die Adresse 127.0.0.1:82 oder :8243 (SSL) erreichbar. Die Anmeldung geschieht mit dem Datenbankbenutzer aus unserer PostgreSQL-Konfiguration.

Alle Docker-Container gleichzeitig starten

Der folgende Befehlt starten nun alle Container gleichzeitig:

Zum Test geben wir im Browser http://127.0.0.1/info.php ein. Wenn wir alles richtig gemacht haben, erscheint nun die PHP-Info Page.

Viel Spaß mit dem neuen Docker Stack :-)