Skip to content Skip to sidebar Skip to footer

Eigene Docker-Container für die PHP-Entwicklung

Meine bisherigen Tests von PHP-Applikationen waren meist Langläufer. Zuerst müssen grundsätzliche Dinge erledigt werden:

  1. PHP-Docker-Container aus dem Docker-Hub laden
  2. Software und Abhängigkeiten installieren
  3. Module installieren
  4. Module konfigurieren und aktivieren
  5. composer und andere Helfer installieren

Nach diesen Aufgaben kann mit der eigentlichen Software weitergemacht werden:

  1. Git-Repository auschecken
  2. Mit Hilfe des composer sämtliche Bibliotheken nachladen und Installationsaufgaben erledigen

Und jetzt kann mit dem Testen der Anwendung begonnen werden. Dabei gingen, je nach System- und Netzwerklast mal gerne 5 Minuten vorüber, bis ich einen echten Feedback aus der Continuous Integration Kette zurück bekommen habe. Und – bekanntlich werden Software-Projekte immer komplexer – somit wird der automatisierte Testlauf mit der Zeit immer länger.

Erste Optimierung

So habe ich angefangen Caches für sämtliche Teile wie Docker-Container und composer aufzubauen. Dadurch konnte die Netzwerk-Last reduziert werden, doch die Punkte der Installation und Konfiguration innerhalb des Containers mussten weiterhin erledigt werden.

Anfangs wurde dadurch die Durchlauf-Zeit verkürzt. Doch spätestens mit der ersten Kundenanfrage, den Code mit verschiedenen PHP-Versionen zu testen (PHP 7.1 / PHP 7.2) war die Laufzeit und die anschließende Rückmeldung wieder ernüchternd.

Eigene Docker-Container

Nun wurde schnell klar – ich brauche eigene fertige Docker-Container. Der Gedanke fühlte sich im ersten Moment komplex an – in der Nachbetrachtung hat dies sich allerdings als falsch erwiesen.

Eigene Container Registry

Nun, da ich mit Gitlab arbeite, habe ich zuerst die Funktionalität der Container Registry aktiviert und konfiguriert. Die Registry ermöglicht innerhalb von Gitlab für jedes Projekt einen eigenen Speicherbereich für Docker-Abbilder anzulegen und zu verwalten. (Mehr Informationen zur Registry-Funktion findest du auf docker.com)

Um die Container für eine Vielzahl von Projekten nutzen zu können habe ich ein eigenes Projekt für die Container angelegt.

Eigenes Repository

Im eigenen Projekt gibt es – selbstverständlich – eine .gitlab-ci.yml Datei, denn die Container sollen nach Anpassungen automatisiert erstellt werden.

Als Grundlage habe ich 2 quell-offene Repositories auf GitHub.com gefunden, die ich als Grundstock für mein Projekt benutzt habe:

Mir waren beim Bau der Container-Images einige Dinge wichtig:

  • Als Grundstock werden die offiziellen PHP-Pakete aus dem Docker-Hub verwendet.
  • Die Konsistenz der Pakete muss passen – die Container müssen getestet werden
  • Für Entwicklung und Produktion werden unterschiedliche Images erstellt (in Arbeit – die Produktions Images sind ohne Test-Software und Erweiterung – außerdem teste ich mit php-cli und für die Produktion benötige ich fpm)
  • Alle Container sollen nach Fertigstellung einer Security-Prüfung unterzogen werden (in Arbeit – ich werde hier sysdig inspect ausprobieren – sobald ich das habe schreibe ich dazu einen eigenen Artikel)

Ich habe die PHP-Versionen 7.1, 7.2 und 7.3 gewählt (aktuell verwende ich 7.3 noch nicht, da hier noch keine kompatible xdebug-Erweiterung verfügbar ist).

Neben der PHP-Container habe ich gleich weitere Images gebaut:

  • MariaDB 10.3
  • alpine Linux 3.8 mit einigen Basis-Paketen
  • nginx 1.15

Du findest mein Repository unter: GitLab.com/hopplin/docker-php

Kommentare anzeigenKommentare schließen

Hinterlasse ein Kommentar