Docker und PHP: Containerisierung von Anwendungen – vollständiger Leitfaden

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
```html

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

Moderne Webentwicklung ist ohne Containerisierung nicht denkbar. Docker ist zum De-facto-Standard für das Verpacken, Ausliefern und Ausführen von Anwendungen geworden. Für PHP-Entwickler löst der Einsatz von Docker zahlreiche Probleme: von inkompatiblen PHP-Versionen bis hin zu Schwierigkeiten bei der Umgebungskonfiguration auf verschiedenen Rechnern. In diesem Artikel werden wir Schritt für Schritt durchgehen, wie man eine PHP-Anwendung von Grund auf mit Docker und docker-compose containerisiert.



1. Grundlagen von Docker für PHP-Entwickler

Docker ist eine Plattform für die Entwicklung, Auslieferung und Ausführung von Anwendungen in isolierten Umgebungen (Containern). Jeder Container enthält alles, was für den Betrieb benötigt wird: Code, Bibliotheken, Systemprogramme und Einstellungen. Für PHP ist dies besonders relevant, da die Anwendung oft von einer bestimmten Interpreter-Version, Erweiterungen (z. B. pdo_mysql, redis, gd) und einem Webserver (Apache oder Nginx) abhängt.



Die Hauptkomponenten von Docker:

  • Dockerfile — eine Textdatei mit Anweisungen zum Erstellen eines Images.
  • Image — eine unveränderliche Vorlage zum Erstellen von Containern.
  • Container — eine laufende Instanz eines Images.
  • docker-compose — ein Werkzeug zum Definieren und Ausführen von Multi-Container-Anwendungen.


2. Erstellen eines Dockerfiles für eine PHP-Anwendung

Beginnen wir mit einem einfachen Beispiel. Angenommen, wir haben eine PHP-Anwendung mit dem Framework Laravel oder Symfony. Erstellen wir eine Datei Dockerfile im Stammverzeichnis des Projekts:



# Verwende das offizielle PHP 8.2 Image mit FPMFROM php:8.2-fpm-alpine

# Lege das Arbeitsverzeichnis festWORKDIR /var/www/html

# Installiere Systemabhängigkeiten und PHP-ErweiterungenRUN apk add --no-cache \ git \ unzip \ libpng-dev \ libjpeg-turbo-dev \ freetype-dev \ && docker-php-ext-configure gd --with-freetype --with-jpeg \ && docker-php-ext-install -j$(nproc) \ pdo_mysql \ mbstring \ exif \ pcntl \ bcmath \ gd

# Installiere ComposerCOPY --from=composer:latest /usr/bin/composer /usr/bin/composer

# Kopiere die ProjektdateienCOPY . .

# Setze Berechtigungen (für Laravel/Symfony)RUN chown -R www-data:www-data /var/www/html \ && chmod -R 755 storage bootstrap/cache

# Öffne Port 9000 (PHP-FPM)EXPOSE 9000

# StartbefehlCMD ["php-fpm"]


Dieses Dockerfile bewirkt Folgendes:

  1. Es verwendet das leichte Image php:8.2-fpm-alpine.
  2. Es installiert die erforderlichen Erweiterungen: pdo_mysql, gd, mbstring und andere.
  3. Es kopiert Composer aus dem offiziellen Image.
  4. Es überträgt den Anwendungscode.
  5. Es konfiguriert die Zugriffsrechte für Cache und Logs.


3. Einrichtung von docker-compose: PHP + Nginx + MySQL

Für ein reales Projekt benötigen wir einen Webserver und eine Datenbank. Erstellen wir eine Datei docker-compose.yml:



version: '3.8'

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

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

# MySQL Datenbank mysql: image: mysql:8.0 container_name: app_mysql environment: MYSQL_ROOT_PASSWORD: root_password MYSQL_DATABASE: app_db MYSQL_USER: app_user MYSQL_PASSWORD: app_password ports: - "3306:3306" volumes: - mysql_data:/var/lib/mysql networks: - app-network```

Blogs

Buchempfehlungen