Wir sprechen dieselbe Sprache: Internationalisierung von JavaScript-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: Fortgeschrittene Anwendungscontainerisierung

\n\n

Die Containerisierung mit Docker ist längst zum Standard für die Entwicklung und Bereitstellung von PHP-Anwendungen geworden. Grundkenntnisse – das Ausführen eines Containers mit PHP und Nginx – sind nur der erste Schritt. Auf fortgeschrittener Ebene müssen Sie Multi-Stage-Builds konfigurieren, die Image-Größe optimieren, mit mehreren Diensten arbeiten, Umgebungsvariablen verwalten, in CI/CD integrieren und eine Microservice-Architektur aufbauen. In diesem Artikel werden wir die wichtigsten Techniken aufschlüsseln, die Ihnen helfen, die PHP-Containerisierung auf die nächste Stufe zu heben.

\n\n

1. Multi-Stage-Builds für PHP

\n\n

Multi-Stage-Builds ermöglichen die Verwendung mehrerer FROM-Anweisungen in einem einzigen Dockerfile. Dies ist ideal für PHP-Anwendungen, bei denen Composer, Node.js und andere Tools während der Build-Phase benötigt werden, aber nur die kompilierten Dateien und ein minimaler Satz von Abhängigkeiten im finalen Image landen sollen.

\n\n

Beispiel-Dockerfile für eine Laravel-Anwendung mit Multi-Stage-Builds:

\n\n
# Stage 1: Install dependencies and build\nFROM composer:2.5 AS vendor\nWORKDIR /app\nCOPY composer.json composer.lock ./\nRUN composer install --no-dev --optimize-autoloader --no-interaction\n\nFROM node:18 AS frontend\nWORKDIR /app\nCOPY package.json package-lock.json ./\nRUN npm ci --only=production\nCOPY resources/ ./resources/\nRUN npm run production\n\n# Stage 2: Final image\nFROM php:8.2-fpm-alpine3.18 AS final\nWORKDIR /var/www/html\n\n# Install required PHP extensions\nRUN apk add --no-cache \\\n        libpng-dev \\\n        libjpeg-turbo-dev \\\n        freetype-dev \\\n        libzip-dev \\\n        oniguruma-dev \\\n    && docker-php-ext-configure gd --with-freetype --with-jpeg \\\n    && docker-php-ext-install -j$(nproc) \\\n        pdo_mysql \\\n        mbstring \\\n        gd \\\n        zip \\\n        opcache\n\n# Copy only necessary files from previous stages\nCOPY --from=vendor /app/vendor/ ./vendor/\nCOPY --from=frontend /app/public/build/ ./public/build/\nCOPY . .\n\n# Optimize for production\nRUN php artisan optimize\n\nEXPOSE 9000\nCMD ["php-fpm"]
\n\n

Wichtigste Vorteile:

\n
    \n
  • Das finale Image enthält nur Laufzeitabhängigkeiten (PHP-FPM, Erweiterungen, Code).
  • \n
  • Build-Tools (Composer, Node.js) gelangen nicht in die Produktion.
  • \n
  • Deutliche Reduzierung der Image-Größe (von 800-900 MB auf 150-200 MB).
  • \n
\n\n

2. Optimierung der Docker-Image-Größe für PHP

\n\n

Kleinere Images laden schneller, benötigen weniger Speicherplatz und verringern die Angriffsfläche. Wichtige Strategien:

\n\n
    \n
  • Alpine-Versionen von Basis-Images verwenden. php:8.2-fpm-alpine wiegt ~50 MB im Vergleich zu ~400 MB für das Standard-Image php:8.2-fpm.
  • \n
  • Anzahl der Layer minimieren. Kombinieren Sie RUN-Befehle mit &&.
  • \n
  • Temporäre Dateien löschen. Nach der Installation von Erweiterungen den Cache bereinigen: docker-php-source delete und apk del .build-deps.
  • \n
  • .dockerignore verwenden. Schließen Sie .git, node_modules, tests, .env und andere unnötige Dateien aus.
  • \n
\n\n

Beispiel für eine erweiterte .dockerignore:

\n\n
.git\n.gitignore\n.env\n.env.example\nnode_modules\ntests\nstorage/logs/*\n!storage/logs/.gitkeep\ndocker-compose.yml\nMakefile\nREADME.md
\n\n

3. Docker Compose für komplexe PHP-Projekte

\n\n

Für PHP-Anwendungen, die Datenbanken, Warteschlangen, Cache und einen Webserver verwenden, wird docker-compose.yml zur zentralen Konfigurationsdatei. Zu den erweiterten Einstellungen gehören:

\n\n
    \n
  • Netzwerke: Dienste isolieren (z. B. sollte die Datenbank von außen nicht erreichbar sein).
  • \n
  • Volumes:<

Blogs

Buchempfehlungen