Laravel Docker Tutorial
Wie man eine Laravel Anwendung in Docker Container laufen lässt und welche Vorteile und Nachteile damit verbunden sind
Das PHP Framework Laravel hat es mit seiner einfachen Struktur und exzellenten Dokumentation zu den beliebtesten PHP Frameworks geschafft. Nach der Einrichtung der Serverumgebung lässt sich schon bald eine neue Web-Anwendung darstellen. Um den letzten Schritt zu vereinfachen kann man sich Docker zunutze machen. Eine einfache Erklärung findest du in diesem Laravel Docker Tutorial
Docker ermöglicht eine Virtualisierung und Isolierung von Services (siehe Docker in Wikipedia). Dadurch lassen sich Container schaffen, welche unabhängig vom zugrundeliegenden System ausführbar sind. Die einzige Bedingung ist, dass Docker auf dem System bereitsteht.
Vorteile der Virtualisierung mit Docker:
- Services und Anwendungen laufen auf jedem System auf dem Docker zur Verfügung steht
- Services und Anwendungen sind portierbar
- Services und Anwendungen sind sehr leicht skalierbar
Nachteile der Virtualisierung mit Docker:
- Erstmalig ein etwas höherer Einrichtungsaufwand
- Basiswissen über Docker notwendig
0. Vorraussetzungen für dieses Tutorial
Voraussetzung für dieses Tutorial ist die Installation von Docker. Hierzu findest du unter dem folgenden Link nähere Informationen für dein Betriebssystem.
1. Installation von Laravel
Die Installation von Laravel lässt sich, Composer vorausgesetzt, einfach durchführen. Wie in der Dokumentation von Laravel beschrieben sind nur die bzw. der folgende Befehl dazu notwendig:
Download des Laravel Installers mit Composer. Dies ist nur einmalig notwenig!
composer global require "laravel/installer"
Erstellung einer neuen Laravel Applikation im aktuellen Ordner mit dem Namen laravel-application:
laravel new laravel-application
Falls der Befehl „laravel“ nicht gefunden wird muss dieser noch im Pfad (Verzeichnisse, in welche das System nach den ausführbare Anwendungen sucht) ergänzt werden. Hierfür findest du eine Anleitung für MacOS und eine Anleitung für Windows.
2. Vorbereitung der Docker Files
Damit Docker unsere Services für die Laravel Applikation bereitstellen kann, müssen wir die notwendigen Beschreibungen für unsere Dienste bereitstellen. Dadurch weiß Docker in Folge welche Services wie einzurichten sind und wie diese untereinander kommunizieren können.
In diesem Laravel Docker Tutorial werden für Laravel drei Container (Isolierte Services) verwendet:
- Nginx als Webserver
- PHP-FPM für die Verarbeitung der PHP Scripts
- MySQL als Datenbank
Das wichtigste File ist das docker-compose.yml File welches Docker alle Services und die Beziehungen untereinander erklärt.
Das File beschreibt drei Container:
- PHP-FPM Container mit Referenz zum Datenbank Container für Zugriffe auf die Daten
- Web Container für die Weiterleitung bzw. Antwort auf HTTP Anfragen
- MySQL Container für die Daten aus Laravel
Im docker-compose.yml werden zwei Build-Files referenziert, welche vorgeben wie der Service des Containers aufgebaut wird. Für das File web.dockerfile, welches ebenfalls so wie das docker-compose.yml im Stammverzeichnis des neuen Laravels platziert wird, wählen wir den folgenden Inhalt:
FROM nginx
COPY ./vhost.conf /etc/nginx/conf.d/default.conf
Als Inhalt für die vhost.conf Konfigurationsdatei, welche ebenfalls im Hauptverzeichnis abgelegt wird wählen wir den folgenden Inhalt.
Als Letztes definieren wir das referenzierte app.dockerfile welches ebenfalls im Stammverzeichnis abgespeichert wird.
FROM php:7-fpm
RUN apt-get update && apt-get install -y libmcrypt-dev
mysql-client git zip --no-install-recommends
&& docker-php-ext-install mcrypt mysqli pdo pdo_mysql
RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
&& php -r "if (hash_file('SHA384', 'composer-setup.php') === '544e09ee996cdf60ece3804abc52599c22b1f40f4323403c44d44fdfdd586475ca9813a858088ffbc1f233e9b180f061') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
&& php composer-setup.php --filename=composer --install-dir=/usr/local/bin
&& php -r "unlink('composer-setup.php');"
Dies stellt uns eine PHP Umgebung mit den Laravel notwendigen Erweiterungen mit installiertem Composer bereit. Achtung: Der Hash für Composer kann sich in neuen Versionen ändern. Diesen bei Bedarf anpassen, mehr dazu findest du unter Composer Download.
3. Starten der Container 🙂
Die Installation von Docker die Voraussetzung für dieses Laravel Docker Tutorial. Um nun alle Container zu starten und zu verbinden ist nur ein einziger Befehl notwendig
docker-compose up -d
Damit werden die Container zuerst gebaut (lt. der Anleitung in den Dockerfiles web.dockerfile und app.dockerfile) und in Folge gestartet. Wenn ihr nun eure laufenden Container anseht sollte folgende Container laufen.
Wie man in der Ausgabe sehen kann, werden die Ports 80 für HTTP und Port 3306 für MySQL an die jeweiligen Container weitergeleitet. Sollten die Container bei euch nicht startet, hängt das meist mit blockierten Ports zusammen. Bitte kontrolliert in diesem Fall ob nicht bereits ein Webserver oder eine MySQL Instanz die benötigten Port blockiert.
4. Anzeigen der Laravel Applikation
Wenn die Container erfolgreich gestartet wurden, ist die Laravel Applikation nun über den lokalen Computer verfügbar. Dazu öffnest du einfach deinen Web-Browser und öffnest den folgenden Link.
Nun solltest du deine Laravel Applikation bauen können, ohne eine lästige Installation von MySQL oder Apache / Nginx auf deinem lokalen Computer.
Viel Spaß!
Download
Die verwendeten Files kannst du unter dem folgenden Link herunterladen. Das ZIP Archiv beinhaltet die folgenden vier Dateien:
- app.dockerfile
- web.dockerfile
- vhost.conf
- docker-compose.yml