Docker und PHP: Containerisierung von Anwendungen für Entwickler

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Wozu dient die Containerisierung von PHP-Anwendungen mit Docker?

Moderne Webentwicklung mit PHP kommt selten ohne den Einsatz von Containerisierung aus. Docker ermöglicht es, Ihre Anwendung mit allen Abhängigkeiten (Webserver, PHP-Erweiterungen, Datenbank) in einen isolierten Container zu packen. Dies garantiert, dass die Anwendung auf dem lokalen Entwicklungsrechner, auf dem Testserver und in der Produktionsumgebung identisch funktioniert. In diesem Artikel analysieren wir, wie man Docker für PHP richtig konfiguriert, erstellen ein fertiges Projekt und betrachten die besten Praktiken.



Vorteile der Verwendung von Docker mit PHP

  • Reproduzierbarkeit der Umgebung: Vergessen Sie das Problem "auf meinem Rechner funktioniert es".
  • Isolation: Jede Anwendung lebt in ihrem eigenen Container mit den benötigten PHP-Versionen und Bibliotheken.
  • Skalierung: Einfaches Starten mehrerer Instanzen der Anwendung mit docker-compose.
  • Vereinfachung von CI/CD: Container sind ideal für Pipelines zur automatischen Erstellung und Bereitstellung.


Erstellen eines Dockerfile für eine PHP-Anwendung

Beginnen wir mit dem Wichtigsten – der Datei Dockerfile. Sie beschreibt, wie das Image Ihrer PHP-Anwendung erstellt wird. Betrachten wir ein grundlegendes Beispiel für eine Anwendung mit PHP 8.2 und dem Apache-Webserver.



# DockerfileFROM php:8.2-apache

# Installation von PHP-ErweiterungenRUN docker-php-ext-install pdo pdo_mysql mysqli

# Aktivieren von mod_rewrite für Apache (nützlich für Frameworks)RUN a2enmod rewrite

# Kopieren des Quellcodes der AnwendungCOPY . /var/www/html/

# Ändern des Besitzers für korrekte ZugriffsrechteRUN chown -R www-data:www-data /var/www/html

# Öffnen von Port 80EXPOSE 80


Dieses Dockerfile verwendet das offizielle PHP 8.2-Image mit Apache, installiert Treiber für MySQL und kopiert Ihren Code. Für komplexere Projekte, wie z.B. mit Laravel oder Symfony, ist eine zusätzliche Konfiguration erforderlich.



Beispiel für Laravel mit Nginx und PHP-FPM

Für moderne Frameworks wird oft die Kombination Nginx + PHP-FPM verwendet. Hier ist ein Beispiel für ein Dockerfile für PHP-FPM:



# Dockerfile.php-fpmFROM php:8.2-fpm

# Installation von Systemabhängigkeiten und ErweiterungenRUN apt-get update && apt-get install -y \ libpq-dev \ libzip-dev \ unzip \ git \ && docker-php-ext-install pdo pdo_mysql zip

# Installation von ComposerCOPY --from=composer:latest /usr/bin/composer /usr/bin/composer

# Kopieren des ProjektsWORKDIR /var/wwwCOPY . .

# Installation der PHP-AbhängigkeitenRUN composer install --no-interaction --optimize-autoloader

# Zugriffsrechte für LaravelRUN chown -R www-data:www-data /var/www/storage /var/www/bootstrap/cache

CMD ["php-fpm"]


Und hier ist die Nginx-Konfiguration, die über docker-compose in einen separaten Container eingefügt werden muss:



# default.conf (für Nginx)server {    listen 80;    server_name localhost;    root /var/www/public;

add_header X-Frame-Options "SAMEORIGIN"; add_header X-Content-Type-Options "nosniff";

index index.php;

charset utf-8;

location / { try_files $uri $uri/ /index.php?$query_string; }

location = /favicon.ico { access_log off; log_not_found off; } location = /robots.txt { access_log off; log_not_found off; }

error_page 404 /index.php;

location ~ \\.php$ { fastcgi_pass php:9000; fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; include fastcgi_params; }

location ~ /\\.(?!well-known).* { deny all; }}


Orchestrierung mit docker-compose

Zur Verwaltung mehrerer Container (PHP, Nginx, MySQL) verwenden Sie docker-compose.yml. Dies ist das Standardwerkzeug für die lokale Entwicklung und das Testen.



# docker-compose.ymlversion: '3.8'

services: php: build: co

Blogs

Buchempfehlungen