Docker und PHP: Vollständiger Leitfaden zur Containerisierung von Anwendungen

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

Docker und PHP: Containerisierung von Anwendungen von A bis Z



Die Containerisierung von PHP-Anwendungen mit Docker ist zum Standard der modernen Webentwicklung geworden. Unabhängig davon, ob Sie eine einfache Landingpage oder eine komplexe Unternehmensanwendung erstellen, Docker sorgt für eine einheitliche Umgebung in allen Phasen: von der lokalen Entwicklung bis zur Produktion. In diesem Artikel werden wir alle Phasen der Erstellung einer Docker-Infrastruktur für eine PHP-Anwendung durchgehen – vom grundlegenden Dockerfile bis hin zu einem vollwertigen Stack mit Nginx und MySQL.



Warum Docker für PHP-Entwickler wichtig ist



Die traditionelle PHP-Entwicklung stößt oft auf das Problem "Auf meinem Rechner funktioniert es". Unterschiedliche PHP-Versionen, Erweiterungen, Serverkonfigurationen – all das führt zu Konflikten. Docker löst dieses Problem ein für alle Mal:



  • Umgebungsisolierung – jede Anwendung hat ihren eigenen Satz an Abhängigkeiten
  • Reproduzierbarkeit – gleiche Umgebung auf allen Rechnern
  • Skalierbarkeit – einfaches Hinzufügen neuer Dienste (Redis, Elasticsearch)
  • CI/CD-Integration – Container sind ideal für Pipelines


Gehen wir von der Theorie zur Praxis über und erstellen eine vollwertige Docker-Umgebung für eine PHP-Anwendung.



Erstellung eines grundlegenden Dockerfile für PHP



Beginnen wir mit dem Wichtigsten – dem Dockerfile. Dies ist die Anleitung zum Bau des Images Ihrer PHP-Anwendung. Hier ist die optimale Konfiguration für eine production-ready Anwendung:



# Verwenden des offiziellen PHP-Images mit FPMFROM php:8.2-fpm-alpine

# Installation von SystemabhängigkeitenRUN apk add --no-cache \ git \ unzip \ libpq-dev \ libzip-dev \ && docker-php-ext-install \ pdo_mysql \ zip \ opcache

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

# OPcache-Konfiguration für die ProduktionRUN { \ echo 'opcache.memory_consumption=128'; \ echo 'opcache.interned_strings_buffer=8'; \ echo 'opcache.max_accelerated_files=4000'; \ echo 'opcache.revalidate_freq=2'; \ echo 'opcache.fast_shutdown=1'; \ echo 'opcache.enable_cli=1'; \} > /usr/local/etc/php/conf.d/opcache.ini

# Kopieren der AnwendungsdateienWORKDIR /var/www/htmlCOPY . .

# Festlegen der BerechtigungenRUN chown -R www-data:www-data /var/www/html \ && chmod -R 755 storage bootstrap/cache

# Starten von PHP-FPMCMD ["php-fpm"]

EXPOSE 9000


Dieses Dockerfile verwendet Alpine Linux – ein minimales Image, das die Größe des endgültigen Containers erheblich reduziert. Wir installieren nur die notwendigen Erweiterungen: pdo_mysql für die Datenbankarbeit und zip für Composer.



Erstellung und Start des Containers



# Image erstellendocker build -t my-php-app .

# Container startendocker run -d -p 9000:9000 --name php-app my-php-app


Vollständiger Stack mit Nginx und MySQL über docker-compose



Eine reale Anwendung besteht selten aus nur einem PHP-Container. Wir benötigen einen Webserver und eine Datenbank. Hier kommt docker-compose ins Spiel – ein Tool zur Orchestrierung mehrerer Container.



Erstellen wir die Datei docker-compose.yml:



version: '3.8'

services: # PHP-FPM-Dienst app: build: context: . dockerfile: Dockerfile container_name: php-app volumes: - ./:/var/www/html networks: - app-network

# Nginx-Webserver nginx: image: nginx:alpine container_name: php-nginx ports: - "8080:80" volumes: - ./:/var/www/html - ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf depends_on: - app networks: - app-network

# MySQL-Datenbank db: image: mysql:8.0 container_name: php-mysql ports: - "3306:3306" environment: MYSQL_ROOT_PASSWORD: root_password MYSQL_DATABASE: app_database MYSQL_USER: app_user MYSQL_

Blogs

Buchempfehlungen